Hello, everyone! I have a slicing program up and running!
Unfortunately, when I try to do large numbers of slices or larger objects, my memory usage continually rises. Initially I had visions of keeping a copy of the faces created by the slices for better visualization, but re-worked my code to collapse everything ( optionally ) into simple strings so I can free the OCC objects. But alas, I cannot figure out how to release the memory. Here is my code. My slicing approach is different than the slicer you guys implemented-- I am using BRepAlgoAPI_Cut so that my result is a face with the edges and wires organized. BRepAlgo_Section is faster, but then I dont have a face, and I was unable to figure out how to use ShapeAnalysis:WireOrder to get the wires organized. _anyway_ here is my slice code. the code in the #free memory section doesnt seem to have had any effect. Does anyone know how I should be freeing memory for the occ objects? thanks in advance, code follows dave def _makeSlice(self,shapeToSlice,zLevel,curveTolerance=0.001): s = Slice(); #change if layers are variable thickness s.sliceHeight = self.sliceHeight; s.zLevel = zLevel; #make a cutting plane p = gp.gp_Pnt ( 0,0,zLevel ); origin = gp.gp_Pnt(0,0,zLevel-1); csys = gp.gp_Ax3(p,gp.gp().DZ()) cuttingPlane = gp.gp_Pln(csys); bff = BRepBuilderAPI.BRepBuilderAPI_MakeFace(cuttingPlane); face = bff.Face(); #odd, a halfspace is faster than a box? hs = BRepPrimAPI.BRepPrimAPI_MakeHalfSpace(face,origin); hs.Build(); halfspace = hs.Solid(); #bounds = getBoundingBox(shapeToSlice); #c1 = gp.gp_Pnt( bounds[0], bounds[1],bounds[2] ); #lower left corner #c2 = gp.gp_Pnt( bounds[3], bounds[4], zLevel ); #upper right corner #bs = BRepPrimAPI.BRepPrimAPI_MakeBox(c1,c2); #bs.Build(); #halfspace = bs.Solid(); #make the cut bc = BRepAlgoAPI.BRepAlgoAPI_Cut(shapeToSlice,halfspace); bc.Build(); cutShape = bc.Shape(); #search the shape for faces at the specified zlevel texp = TopExp.TopExp_Explorer(); texp.Init(cutShape,TopAbs.TopAbs_FACE); foundFace = False; while ( texp.More() ): face = ts.Face(texp.Current()); #logging.debug("Checking Face for zLevel " + str(zLevel)); if isAtZLevel(zLevel,face): foundFace = True; logging.debug( "Face is at zlevel" + str(zLevel) ); s.addFace(face); texp.Next(); #free memory hs.Delete(); halfspace.Nullify(); cutShape.Nullify(); bc.Delete(); texp.Destroy(); if not foundFace: logging.warn("No faces found after slicing at zLevel " + str(zLevel) + " !. Skipping This layer completely"); return None; else: return s;
_______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users