Ejemplo n.º 1
0
        internal static Surface mNurbsSurfaceToDynamoSurface(MFnNurbsSurface surface, MSpace.Space space)
        {
            MPointArray cvs = new MPointArray();

            surface.getCVs(cvs, space);

            MDoubleArray knotU = new MDoubleArray();
            MDoubleArray knotV = new MDoubleArray();


            surface.getKnotsInU(knotU);
            surface.getKnotsInV(knotV);
            double Us = knotU[0], Ue = knotU[knotU.Count - 1], Vs = knotV[0], Ve = knotV[knotV.Count - 1];

            //surface.getKnotDomain(ref Us, ref Ue, ref Vs, ref Ve);

            knotU.insert(Us, 0);
            knotU.Add(Ue);
            knotV.insert(Vs, 0);
            knotV.Add(Ve);

            int cvUct = surface.numCVsInU;
            int cvVct = surface.numCVsInV;

            int uDeg = surface.degreeU;
            int vDeg = surface.degreeV;

            Point[][]  ctrlPts = new Point[cvUct][];
            double[][] weights = new double[cvUct][];

            for (int i = 0; i < cvUct; i++)
            {
                ctrlPts[i] = new Point[cvVct];
                weights[i] = new double[cvVct];

                for (int j = 0; j < cvVct; j++)
                {
                    weights[i][j] = 1;
                    if (MGlobal.isZAxisUp)
                    {
                        ctrlPts[i][j] = Point.ByCoordinates(cvs[(i * cvVct) + j].x, cvs[(i * cvVct) + j].y, cvs[(i * cvVct) + j].z);
                    }
                    else
                    {
                        ctrlPts[i][j] = Point.ByCoordinates(cvs[(i * cvVct) + j].x, -cvs[(i * cvVct) + j].z, cvs[(i * cvVct) + j].y);
                    }
                }
            }

            //Surface result = NurbsSurface.ByControlPoints(ctrlPts, uDeg, vDeg);
            Surface result = NurbsSurface.ByControlPointsWeightsKnots(ctrlPts, weights, knotU.ToArray(), knotV.ToArray(), uDeg, vDeg);

            return(result);
        }
Ejemplo n.º 2
0
        public void sendCurveToMaya(string node_name, Point3DCollection controlVertices, List <double> knots, int degree,
                                    MFnNurbsCurveForm form)
        {
            var dn             = new MFnDagNode(getDagNode(node_name));
            var plCreate       = dn.findPlug("create");
            var plDynamoCreate = new MPlug();

            try
            {
                plDynamoCreate = dn.findPlug("dynamoCreate");
            }
            catch
            {
                var tAttr           = new MFnTypedAttribute();
                var ldaDynamoCreate = tAttr.create("dynamoCreate", "dc", MFnData.Type.kNurbsCurve, MObject.kNullObj);
                try
                {
                    dn.addAttribute(ldaDynamoCreate, MFnDependencyNode.MAttrClass.kLocalDynamicAttr);
                    plDynamoCreate = dn.findPlug(ldaDynamoCreate);
                    var dagm = new MDagModifier();
                    dagm.connect(plDynamoCreate, plCreate);
                    dagm.doIt();
                }
                catch
                {
                    return;
                }
            }

            var ncd    = new MFnNurbsCurveData();
            var oOwner = ncd.create();
            var nc     = new MFnNurbsCurve();

            var p_aControlVertices = new MPointArray();

            foreach (var p in controlVertices)
            {
                p_aControlVertices.Add(new MPoint(p.X, p.Y, p.Z));
            }

            var d_aKnots = new MDoubleArray();

            for (var i = 1; i < knots.Count - 1; ++i)
            {
                d_aKnots.Add(knots[i]);
            }

            nc.create(p_aControlVertices, d_aKnots, (uint)degree, (MFnNurbsCurve.Form)form, false, true, oOwner);

            plDynamoCreate.setMObject(oOwner);

            MGlobal.executeCommandOnIdle(string.Format("dgdirty {0}.create;", node_name));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Using the Maya object name, find its keyframe.
        /// </summary>
        /// <param name="objectName"></param>
        /// <returns>A sorted list of keyframe without duplication. This list contains at least the first and last key of the time range.</returns>
        public IList <double> GetKeyframes(string objectName)
        {
            IList <double> keys = new List <double>();

            int start = Loader.GetMinTime();
            int end   = Loader.GetMaxTime();

            // Get the keyframe
            try
            {
                MDoubleArray keyArray = new MDoubleArray();
                MGlobal.executeCommand($"keyframe -t \":\" -q -timeChange {objectName}", keyArray);

                keyArray.Add(start);
                keyArray.Add(end);

                SortedSet <double> sortedKeys = new SortedSet <double>(keyArray);
                keys = new List <double>(sortedKeys);
            }
            catch { }

            return(keys);
        }
Ejemplo n.º 4
0
        public static MDagPath CreateCurve(MPointArray points, string curveName, int degree = 1, MFnNurbsCurve.Form form = MFnNurbsCurve.Form.kOpen)
        {
            MDoubleArray indices = new MDoubleArray();

            for (int i = 0; i < points.Count; i++)
            {
                indices.Add(i);
            }

            MFnNurbsCurve     nc           = new MFnNurbsCurve();
            MObject           curveObject  = nc.create(points, indices, (uint)degree, form, false, false);
            MDagPath          curveDagPath = MDagPath.getAPathTo(curveObject);
            MFnDependencyNode dn           = new MFnDependencyNode(curveObject);

            dn.setName(curveName);
            return(curveDagPath);
        }
Ejemplo n.º 5
0
        public void sendCurveToMaya(string node_name, Point3DCollection controlVertices, List<double> knots, int degree, MFnNurbsCurveForm form)
        {
            MFnDagNode dn = new MFnDagNode(getDagNode(node_name));
            MPlug plCreate = dn.findPlug("create");
            MPlug plDynamoCreate = new MPlug();

            try
            {
                plDynamoCreate = dn.findPlug("dynamoCreate");
            }
            catch
            {
                MFnTypedAttribute tAttr = new MFnTypedAttribute();
                MObject ldaDynamoCreate = tAttr.create("dynamoCreate", "dc", MFnData.Type.kNurbsCurve, MObject.kNullObj);
                try
                {
                    dn.addAttribute(ldaDynamoCreate, MFnDependencyNode.MAttrClass.kLocalDynamicAttr);
                    plDynamoCreate = dn.findPlug(ldaDynamoCreate);
                    MDagModifier dagm = new MDagModifier();
                    dagm.connect(plDynamoCreate, plCreate);
                    dagm.doIt();
                }
                catch
                {
                    return;
                }
            }

            MFnNurbsCurveData ncd = new MFnNurbsCurveData();
            MObject oOwner = ncd.create();
            MFnNurbsCurve nc = new MFnNurbsCurve();

            MPointArray p_aControlVertices = new MPointArray();
            foreach (Point3D p in controlVertices)
            {
                p_aControlVertices.Add(new MPoint(p.X, p.Y, p.Z));
            }

            MDoubleArray d_aKnots = new MDoubleArray();
            for (int i = 1; i < knots.Count - 1; ++i )
            {
                d_aKnots.Add(knots[i]);
            }

            nc.create(p_aControlVertices, d_aKnots, (uint)degree, (MFnNurbsCurve.Form)form, false, true, oOwner);

            plDynamoCreate.setMObject(oOwner);

            MGlobal.executeCommandOnIdle(String.Format("dgdirty {0}.create;", node_name));
        }