Blackify
This commit is contained in:
@ -3440,7 +3440,7 @@ class Workplane(CQ):
|
|||||||
r = solidRef.intersect(plane)
|
r = solidRef.intersect(plane)
|
||||||
|
|
||||||
return self.newObject([r])
|
return self.newObject([r])
|
||||||
|
|
||||||
def toPending(self):
|
def toPending(self):
|
||||||
"""
|
"""
|
||||||
Adds wires/edges to pendingWires/pendingEdges.
|
Adds wires/edges to pendingWires/pendingEdges.
|
||||||
|
|||||||
@ -66,81 +66,90 @@ def importStep(fileName):
|
|||||||
|
|
||||||
|
|
||||||
def _dxf_line(el):
|
def _dxf_line(el):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return (Edge.makeLine(Vector(el.dxf.start.xyz),
|
return (Edge.makeLine(Vector(el.dxf.start.xyz), Vector(el.dxf.end.xyz)),)
|
||||||
Vector(el.dxf.end.xyz)),)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
|
|
||||||
def _dxf_circle(el):
|
def _dxf_circle(el):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return (Edge.makeCircle(el.dxf.radius,
|
return (Edge.makeCircle(el.dxf.radius, Vector(el.dxf.center.xyz)),)
|
||||||
Vector(el.dxf.center.xyz)),)
|
|
||||||
except Exception:
|
except Exception:
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
|
|
||||||
def _dxf_arc(el):
|
def _dxf_arc(el):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return (Edge.makeCircle(el.dxf.radius,
|
return (
|
||||||
Vector(el.dxf.center.xyz),
|
Edge.makeCircle(
|
||||||
angle1=el.dxf.start_angle,
|
el.dxf.radius,
|
||||||
angle2=el.dxf.end_angle),)
|
Vector(el.dxf.center.xyz),
|
||||||
|
angle1=el.dxf.start_angle,
|
||||||
|
angle2=el.dxf.end_angle,
|
||||||
|
),
|
||||||
|
)
|
||||||
except Exception:
|
except Exception:
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
|
|
||||||
def _dxf_polyline(el):
|
def _dxf_polyline(el):
|
||||||
|
|
||||||
rv = (DXF_CONVERTERS[e.dxf.dxftype](e) for e in el.virtual_entities())
|
rv = (DXF_CONVERTERS[e.dxf.dxftype](e) for e in el.virtual_entities())
|
||||||
|
|
||||||
return (e[0] for e in rv if e)
|
return (e[0] for e in rv if e)
|
||||||
|
|
||||||
|
|
||||||
DXF_CONVERTERS = {
|
DXF_CONVERTERS = {
|
||||||
'LINE' : _dxf_line,
|
"LINE": _dxf_line,
|
||||||
'CIRCLE' : _dxf_circle,
|
"CIRCLE": _dxf_circle,
|
||||||
'ARC' : _dxf_arc,
|
"ARC": _dxf_arc,
|
||||||
'POLYLINE' : _dxf_polyline,
|
"POLYLINE": _dxf_polyline,
|
||||||
'LWPOLYLINE' : _dxf_polyline
|
"LWPOLYLINE": _dxf_polyline,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def _dxf_convert(elements, tol):
|
def _dxf_convert(elements, tol):
|
||||||
|
|
||||||
rv = []
|
rv = []
|
||||||
edges = []
|
edges = []
|
||||||
|
|
||||||
for el in elements:
|
for el in elements:
|
||||||
conv = DXF_CONVERTERS.get(el.dxf.dxftype)
|
conv = DXF_CONVERTERS.get(el.dxf.dxftype)
|
||||||
if conv:
|
if conv:
|
||||||
edges.extend(conv(el))
|
edges.extend(conv(el))
|
||||||
|
|
||||||
if edges:
|
if edges:
|
||||||
comp = Compound.makeCompound(edges)
|
comp = Compound.makeCompound(edges)
|
||||||
shape_out = OCP.TopoDS.TopoDS_Shape()
|
shape_out = OCP.TopoDS.TopoDS_Shape()
|
||||||
BOPAlgo_Tools.EdgesToWires_s(comp.wrapped, shape_out)
|
BOPAlgo_Tools.EdgesToWires_s(comp.wrapped, shape_out)
|
||||||
rv = Shape.cast(shape_out)
|
rv = Shape.cast(shape_out)
|
||||||
|
|
||||||
edges_in = TopTools_HSequenceOfShape()
|
edges_in = TopTools_HSequenceOfShape()
|
||||||
wires_out = TopTools_HSequenceOfShape()
|
wires_out = TopTools_HSequenceOfShape()
|
||||||
|
|
||||||
for e in edges: edges_in.Append(e.wrapped)
|
for e in edges:
|
||||||
ShapeAnalysis_FreeBounds.ConnectEdgesToWires_s(edges_in,tol,False,wires_out)
|
edges_in.Append(e.wrapped)
|
||||||
|
ShapeAnalysis_FreeBounds.ConnectEdgesToWires_s(edges_in, tol, False, wires_out)
|
||||||
|
|
||||||
rv = [Shape.cast(el) for el in wires_out]
|
rv = [Shape.cast(el) for el in wires_out]
|
||||||
|
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
def importDXF(filename, tol=1e-6):
|
|
||||||
|
def importDXF(filename, tol=1e-6):
|
||||||
|
|
||||||
dxf = ezdxf.readfile(filename)
|
dxf = ezdxf.readfile(filename)
|
||||||
faces = []
|
faces = []
|
||||||
|
|
||||||
for name,layer in dxf.modelspace().groupby(dxfattrib='layer').items():
|
for name, layer in dxf.modelspace().groupby(dxfattrib="layer").items():
|
||||||
res = _dxf_convert(layer, tol)
|
res = _dxf_convert(layer, tol)
|
||||||
if res:
|
if res:
|
||||||
wire_sets = sortWiresByBuildOrder(res)
|
wire_sets = sortWiresByBuildOrder(res)
|
||||||
for wire_set in wire_sets:
|
for wire_set in wire_sets:
|
||||||
faces.append(Face.makeFromWires(wire_set[0], wire_set[1:]))
|
faces.append(Face.makeFromWires(wire_set[0], wire_set[1:]))
|
||||||
|
|
||||||
return cq.Workplane('XY').newObject(faces)
|
return cq.Workplane("XY").newObject(faces)
|
||||||
|
|||||||
@ -15,6 +15,7 @@ OUTDIR = tempfile.gettempdir()
|
|||||||
# test data directory
|
# test data directory
|
||||||
testdataDir = os.path.join(os.path.dirname(__file__), "testdata")
|
testdataDir = os.path.join(os.path.dirname(__file__), "testdata")
|
||||||
|
|
||||||
|
|
||||||
class TestImporters(BaseTest):
|
class TestImporters(BaseTest):
|
||||||
def importBox(self, importType, fileName):
|
def importBox(self, importType, fileName):
|
||||||
"""
|
"""
|
||||||
@ -76,28 +77,29 @@ class TestImporters(BaseTest):
|
|||||||
filename = os.path.join(testdataDir, "red_cube_blue_cylinder.step")
|
filename = os.path.join(testdataDir, "red_cube_blue_cylinder.step")
|
||||||
objs = importers.importShape(importers.ImportTypes.STEP, filename)
|
objs = importers.importShape(importers.ImportTypes.STEP, filename)
|
||||||
self.assertEqual(2, len(objs.all()))
|
self.assertEqual(2, len(objs.all()))
|
||||||
|
|
||||||
def testImportDXF(self):
|
def testImportDXF(self):
|
||||||
"""
|
"""
|
||||||
Test DXF import with various tolerances.
|
Test DXF import with various tolerances.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
filename = os.path.join(testdataDir, "gear.dxf")
|
filename = os.path.join(testdataDir, "gear.dxf")
|
||||||
|
|
||||||
obj = importers.importDXF(filename)
|
obj = importers.importDXF(filename)
|
||||||
self.assertFalse( obj.val().isValid() )
|
self.assertFalse(obj.val().isValid())
|
||||||
|
|
||||||
obj = importers.importDXF(filename, tol=1e-3)
|
obj = importers.importDXF(filename, tol=1e-3)
|
||||||
self.assertTrue( obj.val().isValid() )
|
self.assertTrue(obj.val().isValid())
|
||||||
self.assertEqual( obj.faces().size(), 1)
|
self.assertEqual(obj.faces().size(), 1)
|
||||||
self.assertEqual( obj.wires().size(), 2)
|
self.assertEqual(obj.wires().size(), 2)
|
||||||
|
|
||||||
obj = obj.wires().toPending().extrude(1)
|
obj = obj.wires().toPending().extrude(1)
|
||||||
self.assertTrue( obj.val().isValid() )
|
self.assertTrue(obj.val().isValid())
|
||||||
self.assertEqual( obj.solids().size(), 1)
|
self.assertEqual(obj.solids().size(), 1)
|
||||||
|
|
||||||
obj = importers.importShape(importers.ImportTypes.DXF, filename, tol=1e-3)
|
obj = importers.importShape(importers.ImportTypes.DXF, filename, tol=1e-3)
|
||||||
assert( obj.val().isValid() == True )
|
assert obj.val().isValid() == True
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import unittest
|
import unittest
|
||||||
|
|||||||
Reference in New Issue
Block a user