// Perform the work of making a netlist from this design... void CNetList::MakeNet( CTinyCadMultiDoc *pDesign ) { linkCollection nets; int file_name_index = 0; CImportFile *f = new CImportFile; f->m_file_name_index = file_name_index; m_imports.push_back( f ); // Make the nets for our sheets nets.resize( pDesign->GetNumberOfSheets() ); // Generate a netlist for every sheet in this design for (int i = 0; i < pDesign->GetNumberOfSheets(); i++) { nets[i].m_prefix_references = m_prefix_references; nets[i].m_prefix_import = m_prefix_import; nets[i].MakeNetForSheet( m_imports, 0, file_name_index, i+1, pDesign->GetSheet( i ) ); } // Now include from our imports if (m_follow_imports) { for ( unsigned int ip = 1; ip < m_imports.size(); ++ ip ) { // Now create the nets for it int base = nets.size(); nets.resize( base + m_imports[ip]->m_pDesign->GetNumberOfSheets() ); // Generate a netlist for every sheet in this imported design for (int i = 0; i < m_imports[ip]->m_pDesign->GetNumberOfSheets(); i++) { nets[i + base].m_prefix_references = m_prefix_references; nets[i + base].m_prefix_import = m_prefix_import; nets[i + base].MakeNetForSheet( m_imports, m_imports[ip]->m_file_name_index, file_name_index, i+1, m_imports[ip]->m_pDesign->GetSheet( i ) ); } } } // Now link the nets together Link( nets ); // ... and write the results into the design for ease of use... WriteWires(); }
void WireExport::Export(string folder, string fileName) { MStatus stat; mFolder = folder; mFileName = fileName; mSaver.SetFolder(mFolder); MItDependencyNodes itRenderLayers(MFn::kRenderLayer,&stat); err_code(stat); MFnRenderLayer wireLayer; while (!itRenderLayers.isDone()) { MFnRenderLayer renderLayer( itRenderLayers.item() ); if (renderLayer.name() == "wire") { stat = wireLayer.setObject( renderLayer.object() ); err_code(stat); break; } stat = itRenderLayers.next(); err_code(stat); } MItDependencyNodes itDepCurve(MFn::kNurbsCurve,&stat); err_code(stat); vector<Wire> wires; while (!itDepCurve.isDone()) { MObject obj = itDepCurve.item(); MFnNurbsCurve wire(obj, &stat); err_code(stat); bool objInLayer = wireLayer.inLayer(obj, &stat); //err_code(stat); if (!objInLayer) { stat = itDepCurve.next(); err_code(stat); continue; } MString cmd = MString("reference -q -f ") + wire.name(); MString file_id; stat = MGlobal::executeCommand( cmd, file_id ); if( stat == MS::kSuccess ) { itDepCurve.next(); continue; } MObject parentObj = wire.parent(0, &stat); err_code(stat); Wire newWire; newWire.name = wire.name().asChar(); MPointArray points; stat = wire.getCVs(points); err_code(stat); int numOfPoints = points.length(); for (int n = 0; n < numOfPoints ; n++) { MPoint point = points[n]; WirePoint wirePoint; wirePoint.x = (float)point.x; wirePoint.z = (float)point.z; double param; stat = wire.getParamAtPoint( point, param ); err_code(stat); MVector tangent = wire.tangent( param , MSpace::kObject, &stat); err_code(stat); tangent.normalize(); wirePoint.tx = (float)tangent.x; wirePoint.tz = (float)tangent.z; newWire.wirePoints.push_back(wirePoint); } wires.push_back(newWire); stat = itDepCurve.next(); err_code(stat); } WriteWires(wires); }