Beispiel #1
0
def export_shapes2(shapeList, filename, colorList=[]):
    h_doc = TDocStd.Handle_TDocStd_Document()
    app = XCAFApp.XCAFApp_Application_GetApplication().GetObject()
    app.NewDocument(TCollection.TCollection_ExtendedString("MDTV-CAF"),h_doc)
    doc = h_doc.GetObject()
    h_shape_tool = XCAFDoc.XCAFDoc_DocumentTool().ShapeTool(doc.Main())
    h_color_tool = XCAFDoc.XCAFDoc_DocumentTool().ColorTool(doc.Main())
    shape_tool = h_shape_tool.GetObject()
    color_tool = h_color_tool.GetObject()
    top_label = shape_tool.NewShape()
    
    colorList.extend(["brown"]*(len(shapeList) - len(colorList)))
    cmap = get_color_map()
    
    tr = gp.gp_Trsf()
    loc = TopLoc.TopLoc_Location(tr)
    print(colorList)
    print(shapeList)
    colorMap = dict((c, Quantity.Quantity_Color(cmap.get(c, 133))) for c in colorList)
    
    for shape, color in zip(shapeList, colorList):
        if not shape:
            continue
        print("color:", color, "shape", shape)
        label = shape_tool.AddShape(shape, False, True)
        ref_label = shape_tool.AddComponent(top_label, label, loc)
        c = colorMap[color]
        color_tool.SetColor(ref_label, c, XCAFDoc.XCAFDoc_ColorGen)
        
    mode = STEPControl.STEPControl_AsIs
    writer = STEPCAFControl.STEPCAFControl_Writer()
    writer.Transfer(h_doc, mode)
    writer.Write(str(filename))
Beispiel #2
0
    def LoadSTEPFile(self, fname):
        reader = STEPCAFControl.STEPCAFControl_Reader()
        reader.ReadFile(str(fname))

        h_doc = self.MakeNewDocHandle()

        reader.Transfer(h_doc)

        doc = h_doc.GetObject()
        self.docs.append(Doc(filename=fname, TDocStd=doc))
Beispiel #3
0
    def write_file(self):
        r"""Write file"""
        work_session = XSControl.XSControl_WorkSession()
        writer = STEPCAFControl.STEPCAFControl_Writer(work_session.GetHandle(),
                                                      False)

        transfer_status = writer.Transfer(self.h_doc,
                                          STEPControl.STEPControl_AsIs)
        if transfer_status != IFSelect.IFSelect_RetDone:
            msg = "An error occurred while transferring a shape to the STEP writer"
            logger.error(msg)
            raise ValueError(msg)
        logger.info('Writing STEP file')

        write_status = writer.Write(self.filename)
        if write_status == IFSelect.IFSelect_RetDone:
            logger.info("STEP file write successful.")
        else:
            msg = "An error occurred while writing the STEP file"
            logger.error(msg)
            raise ValueError(msg)
Beispiel #4
0
from OCC import XCAFApp, STEPCAFControl, TDocStd, TCollection,\
        XCAFDoc, BRepPrimAPI, Quantity, STEPControl,\
        TopLoc, gp, TDF, TPrsStd
        
from viewer import viewXDE

reader = STEPCAFControl.STEPCAFControl_Reader()
print "1"
reader.ReadFile('XDE_test.step')
print "2"
#
# Create the TDocStd document
#
h_doc = TDocStd.Handle_TDocStd_Document()
print h_doc.IsNull()
#
# Create the application: really *awfull* way to do that
#
#app = Handle_XCAFApp_Application().GetObject()
app = XCAFApp.GetApplication().GetObject()
app.NewDocument(TCollection.TCollection_ExtendedString("MDTV-CAF"),h_doc)
print "3"
#
# Transfer
#
print h_doc.IsNull()
if not reader.Transfer(h_doc):
    print "Error"
