मैं एक बटन क्लिक के माध्यम से 2डी देखने योग्य घुमाने में सक्षम होना चाहता हूं।

मैंने देखा है कि यह रोल टूल का उपयोग करके माउस के साथ नीचे हो सकता है, लेकिन मैं एक बार में देखने योग्य को 90 डिग्री तक घुमाने में सक्षम होना चाहता हूं।

0
Neil_M 10 जुलाई 2017, 17:35

2 जवाब

सबसे बढ़िया उत्तर

यह कोड दिखाता है कि एक विशिष्ट अक्ष और केंद्र के चारों ओर fragIds के एक सेट को कैसे घुमाना है, यदि आप पूर्ण मॉडल को घुमाना चाहते हैं, तो आपको सभी टुकड़ों को घुमाने की आवश्यकता है:

// Rotate selected fragments
rotateFragments (model, fragIdsArray, axis, angle, center) {

  var quaternion = new THREE.Quaternion()

  quaternion.setFromAxisAngle(axis, angle)

  fragIdsArray.forEach((fragId, idx) = > {

    var fragProxy = this.viewer.impl.getFragmentProxy(
      model, fragId)

    fragProxy.getAnimTransform()

    var position = new THREE.Vector3(
      fragProxy.position.x - center.x,
      fragProxy.position.y - center.y,
      fragProxy.position.z - center.z)

    position.applyQuaternion(quaternion)

    position.add(center)

    fragProxy.position = position

    fragProxy.quaternion.multiplyQuaternions(
      quaternion, fragProxy.quaternion)

    fragProxy.updateAnimTransform()
  })
}

// get leaf node fragIds
static getLeafFragIds (model, leafId) {

  const instanceTree = model.getData().instanceTree

  const fragIds = []

  instanceTree.enumNodeFragments(
      leafId, (fragId) => {
      fragIds.push(fragId)
  })

  return fragIds
}
1
Philippe 19 जुलाई 2017, 09:42

इसलिए मैंने आप जो करना चाह रहे हैं, उसके करीब कुछ करने की कोशिश की है, लेकिन हो सकता है कि आपको यह जांचने के लिए अपनी तरफ से कुछ शोध करने की आवश्यकता हो कि क्या दृश्य में पहले से मौजूद मॉडल के साथ बटन क्लिक करने के समय दृश्य अपडेट हो सकता है, मैं मुझे लगता है कि viewer.impl.sceneUpdated(true) को कॉल करने से काम चल जाएगा, लेकिन मुझे यकीन नहीं है, यह भी ध्यान रखें कि यह फ़ंक्शन सार्वजनिक नहीं लगता है, इसलिए इस पर कोई अच्छा दस्तावेज नहीं है।

तो मुझे बताएं कि मैंने पहले क्या प्रयास किया है। मैंने एक नमूना बनाया है जहाँ आपके पास एक 2D लॉट मॉडल है, जो किसी एक पॉलीलाइन या लॉट के हैच पर चयन के बाद आप एक घर का प्रतिनिधित्व करने वाला दूसरा मॉडल जोड़ सकते हैं। नमूने में बाएं निचले कोने पर 3 बटन हैं और एक इनपुट बॉक्स है जो आपको 0-360 डिग्री से एक मान इनपुट करने की अनुमति देता है ताकि दूसरे मॉडल को आपके इच्छित रोटेशन के साथ लोड किया जा सके।

यहां रेपो का लिंक दिया गया है जिसमें डेमो का लिंक भी है। https://github.com/jaimerosales/viewer-dwgoffset

यहां एक फ़ंक्शन है जो आपको एक आइडिया दे सकता है, मैं मॉडल को लोड करने का प्रयास करूंगा और उसके बाद मैंने पहले उल्लेख किए गए दृश्य अपडेट के बाद परिवर्तन लागू किया।

applyTransform (model) {

  var viewer = this._viewer

  // This is use for Transformation on 3D models, for 2D only pass rotation 
  // value on Z axis

  var euler = new THREE.Euler(
    model.transform.rotation.x * Math.PI/180,
    model.transform.rotation.y * Math.PI/180,
    model.transform.rotation.z * Math.PI/180,
    'XYZ')

  var quaternion = new THREE.Quaternion()

  quaternion.setFromEuler(euler)

  function _transformFragProxy (fragId) {

    var fragProxy = viewer.impl.getFragmentProxy(
      model,
      fragId)

    fragProxy.getAnimTransform()

    fragProxy.position = model.transform.translation

    fragProxy.scale = model.transform.scale

    //Not a standard three.js quaternion
    fragProxy.quaternion._x = quaternion.x
    fragProxy.quaternion._y = quaternion.y
    fragProxy.quaternion._z = quaternion.z
    fragProxy.quaternion._w = quaternion.w

    fragProxy.updateAnimTransform()
  }

  var fragCount = model.getFragmentList().
    fragments.fragId2dbId.length

  //fragIds range from 0 to fragCount-1
  for (var fragId = 0; fragId < fragCount; ++fragId) {

    _transformFragProxy(fragId)
  }
}
0
halfer 24 फरवरी 2019, 22:26