コード例 #1
0
        // GENERATE INSTANCE
        public override GameObject generate(bool makeGameObjects, AXParametricObject initiator_po, bool isReplica)
        {
            if (parametricObject == null || !parametricObject.isActive)
            {
                return(null);
            }

            if (P_Input == null || P_Input.DependsOn == null || P_Input.DependsOn.meshes == null || P_Input.DependsOn.meshes.Count == 0)
            {
                return(null);
            }

            if (inputSrc_po == null)
            {
                inputSrc_po = P_Input.DependsOn.parametricObject;
            }
            preGenerate();

            GameObject go = null;


            if (makeGameObjects)
            {
                go = inputSrc_po.generator.generate(true, initiator_po, isReplica);
                if (go == null)
                {
                    return(null);
                }

                go.name = go.name + " (Inst)";
                AXGameObject axgo = go.GetComponent <AXGameObject>();
                if (axgo != null)
                {
                    axgo.makerPO_GUID = parametricObject.Guid;
                }
            }

            List <AXMesh> ax_meshes = new List <AXMesh>();

            Matrix4x4 srcLocalM = inputSrc_po.getLocalMatrix().inverse;

            // just pass it through, but use grandparent's transform!

            // Instance does not inhereit and build on the transform of its source object.
            // It only uses its mesh, textures, etc.
            for (int mi = 0; mi < P_Input.DependsOn.meshes.Count; mi++)
            {
                AXMesh amesh = P_Input.DependsOn.meshes [mi];
                ax_meshes.Add(amesh.Clone(srcLocalM * amesh.transMatrix));
            }

            parametricObject.bounds     = inputSrc_po.bounds;
            parametricObject.boundsMesh = inputSrc_po.boundsMesh;

            parametricObject.finishMultiAXMeshAndOutput(ax_meshes, isReplica);

            // Turn ax_meshes into GameObjects
            if (makeGameObjects)
            {
                Matrix4x4 tmx = parametricObject.getLocalMatrix();

                go.transform.localScale = AXUtilities.GetScale(tmx);                         //
                go.transform.rotation   = AXUtilities.QuaternionFromMatrix(tmx);
                go.transform.position   = AXUtilities.GetPosition(tmx);

                return(go);
            }
            return(null);
        }
コード例 #2
0
 public static float getHandlesMatrixScaleAdjuster()
 {
     return(1.442f / AXUtilities.GetScale(Handles.matrix).magnitude);
 }