print "4 bis"
#
# Get root assembly
Beispiel #5
0
    def read_file(self):
        r"""Read file"""
        logger.info("Reading STEP file")
        h_doc = TDocStd.Handle_TDocStd_Document()

        # Create the application
        app = XCAFApp._XCAFApp.XCAFApp_Application_GetApplication().GetObject()
        app.NewDocument(TCollection.TCollection_ExtendedString("MDTV-CAF"),
                        h_doc)

        # Get root assembly
        doc = h_doc.GetObject()
        h_shape_tool = XCAFDoc.XCAFDoc_DocumentTool().ShapeTool(
            doc.Main()).GetObject()
        color_tool = XCAFDoc.XCAFDoc_DocumentTool().ColorTool(
            doc.Main()).GetObject()
        layer_tool = XCAFDoc.XCAFDoc_DocumentTool().LayerTool(
            doc.Main()).GetObject()
        l_materials = XCAFDoc.XCAFDoc_DocumentTool().MaterialTool(
            doc.Main()).GetObject()

        step_reader = STEPCAFControl.STEPCAFControl_Reader()
        step_reader.SetColorMode(True)
        step_reader.SetLayerMode(True)
        step_reader.SetNameMode(True)
        step_reader.SetMatMode(True)

        status = step_reader.ReadFile(self.filename)

        if status == IFSelect.IFSelect_RetDone:
            logger.info("Transfer doc to STEPCAFControl_Reader")
            step_reader.Transfer(doc.GetHandle())
        else:
            raise ValueError("could not read {}".format(self.filename))

        labels = TDF.TDF_LabelSequence()
        color_labels = TDF.TDF_LabelSequence()
        # TopoDS_Shape a_shape;
        h_shape_tool.GetFreeShapes(labels)
        h_shape_tool.GetShapes(labels)

        logger.info('Number of shapes at root :%i' % labels.Length())

        # for i in range(labels.Length()):
        #     a_shape = h_shape_tool.GetObject().GetShape(labels.Value(i+1))
        #     logger.debug("%i - type : %s" % (i, a_shape.ShapeType()))
        #     sub_shapes_labels = TDF.TDF_LabelSequence()
        #     print("Is Assembly?", shape_tool.IsAssembly(labels.Value(i + 1)))
        #     # sub_shapes = shape_tool.getsubshapes(labels.Value(i+1), sub_shapes_labels)
        #
        #     sub_shapes = shape_tool.FindSubShape(labels.Value(i + 1), a_shape, labels.Value(i + 1))
        #     print('Number of subshapes in the assembly : %i' % sub_shapes_labels.Length())
        #
        # color_tool.GetObject().GetColors(color_labels)
        # logger.info('Number of colors : %i' % color_labels.Length())

        for i in range(labels.Length()):
            # print i
            label = labels.Value(i + 1)
            logger.debug("Label : %s" % label)
            a_shape = h_shape_tool.GetShape(labels.Value(i + 1))

            # string_seq = TColStd.TColStd_HSequenceOfExtendedString()
            # string_seq is an TColStd.TColStd_HSequenceOfExtendedString
            string_seq = layer_tool.GetLayers(a_shape)
            color = Quantity.Quantity_Color()
            c = color_tool.GetColor(a_shape, XCAFDoc.XCAFDoc_ColorSurf, color)

            logger.info("The shape type is : %i" % a_shape.ShapeType())
            if a_shape.ShapeType() == TopAbs.TopAbs_COMPOUND:
                logger.info("The shape type is TopAbs.TopAbs_COMPOUND")
                topo = Topo(a_shape)
                logger.info("Nb of compounds : %i" % topo.number_of_compounds)
                logger.info("Nb of solids : %i" % topo.number_of_solids)
                logger.info("Nb of shells : %i" % topo.number_of_shells)
                for solid in topo.solids:
                    logger.info("Adding solid to the shapes list")
                    self._shapes.append(solid)
            elif a_shape.ShapeType() == TopAbs.TopAbs_SOLID:
                logger.info("The shape type is TopAbs.TopAbs_SOLID")
                self._shapes.append(a_shape)
                self._colors.append(color)
                self._layers.append(string_seq)

        return True