def read_step_file_shapes(filename): _shapes = [] # create an handle to a document h_doc = TDocStd_Document() # Create the application app = XCAFApp_Application.GetApplication().GetObject() app.NewDocument(TCollection_ExtendedString("MDTV-CAF"), h_doc) # Get root assembly doc = h_doc.GetObject() h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(doc.Main()) step_reader = STEPCAFControl_Reader() step_reader.SetNameMode(True) status = step_reader.ReadFile(filename) if status == IFSelect_RetDone: step_reader.Transfer(doc) labels = TDF_LabelSequence() shape_tool = h_shape_tool.GetObject() h_shape_tool.GetObject().GetFreeShapes(labels) print("Number of shapes at root :%i" % labels.Length()) for i in range(labels.Length()): label = labels.Value(i + 1) a_shape = h_shape_tool.GetObject().GetShape(label) _shapes.append(a_shape) return _shapes
class ExportCAFMethod (object): def __init__(self, name="name", tol=1.0E-10): self.name = name self.step = STEPCAFControl_Writer() self.step.SetNameMode(True) self.h_doc = TDocStd_Document() self.x_app = XCAFApp_Application.GetApplication().GetObject() self.x_app.NewDocument( TCollection_ExtendedString("MDTV-CAF"), self.h_doc) self.doc = self.h_doc.GetObject() self.h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(self.doc.Main()) self.shape_tool = self.h_shape_tool.GetObject() Interface_Static_SetCVal("write.step.schema", "AP214") def Add(self, shape, name="name"): """ STEPControl_AsIs translates an Open CASCADE shape to its highest possible STEP representation. STEPControl_ManifoldSolidBrep translates an Open CASCADE shape to a STEP manifold_solid_brep or brep_with_voids entity. STEPControl_FacetedBrep translates an Open CASCADE shape into a STEP faceted_brep entity. STEPControl_ShellBasedSurfaceModel translates an Open CASCADE shape into a STEP shell_based_surface_model entity. STEPControl_GeometricCurveSet translates an Open CASCADE shape into a STEP geometric_curve_set entity. """ label = self.shape_tool.AddShape(shape) self.step.Transfer(self.h_doc, STEPControl_AsIs) def Write(self, filename=None): if not filename: filename = self.name path, ext = os.path.splitext(filename) if not ext: ext = ".stp" status = self.step.Write(path + ext) assert(status == IFSelect_RetDone)
def export_STEPFile_single(shape, filename, tol=1.0E-6): """ Exports a .stp file containing the input shapes Parameters ---------- shape : TopoDS_Shape filename : string The output filename """ step = STEPCAFControl_Writer() step.SetNameMode(True) step.SetPropsMode(True) h_doc = TDocStd_Document() x_app = XCAFApp_Application.GetApplication().GetObject() x_app.NewDocument(TCollection_ExtendedString("MDTV-CAF"), h_doc) doc = h_doc.GetObject() h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(doc.Main()) shape_tool = h_shape_tool.GetObject() Interface_Static_SetCVal("write.step.schema", "AP214") # transfer shapes print(filename) shape_tool.AddShape(shape) step.Transfer(h_doc, STEPControl_AsIs) status = step.Write(filename) assert(status == IFSelect_RetDone)
def test_write_step_file(self): ''' Exports a colored box into a STEP file ''' ### initialisation h_doc = Handle_TDocStd_Document() assert (h_doc.IsNull()) # Create the application app = XCAFApp_Application.GetApplication().GetObject() app.NewDocument(TCollection_ExtendedString("MDTV-CAF"), h_doc) # Get root assembly doc = h_doc.GetObject() h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(doc.Main()) l_Colors = XCAFDoc_DocumentTool_ColorTool(doc.Main()) shape_tool = h_shape_tool.GetObject() colors = l_Colors.GetObject() ### create the shape to export test_shape = BRepPrimAPI_MakeBox(100., 100., 100.).Shape() ### add shape shp_label = shape_tool.AddShape(test_shape) ### set a color for this shape r = 1 g = b = 0.5 red_color = Quantity_Color(r, g, b, 0) colors.SetColor(shp_label, red_color, XCAFDoc_ColorGen) # write file WS = XSControl_WorkSession() writer = STEPCAFControl_Writer(WS.GetHandle(), False) writer.Transfer(h_doc, STEPControl_AsIs) status = writer.Write("./test_io/test_ocaf_generated.stp") assert status assert os.path.isfile("./test_io/test_ocaf_generated.stp")
def test_read_step_file(self): ''' Reads the previous step file ''' # create an handle to a document h_doc = Handle_TDocStd_Document() # Create the application app = XCAFApp_Application.GetApplication().GetObject() app.NewDocument(TCollection_ExtendedString("MDTV-CAF"), h_doc) # Get root assembly doc = h_doc.GetObject() h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(doc.Main()) l_colors = XCAFDoc_DocumentTool_ColorTool(doc.Main()) step_reader = STEPCAFControl_Reader() step_reader.SetColorMode(True) step_reader.SetLayerMode(True) step_reader.SetNameMode(True) step_reader.SetMatMode(True) status = step_reader.ReadFile("./test_io/test_ocaf.stp") if status == IFSelect_RetDone: step_reader.Transfer(doc.GetHandle()) labels = TDF_LabelSequence() color_labels = TDF_LabelSequence() shape_tool = h_shape_tool.GetObject() h_shape_tool.GetObject().GetFreeShapes(labels) assert (labels.Length() == 1) sub_shapes_labels = TDF_LabelSequence() assert (not shape_tool.IsAssembly(labels.Value(1))) shape_tool.GetSubShapes(labels.Value(1), sub_shapes_labels) assert (sub_shapes_labels.Length() == 0) l_colors.GetObject().GetColors(color_labels) assert (color_labels.Length() == 1) label_shp = labels.Value(1) a_shape = h_shape_tool.GetObject().GetShape(label_shp) assert (not a_shape.IsNull())
def read_step_file_with_attribute2(filename): """ Read a step file and returns a shape (geometrical information). This uses the XDE of OCCD and will also be able to extract the attribute information such as colour or name or layer. """ h_doc = Handle_TDocStd_Document() # print "Empty Doc?", h_doc.IsNull() ### Create the application app = XCAFApp_Application.GetApplication().GetObject() app.NewDocument(TCollection_ExtendedString("MDTV-CAF"), h_doc) ### Get tools, here only enable the colour attribute doc = h_doc.GetObject() h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(doc.Main()) h_colour_tool = XCAFDoc_DocumentTool_ColorTool(doc.Main()) # l_Layers = XCAFDoc_DocumentTool_LayerTool(doc.Main()) # l_materials = XCAFDoc_DocumentTool_MaterialTool(doc.Main()) shape_tool = h_shape_tool.GetObject() colour_tool = h_colour_tool.GetObject() ### Read files STEPReader = STEPCAFControl_Reader() STEPReader.SetColorMode(True) # STEPReader.SetLayerMode(True) # STEPReader.SetNameMode(True) # STEPReader.SetMatMode(True) status = STEPReader.ReadFile(filename) STEPReader.Reader().PrintCheckLoad(True, 0) if status == IFSelect_RetDone: STEPReader.Transfer(doc.GetHandle()) ### Get root assembly shapeLabels = TDF_LabelSequence() shape_tool.GetFreeShapes(shapeLabels) # print ('Number of shapes at root :%i'%shapeLabels.Length()) ### Here we only have one solid in the model so we directly use the first solid ### If there are more, please use the for loop to get all solids shape = shape_tool.GetShape(shapeLabels.Value(1)) topo = Topo(shape) # for i in range(shapeLabels.Length()): # #print(Labels.Value(i+1).Tag()) # shape=shape_tool.GetShape(shapeLabels.Value(i+1)) # shapes.append(shape) return [topo, colour_tool]
h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(doc.Main()) h_color_tool = XCAFDoc_DocumentTool_ColorTool(doc.Main()) h_layer_tool = XCAFDoc_DocumentTool_LayerTool(doc.Main()) h_mat_tool = XCAFDoc_DocumentTool_MaterialTool(doc.Main()) step_reader = STEPCAFControl_Reader() step_reader.SetColorMode(True) step_reader.SetLayerMode(True) step_reader.SetNameMode(True) step_reader.SetMatMode(True) status = step_reader.ReadFile(filename) if status == IFSelect_RetDone: step_reader.Transfer(doc.GetHandle()) shape_tool = h_shape_tool.GetObject() shape_tool.SetAutoNaming(True) color_tool = h_color_tool.GetObject() lvl = 0 locs = [] cnt = 0 def get_label_name(lab): entry = TCollection_AsciiString() TDF_Tool.Entry(lab, entry) N = Handle_TDataStd_Name() lab.FindAttribute(TDataStd_Name_GetID(), N) n = N.GetObject()
def read_step_file_with_names_colors(filename): """ Returns list of tuples (topods_shape, label, color) Use OCAF. """ # the list: output_shapes = [] # create an handle to a document h_doc = Handle_TDocStd_Document() # Create the application app = XCAFApp_Application.GetApplication().GetObject() app.NewDocument(TCollection_ExtendedString("MDTV-CAF"), h_doc) # Get root assembly doc = h_doc.GetObject() h_shape_tool = XCAFDoc_DocumentTool_ShapeTool(doc.Main()) h_color_tool = XCAFDoc_DocumentTool_ColorTool(doc.Main()) h_layer_tool = XCAFDoc_DocumentTool_LayerTool(doc.Main()) h_mat_tool = XCAFDoc_DocumentTool_MaterialTool(doc.Main()) step_reader = STEPCAFControl_Reader() step_reader.SetColorMode(True) step_reader.SetLayerMode(True) step_reader.SetNameMode(True) step_reader.SetMatMode(True) status = step_reader.ReadFile(filename) if status == IFSelect_RetDone: step_reader.Transfer(doc.GetHandle()) shape_tool = h_shape_tool.GetObject() shape_tool.SetAutoNaming(True) color_tool = h_color_tool.GetObject() #lvl = 0 locs = [] #cnt = 0 def _get_label_name(lab): entry = TCollection_AsciiString() TDF_Tool.Entry(lab, entry) N = Handle_TDataStd_Name() lab.FindAttribute(TDataStd_Name_GetID(), N) n = N.GetObject() if n: return n.Get().PrintToString() return "No Name" def _get_sub_shapes(lab, loc): #global cnt, lvl #cnt += 1 #print("\n[%d] level %d, handling LABEL %s\n" % (cnt, lvl, _get_label_name(lab))) #print() #print(lab.DumpToString()) #print() #print("Is Assembly :", shape_tool.IsAssembly(lab)) #print("Is Free :", shape_tool.IsFree(lab)) #print("Is Shape :", shape_tool.IsShape(lab)) #print("Is Compound :", shape_tool.IsCompound(lab)) #print("Is Component :", shape_tool.IsComponent(lab)) #print("Is SimpleShape :", shape_tool.IsSimpleShape(lab)) #print("Is Reference :", shape_tool.IsReference(lab)) users = TDF_LabelSequence() users_cnt = shape_tool.GetUsers(lab, users) #print("Nr Users :", users_cnt) l_subss = TDF_LabelSequence() shape_tool.GetSubShapes(lab, l_subss) #print("Nb subshapes :", l_subss.Length()) l_comps = TDF_LabelSequence() shape_tool.GetComponents(lab, l_comps) #print("Nb components :", l_comps.Length()) #print() if shape_tool.IsAssembly(lab): l_c = TDF_LabelSequence() shape_tool.GetComponents(lab, l_c) for i in range(l_c.Length()): label = l_c.Value(i + 1) if shape_tool.IsReference(label): #print("\n######## reference label :", label) label_reference = TDF_Label() shape_tool.GetReferredShape(label, label_reference) loc = shape_tool.GetLocation(label) #print(" loc :", loc) #trans = loc.Transformation() #print(" tran form :", trans.Form()) #rot = trans.GetRotation() #print(" rotation :", rot) #print(" X :", rot.X()) #print(" Y :", rot.Y()) #print(" Z :", rot.Z()) #print(" W :", rot.W()) #tran = trans.TranslationPart() #print(" translation :", tran) #print(" X :", tran.X()) #print(" Y :", tran.Y()) #print(" Z :", tran.Z()) locs.append(loc) #print(">>>>") #lvl += 1 _get_sub_shapes(label_reference, loc) #lvl -= 1 #print("<<<<") locs.pop() elif shape_tool.IsSimpleShape(lab): #print("\n######## simpleshape label :", lab) shape = shape_tool.GetShape(lab) #print(" all ass locs :", locs) loc = TopLoc_Location() for i in range(len(locs)): #print(" take loc :", locs[i]) loc = loc.Multiplied(locs[i]) #trans = loc.Transformation() #print(" FINAL loc :") #print(" tran form :", trans.Form()) #rot = trans.GetRotation() #print(" rotation :", rot) #print(" X :", rot.X()) #print(" Y :", rot.Y()) #print(" Z :", rot.Z()) #print(" W :", rot.W()) #tran = trans.TranslationPart() #print(" translation :", tran) #print(" X :", tran.X()) #print(" Y :", tran.Y()) #print(" Z :", tran.Z()) shape = BRepBuilderAPI_Transform(shape, loc.Transformation()).Shape() c = Quantity_Color() # colorSet = False # if (color_tool.GetInstanceColor(shape, 0, c) or # color_tool.GetInstanceColor(shape, 1, c) or # color_tool.GetInstanceColor(shape, 2, c)): # for i in (0, 1, 2): # color_tool.SetInstanceColor(shape, i, c) # colorSet = True # n = c.Name(c.Red(), c.Green(), c.Blue()) # #print(' instance color Name & RGB: ', c, n, c.Red(), c.Green(), c.Blue()) # if not colorSet: color_tool.GetColor(lab, 0, c) color_tool.GetColor(lab, 1, c) color_tool.GetColor(lab, 2, c) #for i in (0, 1, 2): # color_tool.SetInstanceColor(shape, i, c) #n = c.Name(c.Red(), c.Green(), c.Blue()) #print(' shape color Name & RGB: ', c, n, c.Red(), c.Green(), c.Blue()) # for i in range(l_subss.Length()): # lab = l_subss.Value(i+1) # print("\n######## simpleshape subshape label :", lab) # shape_sub = shape_tool.GetShape(lab) # c = Quantity_Color() # colorSet = False # if (color_tool.GetInstanceColor(shape_sub, 0, c) or # color_tool.GetInstanceColor(shape_sub, 1, c) or # color_tool.GetInstanceColor(shape_sub, 2, c)): # for i in (0, 1, 2): # color_tool.SetInstanceColor(shape_sub, i, c) # colorSet = True # n = c.Name(c.Red(), c.Green(), c.Blue()) # #print(' instance color Name & RGB: ', c, n, c.Red(), c.Green(), c.Blue()) # if not colorSet: # if (color_tool.GetColor(lab, 0, c) or # color_tool.GetColor(lab, 1, c) or # color_tool.GetColor(lab, 2, c)): # for i in (0, 1, 2): # color_tool.SetInstanceColor(shape, i, c) # n = c.Name(c.Red(), c.Green(), c.Blue()) # #print(' shape color Name & RGB: ', c, n, c.Red(), c.Green(), c.Blue()) output_shapes.append([shape, _get_label_name(lab), c]) def _get_shapes(): labels = TDF_LabelSequence() h_shape_tool.GetObject().GetFreeShapes(labels) #global cnt #cnt += 1 print() print("Number of shapes at root :", labels.Length()) print() root = labels.Value(1) _get_sub_shapes(root, None) _get_shapes() return output_shapes
l_materials = XCAFDoc_DocumentTool_MaterialTool(doc.Main()) step_reader = STEPCAFControl_Reader() step_reader.SetColorMode(True) step_reader.SetLayerMode(True) step_reader.SetNameMode(True) step_reader.SetMatMode(True) status = step_reader.ReadFile(filename) if status == IFSelect_RetDone: step_reader.Transfer(doc.GetHandle()) labels = TDF_LabelSequence() color_labels = TDF_LabelSequence() shape_tool = h_shape_tool.GetObject() h_shape_tool.GetObject().GetFreeShapes(labels) print("Number of shapes at root :%i" % labels.Length()) for i in range(labels.Length()): sub_shapes_labels = TDF_LabelSequence() print("Is Assembly :", shape_tool.IsAssembly(labels.Value(i + 1))) sub_shapes = shape_tool.GetSubShapes(labels.Value(i + 1), sub_shapes_labels) print("Number of subshapes in the assemly :%i" % sub_shapes_labels.Length()) l_colors.GetObject().GetColors(color_labels) print("Number of colors=%i" % color_labels.Length()) for i in range(color_labels.Length()): color = color_labels.Value(i + 1)