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); }
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)); }
/// <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); }
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); }
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)); }