Esempio n. 1
0
        void apply_scene_scale(TargetObject obj, Vector3f scale)
        {
            // construct scaled scene frame and update SO
            Frame3f f = obj.sceneFrame;

            f.Origin          = scale * (f.Origin - sharedOriginS) + sharedOriginS;
            obj.curSceneFrame = f;
            obj.SO.SetLocalFrame(f, CoordSpace.SceneCoords);

            Frame3f fL = obj.SO.GetLocalFrame(CoordSpace.ObjectCoords);

            // transform is to map from original obj frame into scene, scale, and then map into scaled obj frame
            TransformSequence seq = new TransformSequence();

            seq.AppendFromFrame(obj.objFrame);
            seq.AppendScale(scale, sharedOriginS);
            seq.AppendToFrame(fL);

            obj.SO.EditAndUpdateMesh((mesh) => {
                // restore original positions
                mesh.VerticesBuffer.copy(obj.InputMeshV);
                if (obj.InputMeshN != null && mesh.HasVertexNormals)
                {
                    mesh.NormalsBuffer.copy(obj.InputMeshN);
                }
                // apply xform
                MeshTransforms.PerVertexTransform(mesh, seq);
            }, GeometryEditTypes.VertexDeformation);
        }
Esempio n. 2
0
        /// <summary>
        /// Cache the transform sequence from SO up to scene coordinates
        /// </summary>
        public static TransformSequence ObjectToSceneXForm(SceneObject so)
        {
            TransformSequence seq   = new TransformSequence();
            SceneObject       curSO = so;

            while (curSO != null)
            {
                Frame3f  curF  = curSO.GetLocalFrame(CoordSpace.ObjectCoords);
                Vector3f scale = curSO.GetLocalScale();
                seq.AppendScale(scale);
                seq.AppendFromFrame(curF);
                SOParent parent = curSO.Parent;
                if (parent is FScene)
                {
                    break;
                }
                curSO = (parent as SceneObject);
            }
            return(seq);
        }