diff --git a/cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake b/cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake
index a684a3d3e4..63082eab7d 100644
--- a/cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake
+++ b/cMake/FreeCAD_Helpers/CheckInterModuleDependencies.cmake
@@ -9,7 +9,7 @@ macro(CheckInterModuleDependencies)
foreach(prerequisite IN LISTS ARGN)
if(NOT ${prerequisite})
message(SEND_ERROR "${dependent} requires ${prerequisite} to be ON, but it"
- " is \"${${prerequisite}}\"")
+ " is \"${${prerequisite}}\"")
set(${dependent} OFF PARENT_SCOPE)
break()
endif(NOT ${prerequisite})
@@ -17,11 +17,11 @@ macro(CheckInterModuleDependencies)
endif(${dependent})
endfunction(REQUIRES_MODS)
- REQUIRES_MODS(BUILD_BIM BUILD_PART BUILD_MESH BUILD_DRAFT)
- REQUIRES_MODS(BUILD_DRAFT BUILD_SKETCHER)
+ REQUIRES_MODS(BUILD_ASSEMBLY BUILD_PART BUILD_PART_DESIGN BUILD_SPREADSHEET)
+ REQUIRES_MODS(BUILD_BIM BUILD_PART BUILD_MESH BUILD_MESH_PART BUILD_DRAFT)
+ REQUIRES_MODS(BUILD_DRAFT BUILD_SKETCHER BUILD_TECHDRAW BUILD_BIM)
REQUIRES_MODS(BUILD_DRAWING BUILD_PART BUILD_SPREADSHEET)
REQUIRES_MODS(BUILD_FEM BUILD_PART)
- REQUIRES_MODS(BUILD_IDF BUILD_PART)
REQUIRES_MODS(BUILD_IMPORT BUILD_PART)
REQUIRES_MODS(BUILD_INSPECTION BUILD_MESH BUILD_POINTS BUILD_PART)
REQUIRES_MODS(BUILD_JTREADER BUILD_MESH)
@@ -29,6 +29,7 @@ macro(CheckInterModuleDependencies)
REQUIRES_MODS(BUILD_FLAT_MESH BUILD_MESH_PART)
REQUIRES_MODS(BUILD_OPENSCAD BUILD_MESH_PART BUILD_DRAFT)
REQUIRES_MODS(BUILD_MATERIAL_EXTERNAL BUILD_MATERIAL)
+ REQUIRES_MODS(BUILD_MEASURE BUILD_PART)
REQUIRES_MODS(BUILD_PART BUILD_MATERIAL)
REQUIRES_MODS(BUILD_PART_DESIGN BUILD_SKETCHER)
# REQUIRES_MODS(BUILD_CAM BUILD_PART BUILD_MESH BUILD_ROBOT)
@@ -38,5 +39,6 @@ macro(CheckInterModuleDependencies)
REQUIRES_MODS(BUILD_SANDBOX BUILD_PART BUILD_MESH)
REQUIRES_MODS(BUILD_SKETCHER BUILD_PART)
REQUIRES_MODS(BUILD_SPREADSHEET BUILD_DRAFT)
+ REQUIRES_MODS(BUILD_SURFACE BUILD_PART)
REQUIRES_MODS(BUILD_TECHDRAW BUILD_PART BUILD_PART_DESIGN BUILD_SPREADSHEET BUILD_MEASURE BUILD_IMPORT)
endmacro(CheckInterModuleDependencies)
diff --git a/src/Mod/Material/materialtests/TestMaterialDocument.py b/src/Mod/Material/materialtests/TestMaterialDocument.py
index 4b2bb86ecf..6d48bf55b6 100644
--- a/src/Mod/Material/materialtests/TestMaterialDocument.py
+++ b/src/Mod/Material/materialtests/TestMaterialDocument.py
@@ -36,34 +36,36 @@ class DocumentTestCases(unittest.TestCase):
def testApplyDiffuseColorCheckShapeAppearance(self):
""" Test that applying a DiffuseColor with transparency results in a correct ShapeAppearance """
- dif_col_1 = (1.0, 1.0, 0.0, 1.0) # yellow 0% transparent
- dif_col_2 = (1.0, 0.0, 0.0, 0.5) # red 50% transparent
- dif_col = [dif_col_1] + [dif_col_2] + 4 * [dif_col_1]
+ if "BUILD_PART" in FreeCAD.__cmake__:
+ dif_col_1 = (1.0, 1.0, 0.0, 1.0) # yellow 0% transparent
+ dif_col_2 = (1.0, 0.0, 0.0, 0.5) # red 50% transparent
+ dif_col = [dif_col_1] + [dif_col_2] + 4 * [dif_col_1]
- obj = self.doc.addObject("Part::Box")
- vobj = obj.ViewObject
- vobj.DiffuseColor = dif_col
+ obj = self.doc.addObject("Part::Box")
+ vobj = obj.ViewObject
+ vobj.DiffuseColor = dif_col
- self.assertEqual(
- [m.DiffuseColor[:3] + (1.0 - m.Transparency, ) for m in vobj.ShapeAppearance],
- vobj.DiffuseColor
- )
+ self.assertEqual(
+ [m.DiffuseColor[:3] + (1.0 - m.Transparency, ) for m in vobj.ShapeAppearance],
+ vobj.DiffuseColor
+ )
def testApplyShapeAppearanceCheckDiffuseColor(self):
""" Test that applying a ShapeAppearance with transparency results in a correct DiffuseColor """
- sapp_1 = FreeCAD.Material()
- sapp_1.DiffuseColor = (0.0, 1.0, 1.0, 0.0) # cyan
- sapp_1.Transparency = 0.0 # 0% transparent
- sapp_2 = FreeCAD.Material()
- sapp_2.DiffuseColor = (0.0, 1.0, 0.0, 0.0) # green
- sapp_2.Transparency = 0.3 # 30% transparent
- sapp = [sapp_1] + [sapp_2] + 4 * [sapp_1]
+ if "BUILD_PART" in FreeCAD.__cmake__:
+ sapp_1 = FreeCAD.Material()
+ sapp_1.DiffuseColor = (0.0, 1.0, 1.0, 0.0) # cyan
+ sapp_1.Transparency = 0.0 # 0% transparent
+ sapp_2 = FreeCAD.Material()
+ sapp_2.DiffuseColor = (0.0, 1.0, 0.0, 0.0) # green
+ sapp_2.Transparency = 0.3 # 30% transparent
+ sapp = [sapp_1] + [sapp_2] + 4 * [sapp_1]
- obj = self.doc.addObject("Part::Box")
- vobj = obj.ViewObject
- vobj.ShapeAppearance = sapp
+ obj = self.doc.addObject("Part::Box")
+ vobj = obj.ViewObject
+ vobj.ShapeAppearance = sapp
- self.assertEqual(
- [m.DiffuseColor[:3] + (1.0 - m.Transparency, ) for m in vobj.ShapeAppearance],
- vobj.DiffuseColor
- )
+ self.assertEqual(
+ [m.DiffuseColor[:3] + (1.0 - m.Transparency, ) for m in vobj.ShapeAppearance],
+ vobj.DiffuseColor
+ )
diff --git a/src/Mod/Part/TestPartApp.py b/src/Mod/Part/TestPartApp.py
index 23cd794551..76d60fb3bf 100644
--- a/src/Mod/Part/TestPartApp.py
+++ b/src/Mod/Part/TestPartApp.py
@@ -124,47 +124,49 @@ class PartTestBSplineCurve(unittest.TestCase):
self.spline.setPole(1, App.Vector([1, 0, 0])) # first parameter 0 gives occ error
def testIssue2671(self):
- self.Doc = App.newDocument("Issue2671")
- Box = self.Doc.addObject("Part::Box","Box")
- Mirroring = self.Doc.addObject("Part::Mirroring", 'Mirroring')
- Spreadsheet = self.Doc.addObject('Spreadsheet::Sheet', 'Spreadsheet')
- Mirroring.Source = Box
- Mirroring.Base = (8, 5, 25)
- Mirroring.Normal = (0.5, 0.2, 0.9)
- Spreadsheet.set('A1', '=Mirroring.Base.x')
- Spreadsheet.set('B1', '=Mirroring.Base.y')
- Spreadsheet.set('C1', '=Mirroring.Base.z')
- Spreadsheet.set('A2', '=Mirroring.Normal.x')
- Spreadsheet.set('B2', '=Mirroring.Normal.y')
- Spreadsheet.set('C2', '=Mirroring.Normal.z')
- self.Doc.recompute()
- self.assertEqual(Spreadsheet.A1, Units.Quantity('8 mm'))
- self.assertEqual(Spreadsheet.B1, Units.Quantity('5 mm'))
- self.assertEqual(Spreadsheet.C1, Units.Quantity('25 mm'))
- self.assertEqual(Spreadsheet.A2, Units.Quantity('0.5 mm'))
- self.assertEqual(Spreadsheet.B2, Units.Quantity('0.2 mm'))
- self.assertEqual(Spreadsheet.C2, Units.Quantity('0.9 mm'))
- App.closeDocument("Issue2671")
+ if "BUILD_SPREADSHEET" in FreeCAD.__cmake__:
+ self.Doc = App.newDocument("Issue2671")
+ Box = self.Doc.addObject("Part::Box","Box")
+ Mirroring = self.Doc.addObject("Part::Mirroring", 'Mirroring')
+ Spreadsheet = self.Doc.addObject('Spreadsheet::Sheet', 'Spreadsheet')
+ Mirroring.Source = Box
+ Mirroring.Base = (8, 5, 25)
+ Mirroring.Normal = (0.5, 0.2, 0.9)
+ Spreadsheet.set('A1', '=Mirroring.Base.x')
+ Spreadsheet.set('B1', '=Mirroring.Base.y')
+ Spreadsheet.set('C1', '=Mirroring.Base.z')
+ Spreadsheet.set('A2', '=Mirroring.Normal.x')
+ Spreadsheet.set('B2', '=Mirroring.Normal.y')
+ Spreadsheet.set('C2', '=Mirroring.Normal.z')
+ self.Doc.recompute()
+ self.assertEqual(Spreadsheet.A1, Units.Quantity('8 mm'))
+ self.assertEqual(Spreadsheet.B1, Units.Quantity('5 mm'))
+ self.assertEqual(Spreadsheet.C1, Units.Quantity('25 mm'))
+ self.assertEqual(Spreadsheet.A2, Units.Quantity('0.5 mm'))
+ self.assertEqual(Spreadsheet.B2, Units.Quantity('0.2 mm'))
+ self.assertEqual(Spreadsheet.C2, Units.Quantity('0.9 mm'))
+ App.closeDocument("Issue2671")
def testIssue2876(self):
- self.Doc = App.newDocument("Issue2876")
- Cylinder = self.Doc.addObject("Part::Cylinder", "Cylinder")
- Cylinder.Radius = 5
- Pipe = self.Doc.addObject("Part::Thickness", "Pipe")
- Pipe.Faces = (Cylinder, ["Face2", "Face3"])
- Pipe.Mode = 1
- Pipe.Value = -1 # negative wall thickness
- Spreadsheet = self.Doc.addObject('Spreadsheet::Sheet', 'Spreadsheet')
- Spreadsheet.set('A1', 'Pipe OD')
- Spreadsheet.set('B1', 'Pipe WT')
- Spreadsheet.set('C1', 'Pipe ID')
- Spreadsheet.set('A2', '=2*Cylinder.Radius')
- Spreadsheet.set('B2', '=-Pipe.Value')
- Spreadsheet.set('C2', '=2*(Cylinder.Radius + Pipe.Value)')
- self.Doc.recompute()
- self.assertEqual(Spreadsheet.B2, Units.Quantity('1 mm'))
- self.assertEqual(Spreadsheet.C2, Units.Quantity('8 mm'))
- App.closeDocument("Issue2876")
+ if "BUILD_SPREADSHEET" in FreeCAD.__cmake__:
+ self.Doc = App.newDocument("Issue2876")
+ Cylinder = self.Doc.addObject("Part::Cylinder", "Cylinder")
+ Cylinder.Radius = 5
+ Pipe = self.Doc.addObject("Part::Thickness", "Pipe")
+ Pipe.Faces = (Cylinder, ["Face2", "Face3"])
+ Pipe.Mode = 1
+ Pipe.Value = -1 # negative wall thickness
+ Spreadsheet = self.Doc.addObject('Spreadsheet::Sheet', 'Spreadsheet')
+ Spreadsheet.set('A1', 'Pipe OD')
+ Spreadsheet.set('B1', 'Pipe WT')
+ Spreadsheet.set('C1', 'Pipe ID')
+ Spreadsheet.set('A2', '=2*Cylinder.Radius')
+ Spreadsheet.set('B2', '=-Pipe.Value')
+ Spreadsheet.set('C2', '=2*(Cylinder.Radius + Pipe.Value)')
+ self.Doc.recompute()
+ self.assertEqual(Spreadsheet.B2, Units.Quantity('1 mm'))
+ self.assertEqual(Spreadsheet.C2, Units.Quantity('8 mm'))
+ App.closeDocument("Issue2876")
def testSubElements(self):
box = Part.makeBox(1, 1, 1)
@@ -527,20 +529,21 @@ class PartTestRuledSurface(unittest.TestCase):
self.assertEqual(len(same32), 3)
def testRuledSurfaceFromOneObject(self):
- sketch = self.Doc.addObject('Sketcher::SketchObject', 'Sketch')
- sketch.Placement = FreeCAD.Placement(FreeCAD.Vector(0.000000, 0.000000, 0.000000), App.Rotation(0.707107, 0.000000, 0.000000, 0.707107))
- sketch.MapMode = "Deactivated"
+ if "BUILD_SKETCHER" in FreeCAD.__cmake__:
+ sketch = self.Doc.addObject('Sketcher::SketchObject', 'Sketch')
+ sketch.Placement = FreeCAD.Placement(FreeCAD.Vector(0.000000, 0.000000, 0.000000), App.Rotation(0.707107, 0.000000, 0.000000, 0.707107))
+ sketch.MapMode = "Deactivated"
- sketch.addGeometry(Part.LineSegment(App.Vector(-43.475811,34.364464,0),App.Vector(-65.860519,-20.078733,0)),False)
- sketch.addGeometry(Part.LineSegment(App.Vector(14.004498,27.390331,0),App.Vector(33.577049,-27.952749,0)),False)
+ sketch.addGeometry(Part.LineSegment(App.Vector(-43.475811,34.364464,0),App.Vector(-65.860519,-20.078733,0)),False)
+ sketch.addGeometry(Part.LineSegment(App.Vector(14.004498,27.390331,0),App.Vector(33.577049,-27.952749,0)),False)
- ruled = self.Doc.addObject('Part::RuledSurface', 'Ruled Surface')
- ruled.Curve1 = (sketch,['Edge1'])
- ruled.Curve2 = (sketch,['Edge2'])
- self.Doc.recompute()
+ ruled = self.Doc.addObject('Part::RuledSurface', 'Ruled Surface')
+ ruled.Curve1 = (sketch,['Edge1'])
+ ruled.Curve2 = (sketch,['Edge2'])
+ self.Doc.recompute()
- same = getCoincidentVertexes(sketch.Shape.Vertexes, ruled.Shape.Vertexes)
- self.assertEqual(len(same), 4)
+ same = getCoincidentVertexes(sketch.Shape.Vertexes, ruled.Shape.Vertexes)
+ self.assertEqual(len(same), 4)
def tearDown(self):
FreeCAD.closeDocument(self.Doc.Name)
diff --git a/src/Mod/Part/parttests/regression_tests.py b/src/Mod/Part/parttests/regression_tests.py
index ab56f1c694..178df5ba91 100644
--- a/src/Mod/Part/parttests/regression_tests.py
+++ b/src/Mod/Part/parttests/regression_tests.py
@@ -1,6 +1,8 @@
+import FreeCAD
from FreeCAD import Vector, Base, newDocument, closeDocument
import Part
-import Sketcher
+if "BUILD_SKETCHER" in FreeCAD.__cmake__:
+ import Sketcher
import unittest
@@ -34,67 +36,68 @@ class RegressionTests(unittest.TestCase):
The following test is a simplified version of the issue, but the outcome is the same
"""
- # Arrange
- ArcSketch = self.Doc.addObject("Sketcher::SketchObject", "ArcSketch")
- ArcSketch.Placement = Base.Placement(
- Base.Vector(0.000000, 0.000000, 0.000000),
- Base.Rotation(0.500000, 0.500000, 0.500000, 0.500000),
- )
- ArcSketch.MapMode = "Deactivated"
-
- geoList = []
- geoList.append(
- Part.ArcOfCircle(
- Part.Circle(
- Base.Vector(0.000000, 0.000000, 0.000000),
- Base.Vector(0.000000, 0.000000, 1.000000),
- 10.000000,
- ),
- 3.141593,
- 6.283185,
+ if "BUILD_SKETCHER" in FreeCAD.__cmake__:
+ # Arrange
+ ArcSketch = self.Doc.addObject("Sketcher::SketchObject", "ArcSketch")
+ ArcSketch.Placement = Base.Placement(
+ Base.Vector(0.000000, 0.000000, 0.000000),
+ Base.Rotation(0.500000, 0.500000, 0.500000, 0.500000),
)
- )
- ArcSketch.addGeometry(geoList, False)
- del geoList
+ ArcSketch.MapMode = "Deactivated"
- constraintList = []
- ArcSketch.addConstraint(Sketcher.Constraint("Radius", 0, 10.000000))
- constraintList.append(Sketcher.Constraint("Coincident", 0, 3, -1, 1))
- constraintList.append(Sketcher.Constraint("PointOnObject", 0, 2, -1))
- constraintList.append(Sketcher.Constraint("PointOnObject", 0, 1, -1))
- ArcSketch.addConstraint(constraintList)
- del constraintList
+ geoList = []
+ geoList.append(
+ Part.ArcOfCircle(
+ Part.Circle(
+ Base.Vector(0.000000, 0.000000, 0.000000),
+ Base.Vector(0.000000, 0.000000, 1.000000),
+ 10.000000,
+ ),
+ 3.141593,
+ 6.283185,
+ )
+ )
+ ArcSketch.addGeometry(geoList, False)
+ del geoList
- self.Doc.recompute()
+ constraintList = []
+ ArcSketch.addConstraint(Sketcher.Constraint("Radius", 0, 10.000000))
+ constraintList.append(Sketcher.Constraint("Coincident", 0, 3, -1, 1))
+ constraintList.append(Sketcher.Constraint("PointOnObject", 0, 2, -1))
+ constraintList.append(Sketcher.Constraint("PointOnObject", 0, 1, -1))
+ ArcSketch.addConstraint(constraintList)
+ del constraintList
- PointSketch = self.Doc.addObject("Sketcher::SketchObject", "PointSketch")
- PointSketch.Placement = Base.Placement(
- Base.Vector(-10.000000, 0.000000, 0.000000),
- Base.Rotation(0.500000, 0.500000, 0.500000, 0.500000),
- )
- PointSketch.MapMode = "Deactivated"
+ self.Doc.recompute()
- PointSketch.addGeometry(Part.Point(Base.Vector(0.000000, 0.000000, 0)))
+ PointSketch = self.Doc.addObject("Sketcher::SketchObject", "PointSketch")
+ PointSketch.Placement = Base.Placement(
+ Base.Vector(-10.000000, 0.000000, 0.000000),
+ Base.Rotation(0.500000, 0.500000, 0.500000, 0.500000),
+ )
+ PointSketch.MapMode = "Deactivated"
- PointSketch.addConstraint(Sketcher.Constraint("Coincident", 0, 1, -1, 1))
+ PointSketch.addGeometry(Part.Point(Base.Vector(0.000000, 0.000000, 0)))
- self.Doc.recompute()
+ PointSketch.addConstraint(Sketcher.Constraint("Coincident", 0, 1, -1, 1))
- Loft = self.Doc.addObject("Part::Loft", "Loft")
- Loft.Sections = [
- ArcSketch,
- PointSketch,
- ]
- Loft.Solid = False
- Loft.Ruled = False
- Loft.Closed = False
+ self.Doc.recompute()
- # Act
- self.Doc.recompute()
+ Loft = self.Doc.addObject("Part::Loft", "Loft")
+ Loft.Sections = [
+ ArcSketch,
+ PointSketch,
+ ]
+ Loft.Solid = False
+ Loft.Ruled = False
+ Loft.Closed = False
- # Assert
- self.assertTrue(Loft.isValid())
- self.KeepTestDoc = not Loft.isValid()
+ # Act
+ self.Doc.recompute()
+
+ # Assert
+ self.assertTrue(Loft.isValid())
+ self.KeepTestDoc = not Loft.isValid()
def test_OptimalBox(self):
box = Part.makeBox(1, 1, 1)
diff --git a/src/Mod/Sketcher/SketcherTests/TestSketchValidateCoincidents.py b/src/Mod/Sketcher/SketcherTests/TestSketchValidateCoincidents.py
index afada0404c..fa509ae537 100644
--- a/src/Mod/Sketcher/SketcherTests/TestSketchValidateCoincidents.py
+++ b/src/Mod/Sketcher/SketcherTests/TestSketchValidateCoincidents.py
@@ -131,81 +131,84 @@ class TestSketchValidateCoincidents(unittest.TestCase):
def testExternalGeoDeletion(self):
"""Make sure that we don't remove External Geometry references to deleted geometry.
See https://github.com/FreeCAD/FreeCAD/issues/16361"""
- doc = App.ActiveDocument
- doc.addObject("PartDesign::Body", "Body")
- doc.Body.Label = "Body"
- doc.recompute()
- doc.Body.newObject("Sketcher::SketchObject", "Sketch")
- doc.Sketch.AttachmentSupport = (doc.XY_Plane, [""])
- doc.Sketch.MapMode = "FlatFace"
- doc.recompute()
- geoList = []
- geoList.append(
- Part.LineSegment(
- App.Vector(7.548310, 5.193216, 0.000000), App.Vector(31.461353, 5.193216, 0.000000)
+ if "BUILD_PARTDESIGN" in FreeCAD.__cmake__:
+ doc = App.ActiveDocument
+ doc.addObject("PartDesign::Body", "Body")
+ doc.Body.Label = "Body"
+ doc.recompute()
+ doc.Body.newObject("Sketcher::SketchObject", "Sketch")
+ doc.Sketch.AttachmentSupport = (doc.XY_Plane, [""])
+ doc.Sketch.MapMode = "FlatFace"
+ doc.recompute()
+ geoList = []
+ geoList.append(
+ Part.LineSegment(
+ App.Vector(7.548310, 5.193216, 0.000000),
+ App.Vector(31.461353, 5.193216, 0.000000),
+ )
)
- )
- geoList.append(
- Part.LineSegment(
- App.Vector(31.461353, 5.193216, 0.000000),
- App.Vector(31.461353, 20.652151, 0.000000),
+ geoList.append(
+ Part.LineSegment(
+ App.Vector(31.461353, 5.193216, 0.000000),
+ App.Vector(31.461353, 20.652151, 0.000000),
+ )
)
- )
- geoList.append(
- Part.LineSegment(
- App.Vector(31.461353, 20.652151, 0.000000),
- App.Vector(7.548310, 20.652151, 0.000000),
+ geoList.append(
+ Part.LineSegment(
+ App.Vector(31.461353, 20.652151, 0.000000),
+ App.Vector(7.548310, 20.652151, 0.000000),
+ )
)
- )
- geoList.append(
- Part.LineSegment(
- App.Vector(7.548310, 20.652151, 0.000000), App.Vector(7.548310, 5.193216, 0.000000)
+ geoList.append(
+ Part.LineSegment(
+ App.Vector(7.548310, 20.652151, 0.000000),
+ App.Vector(7.548310, 5.193216, 0.000000),
+ )
)
- )
- doc.Sketch.addGeometry(geoList, False)
- del geoList
- constraintList = []
- constraintList.append(Sketcher.Constraint("Coincident", 0, 2, 1, 1))
- constraintList.append(Sketcher.Constraint("Coincident", 1, 2, 2, 1))
- constraintList.append(Sketcher.Constraint("Coincident", 2, 2, 3, 1))
- constraintList.append(Sketcher.Constraint("Coincident", 3, 2, 0, 1))
- constraintList.append(Sketcher.Constraint("Horizontal", 0))
- constraintList.append(Sketcher.Constraint("Horizontal", 2))
- constraintList.append(Sketcher.Constraint("Vertical", 1))
- constraintList.append(Sketcher.Constraint("Vertical", 3))
- doc.Sketch.addConstraint(constraintList)
- del constraintList
- constraintList = []
- doc.recompute()
- doc.Body.newObject("Sketcher::SketchObject", "Sketch001")
- doc.Sketch001.AttachmentSupport = (doc.XY_Plane, [""])
- doc.Sketch001.MapMode = "FlatFace"
- doc.recompute()
- doc.Sketch001.addExternal("Sketch", "Edge3")
- geoList = []
- geoList.append(
- Part.LineSegment(
- App.Vector(33.192780, 22.530144, 0.000000),
- App.Vector(38.493977, 32.289181, 0.000000),
+ doc.Sketch.addGeometry(geoList, False)
+ del geoList
+ constraintList = []
+ constraintList.append(Sketcher.Constraint("Coincident", 0, 2, 1, 1))
+ constraintList.append(Sketcher.Constraint("Coincident", 1, 2, 2, 1))
+ constraintList.append(Sketcher.Constraint("Coincident", 2, 2, 3, 1))
+ constraintList.append(Sketcher.Constraint("Coincident", 3, 2, 0, 1))
+ constraintList.append(Sketcher.Constraint("Horizontal", 0))
+ constraintList.append(Sketcher.Constraint("Horizontal", 2))
+ constraintList.append(Sketcher.Constraint("Vertical", 1))
+ constraintList.append(Sketcher.Constraint("Vertical", 3))
+ doc.Sketch.addConstraint(constraintList)
+ del constraintList
+ constraintList = []
+ doc.recompute()
+ doc.Body.newObject("Sketcher::SketchObject", "Sketch001")
+ doc.Sketch001.AttachmentSupport = (doc.XY_Plane, [""])
+ doc.Sketch001.MapMode = "FlatFace"
+ doc.recompute()
+ doc.Sketch001.addExternal("Sketch", "Edge3")
+ geoList = []
+ geoList.append(
+ Part.LineSegment(
+ App.Vector(33.192780, 22.530144, 0.000000),
+ App.Vector(38.493977, 32.289181, 0.000000),
+ )
)
- )
- doc.Sketch001.addGeometry(geoList, False)
- del geoList
- constraintList = []
- doc.Sketch001.addConstraint(Sketcher.Constraint("Coincident", 0, 1, -3, 1))
- doc.recompute()
- doc.Sketch.delGeometries([1])
- doc.Sketch.delGeometries([1])
- doc.recompute()
- doc.Sketch001.addConstraint(Sketcher.Constraint("Coincident", 0, 1, -3, 1))
- doc.recompute()
- # Assert
- self.assertEqual(len(doc.Sketch001.Constraints), 2) # Still have the constraints
- self.assertEqual(len(doc.Sketch001.ExternalGeometry), 0)
- self.assertEqual(len(doc.Sketch001.Geometry), 1)
- self.assertEqual(
- len(doc.Sketch001.ExternalGeo), 3
- ) # Two axis, plus one the reference to deleted geometry
+ doc.Sketch001.addGeometry(geoList, False)
+ del geoList
+ constraintList = []
+ doc.Sketch001.addConstraint(Sketcher.Constraint("Coincident", 0, 1, -3, 1))
+ doc.recompute()
+ doc.Sketch.delGeometries([1])
+ doc.Sketch.delGeometries([1])
+ doc.recompute()
+ doc.Sketch001.addConstraint(Sketcher.Constraint("Coincident", 0, 1, -3, 1))
+ doc.recompute()
+ # Assert
+ self.assertEqual(len(doc.Sketch001.Constraints), 2) # Still have the constraints
+ self.assertEqual(len(doc.Sketch001.ExternalGeometry), 0)
+ self.assertEqual(len(doc.Sketch001.Geometry), 1)
+ self.assertEqual(
+ len(doc.Sketch001.ExternalGeo), 3
+ ) # Two axis, plus one the reference to deleted geometry
def tearDown(self):
# closing doc
diff --git a/src/Mod/Sketcher/SketcherTests/TestSketcherSolver.py b/src/Mod/Sketcher/SketcherTests/TestSketcherSolver.py
index cdb8d6b1c1..89267cb5ea 100644
--- a/src/Mod/Sketcher/SketcherTests/TestSketcherSolver.py
+++ b/src/Mod/Sketcher/SketcherTests/TestSketcherSolver.py
@@ -481,218 +481,222 @@ class TestSketcherSolver(unittest.TestCase):
)
def testRemovedExternalGeometryReference(self):
- body = self.Doc.addObject("PartDesign::Body", "Body")
- sketch = body.newObject("Sketcher::SketchObject", "Sketch")
- CreateRectangleSketch(sketch, (0, 0), (30, 30))
- pad = body.newObject("PartDesign::Pad", "Pad")
- pad.Profile = sketch
- sketch1 = body.newObject("Sketcher::SketchObject", "Sketch1")
- CreateCircleSketch(sketch1, (15, 15), 0.25)
- self.Doc.recompute()
- self.assertEqual(len(pad.Shape.Edges), 12)
+ if "BUILD_PARTDESIGN" in FreeCAD.__cmake__:
+ body = self.Doc.addObject("PartDesign::Body", "Body")
+ sketch = body.newObject("Sketcher::SketchObject", "Sketch")
+ CreateRectangleSketch(sketch, (0, 0), (30, 30))
+ pad = body.newObject("PartDesign::Pad", "Pad")
+ pad.Profile = sketch
+ sketch1 = body.newObject("Sketcher::SketchObject", "Sketch1")
+ CreateCircleSketch(sketch1, (15, 15), 0.25)
+ self.Doc.recompute()
+ self.assertEqual(len(pad.Shape.Edges), 12)
- hole = self.Doc.addObject("PartDesign::Hole", "Hole")
- hole.Refine = True
- hole.Reversed = True
- body.addObject(hole)
- hole.Profile = sketch1
- hole.DrillPointAngle = 118.000000
- hole.Diameter = 6.000000
- hole.TaperedAngle = 90.000000
- hole.Tapered = 0
- hole.Depth = 8.000000
- hole.Threaded = 1
- hole.ModelThread = 0
- hole.ThreadDepthType = 0
- hole.ThreadType = 1
- hole.ThreadSize = 16
- hole.ThreadClass = 0
- hole.ThreadDirection = 0
- hole.HoleCutType = 0
- hole.DepthType = 0
- hole.DrillPoint = 1
- hole.DrillForDepth = 0
- self.Doc.recompute()
- # 15 edges if it's passthrough-flat 17 if DrillPoint = 1
- self.assertEqual(len(hole.Shape.Edges), 17)
+ hole = self.Doc.addObject("PartDesign::Hole", "Hole")
+ hole.Refine = True
+ hole.Reversed = True
+ body.addObject(hole)
+ hole.Profile = sketch1
+ hole.DrillPointAngle = 118.000000
+ hole.Diameter = 6.000000
+ hole.TaperedAngle = 90.000000
+ hole.Tapered = 0
+ hole.Depth = 8.000000
+ hole.Threaded = 1
+ hole.ModelThread = 0
+ hole.ThreadDepthType = 0
+ hole.ThreadType = 1
+ hole.ThreadSize = 16
+ hole.ThreadClass = 0
+ hole.ThreadDirection = 0
+ hole.HoleCutType = 0
+ hole.DepthType = 0
+ hole.DrillPoint = 1
+ hole.DrillForDepth = 0
+ self.Doc.recompute()
+ # 15 edges if it's passthrough-flat 17 if DrillPoint = 1
+ self.assertEqual(len(hole.Shape.Edges), 17)
- hole.ModelThread = 1
- sketch2 = body.newObject("Sketcher::SketchObject", "Sketch2")
- CreateRectangleSketch(sketch2, (0, 0), (3, 3))
- self.Doc.recompute()
- self.assertGreater(len(hole.Shape.Edges), 17)
- # 77 edges for basic profile
- self.assertEqual(len(hole.Shape.Edges), 77)
+ hole.ModelThread = 1
+ sketch2 = body.newObject("Sketcher::SketchObject", "Sketch2")
+ CreateRectangleSketch(sketch2, (0, 0), (3, 3))
+ self.Doc.recompute()
+ self.assertGreater(len(hole.Shape.Edges), 17)
+ # 77 edges for basic profile
+ self.assertEqual(len(hole.Shape.Edges), 77)
- # Edges in the thread should disappear when we stop modeling thread
- sketch2.addExternal("Hole", "Edge29")
- hole.ModelThread = 0
- hole.Refine = 1
- self.Doc.recompute()
- self.assertEqual(len(hole.Shape.Edges), 17)
- self.assertEqual(len(sketch2.ExternalGeometry), 0)
+ # Edges in the thread should disappear when we stop modeling thread
+ sketch2.addExternal("Hole", "Edge29")
+ hole.ModelThread = 0
+ hole.Refine = 1
+ self.Doc.recompute()
+ self.assertEqual(len(hole.Shape.Edges), 17)
+ self.assertEqual(len(sketch2.ExternalGeometry), 0)
def testSaveLoadWithExternalGeometryReference(self):
- # Arrange
- body = self.Doc.addObject("PartDesign::Body", "Body")
- sketch = self.Doc.addObject("Sketcher::SketchObject", "Sketch")
- CreateRectangleSketch(sketch, (0, 0), (30, 30))
- pad = self.Doc.addObject("PartDesign::Pad", "Pad")
- pad.Profile = sketch
- sketch1 = self.Doc.addObject("Sketcher::SketchObject", "Sketch1")
- body.addObject(sketch)
- body.addObject(pad)
- body.addObject(sketch1)
- self.Doc.recompute()
- sketch1.addExternal("Pad", "Edge12")
- self.Doc.recompute()
+ if "BUILD_PARTDESIGN" in FreeCAD.__cmake__:
+ # Arrange
+ body = self.Doc.addObject("PartDesign::Body", "Body")
+ sketch = self.Doc.addObject("Sketcher::SketchObject", "Sketch")
+ CreateRectangleSketch(sketch, (0, 0), (30, 30))
+ pad = self.Doc.addObject("PartDesign::Pad", "Pad")
+ pad.Profile = sketch
+ sketch1 = self.Doc.addObject("Sketcher::SketchObject", "Sketch1")
+ body.addObject(sketch)
+ body.addObject(pad)
+ body.addObject(sketch1)
+ self.Doc.recompute()
+ sketch1.addExternal("Pad", "Edge12")
+ self.Doc.recompute()
- # Act: Try changing sketch before the save
- sketch = self.Doc.getObject("Sketch")
- g1 = sketch.Constraints[11].First
- d1 = sketch.Constraints[11].Value
- sketch.delConstraint(11)
- sketch.addConstraint(Sketcher.Constraint("Distance", g1, d1 - 1.0))
- self.Doc.recompute()
+ # Act: Try changing sketch before the save
+ sketch = self.Doc.getObject("Sketch")
+ g1 = sketch.Constraints[11].First
+ d1 = sketch.Constraints[11].Value
+ sketch.delConstraint(11)
+ sketch.addConstraint(Sketcher.Constraint("Distance", g1, d1 - 1.0))
+ self.Doc.recompute()
- # Act: Save and reload the file
- filename = self.Doc.Name + ".FCStd"
- self.Doc.saveAs(filename)
- FreeCAD.closeDocument(self.Doc.Name)
- self.Doc = FreeCAD.openDocument(filename)
- pad = self.Doc.getObject("Pad")
- sketch1 = self.Doc.getObject("Sketch1")
- self.Doc.recompute()
+ # Act: Save and reload the file
+ filename = self.Doc.Name + ".FCStd"
+ self.Doc.saveAs(filename)
+ FreeCAD.closeDocument(self.Doc.Name)
+ self.Doc = FreeCAD.openDocument(filename)
+ pad = self.Doc.getObject("Pad")
+ sketch1 = self.Doc.getObject("Sketch1")
+ self.Doc.recompute()
- # Act: change sketch after restore ( trigger missing references if there is a bug )
- sketch = self.Doc.getObject("Sketch")
- g1 = sketch.Constraints[11].First
- d1 = sketch.Constraints[11].Value
- sketch.delConstraint(11)
- sketch.addConstraint(Sketcher.Constraint("Distance", g1, d1 - 1.0))
- self.Doc.recompute()
+ # Act: change sketch after restore ( trigger missing references if there is a bug )
+ sketch = self.Doc.getObject("Sketch")
+ g1 = sketch.Constraints[11].First
+ d1 = sketch.Constraints[11].Value
+ sketch.delConstraint(11)
+ sketch.addConstraint(Sketcher.Constraint("Distance", g1, d1 - 1.0))
+ self.Doc.recompute()
- # Assert
- self.assertEqual(pad.Shape.ElementMapSize, 30)
- self.assertIn("Edge12", pad.Shape.ElementReverseMap)
- self.assertIn((pad, ("Edge12",)), sketch1.ExternalGeometry) # Not "?Edge12"
+ # Assert
+ self.assertEqual(pad.Shape.ElementMapSize, 30)
+ self.assertIn("Edge12", pad.Shape.ElementReverseMap)
+ self.assertIn((pad, ("Edge12",)), sketch1.ExternalGeometry) # Not "?Edge12"
def testTNPExternalGeometryStored(self):
# Arrange
- import xml.etree.ElementTree as ET
+ if "BUILD_PARTDESIGN" in FreeCAD.__cmake__:
+ import xml.etree.ElementTree as ET
- sketch = self.Doc.addObject("Sketcher::SketchObject", "Sketch")
- CreateRectangleSketch(sketch, (0, 0), (30, 30))
- sketch1 = self.Doc.addObject("Sketcher::SketchObject", "Sketch1")
- pad = self.Doc.addObject("PartDesign::Pad", "Pad")
- pad.Profile = sketch
- self.Doc.recompute()
- sketch1.addExternal("Pad", "Edge12")
- self.Doc.recompute()
- # Act
- root = ET.fromstring("" + sketch1.Content + "")
- # Can't use != in an xpath because it wasn't added until python 3.10.
- # "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref!='']"
- extRefs = root.findall(
- "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref='']"
- )
- extRefsAll = root.findall(
- "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref]"
- )
- # Assert
- self.assertEqual(len(extRefs), 2)
- self.assertEqual(len(extRefsAll), 3)
- self.assertEqual(root.tag, "all")
- # Act
- filename = self.Doc.Name + ".FCStd"
- self.Doc.saveAs(filename)
- FreeCAD.closeDocument(self.Doc.Name)
- self.Doc = FreeCAD.openDocument(filename)
- # Assert
- root = ET.fromstring("" + self.Doc.getObject("Sketch1").Content + "")
- extRefs = root.findall(
- "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref='']"
- )
- extRefsAll = root.findall(
- "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref]"
- )
- self.assertEqual(len(extRefs), 2)
- self.assertEqual(len(extRefsAll), 3)
- self.assertEqual(root.tag, "all")
- # Act to change the constraint
- sketch = self.Doc.getObject("Sketch")
- g1 = sketch.Constraints[11].First
- d1 = sketch.Constraints[11].Value
- sketch.delConstraint(11)
- sketch.addConstraint(Sketcher.Constraint("Distance", g1, d1 - 1.0))
- self.Doc.recompute()
- # Assert
- root = ET.fromstring("" + self.Doc.getObject("Sketch1").Content + "")
- extRefs = root.findall(
- "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref='']"
- )
- extRefsAll = root.findall(
- "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref]"
- )
- self.assertEqual(len(extRefs), 2)
- self.assertEqual(len(extRefsAll), 3)
- self.assertEqual(root.tag, "all")
+ sketch = self.Doc.addObject("Sketcher::SketchObject", "Sketch")
+ CreateRectangleSketch(sketch, (0, 0), (30, 30))
+ sketch1 = self.Doc.addObject("Sketcher::SketchObject", "Sketch1")
+ pad = self.Doc.addObject("PartDesign::Pad", "Pad")
+ pad.Profile = sketch
+ self.Doc.recompute()
+ sketch1.addExternal("Pad", "Edge12")
+ self.Doc.recompute()
+ # Act
+ root = ET.fromstring("" + sketch1.Content + "")
+ # Can't use != in an xpath because it wasn't added until python 3.10.
+ # "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref!='']"
+ extRefs = root.findall(
+ "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref='']"
+ )
+ extRefsAll = root.findall(
+ "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref]"
+ )
+ # Assert
+ self.assertEqual(len(extRefs), 2)
+ self.assertEqual(len(extRefsAll), 3)
+ self.assertEqual(root.tag, "all")
+ # Act
+ filename = self.Doc.Name + ".FCStd"
+ self.Doc.saveAs(filename)
+ FreeCAD.closeDocument(self.Doc.Name)
+ self.Doc = FreeCAD.openDocument(filename)
+ # Assert
+ root = ET.fromstring("" + self.Doc.getObject("Sketch1").Content + "")
+ extRefs = root.findall(
+ "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref='']"
+ )
+ extRefsAll = root.findall(
+ "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref]"
+ )
+ self.assertEqual(len(extRefs), 2)
+ self.assertEqual(len(extRefsAll), 3)
+ self.assertEqual(root.tag, "all")
+ # Act to change the constraint
+ sketch = self.Doc.getObject("Sketch")
+ g1 = sketch.Constraints[11].First
+ d1 = sketch.Constraints[11].Value
+ sketch.delConstraint(11)
+ sketch.addConstraint(Sketcher.Constraint("Distance", g1, d1 - 1.0))
+ self.Doc.recompute()
+ # Assert
+ root = ET.fromstring("" + self.Doc.getObject("Sketch1").Content + "")
+ extRefs = root.findall(
+ "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref='']"
+ )
+ extRefsAll = root.findall(
+ "*/*[@name='ExternalGeo']//*/[@type='Sketcher::ExternalGeometryExtension']/[@Ref]"
+ )
+ self.assertEqual(len(extRefs), 2)
+ self.assertEqual(len(extRefsAll), 3)
+ self.assertEqual(root.tag, "all")
def testConstructionToggleTNP(self):
"""Bug 15484"""
- # Arrange
- import xml.etree.ElementTree as ET
+ if "BUILD_PARTDESIGN" in FreeCAD.__cmake__:
+ # Arrange
+ import xml.etree.ElementTree as ET
- body = self.Doc.addObject("PartDesign::Body", "Body")
- sketch = self.Doc.addObject("Sketcher::SketchObject", "Sketch")
- CreateRectangleSketch(sketch, (0, 0), (30, 30))
- # Add zigsag geo as construction lines
- i = sketch.GeometryCount
- sketch.addGeometry(
- Part.LineSegment(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(-10, 10, 0)), True
- )
- sketch.addGeometry(
- Part.LineSegment(FreeCAD.Vector(-10, 10, 0), FreeCAD.Vector(-5, 20, 0)), True
- )
- sketch.addGeometry(
- Part.LineSegment(FreeCAD.Vector(-5, 20, 0), FreeCAD.Vector(-10, 25, 0)), True
- )
- sketch.addGeometry(
- Part.LineSegment(FreeCAD.Vector(-10, 25, 0), FreeCAD.Vector(0, 30, 0)), True
- )
- sketch.addConstraint(Sketcher.Constraint("Coincident", i + 0, 2, i + 1, 1))
- sketch.addConstraint(Sketcher.Constraint("Coincident", i + 1, 2, i + 2, 1))
- sketch.addConstraint(Sketcher.Constraint("Coincident", i + 2, 2, i + 3, 1))
- sketch.addConstraint(Sketcher.Constraint("Coincident", i + 3, 2, 0, 1))
- sketch.addConstraint(Sketcher.Constraint("Coincident", i + 0, 1, 2, 2))
+ body = self.Doc.addObject("PartDesign::Body", "Body")
+ sketch = self.Doc.addObject("Sketcher::SketchObject", "Sketch")
+ CreateRectangleSketch(sketch, (0, 0), (30, 30))
+ # Add zigsag geo as construction lines
+ i = sketch.GeometryCount
+ sketch.addGeometry(
+ Part.LineSegment(FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(-10, 10, 0)), True
+ )
+ sketch.addGeometry(
+ Part.LineSegment(FreeCAD.Vector(-10, 10, 0), FreeCAD.Vector(-5, 20, 0)), True
+ )
+ sketch.addGeometry(
+ Part.LineSegment(FreeCAD.Vector(-5, 20, 0), FreeCAD.Vector(-10, 25, 0)), True
+ )
+ sketch.addGeometry(
+ Part.LineSegment(FreeCAD.Vector(-10, 25, 0), FreeCAD.Vector(0, 30, 0)), True
+ )
+ sketch.addConstraint(Sketcher.Constraint("Coincident", i + 0, 2, i + 1, 1))
+ sketch.addConstraint(Sketcher.Constraint("Coincident", i + 1, 2, i + 2, 1))
+ sketch.addConstraint(Sketcher.Constraint("Coincident", i + 2, 2, i + 3, 1))
+ sketch.addConstraint(Sketcher.Constraint("Coincident", i + 3, 2, 0, 1))
+ sketch.addConstraint(Sketcher.Constraint("Coincident", i + 0, 1, 2, 2))
- pad = self.Doc.addObject("PartDesign::Pad", "Pad")
- pad.Profile = sketch
- body.addObject(sketch)
- body.addObject(pad)
- self.Doc.recompute()
- sketch1 = self.Doc.addObject("Sketcher::SketchObject", "Sketch1")
- sketch1.AttachmentSupport = (pad, ("Face6"))
- sketch1.MapMode = "FlatFace"
- self.Doc.recompute()
+ pad = self.Doc.addObject("PartDesign::Pad", "Pad")
+ pad.Profile = sketch
+ body.addObject(sketch)
+ body.addObject(pad)
+ self.Doc.recompute()
+ sketch1 = self.Doc.addObject("Sketcher::SketchObject", "Sketch1")
+ sketch1.AttachmentSupport = (pad, ("Face6"))
+ sketch1.MapMode = "FlatFace"
+ self.Doc.recompute()
- CreateCircleSketch(sketch1, (2, 2, 0), 1)
- CreateCircleSketch(sketch1, (6, 2, 0), 1)
- body.addObject(sketch1)
- self.Doc.recompute()
- # Act toggle construction lines on in sketch; pad now has 9 instead of 6 faces.
- sketch.setConstruction(4, False)
- sketch.setConstruction(5, False)
- sketch.setConstruction(6, False)
- sketch.setConstruction(7, False)
- sketch.setConstruction(3, True)
- self.Doc.recompute()
- # Assert
- # AttachmentSupport is a list of (object,(subobject list)) with 1 entry. Get the
- # first and only subobject name in second part of that first tuple and see that it moved
- # from the Face6 we set above.
- self.assertEqual(sketch1.AttachmentSupport[0][1][0], "Face9")
- self.assertIn("Face6", pad.Shape.ElementReverseMap) # different Face6 exists
+ CreateCircleSketch(sketch1, (2, 2, 0), 1)
+ CreateCircleSketch(sketch1, (6, 2, 0), 1)
+ body.addObject(sketch1)
+ self.Doc.recompute()
+ # Act toggle construction lines on in sketch; pad now has 9 instead of 6 faces.
+ sketch.setConstruction(4, False)
+ sketch.setConstruction(5, False)
+ sketch.setConstruction(6, False)
+ sketch.setConstruction(7, False)
+ sketch.setConstruction(3, True)
+ self.Doc.recompute()
+ # Assert
+ # AttachmentSupport is a list of (object,(subobject list)) with 1 entry. Get the
+ # first and only subobject name in second part of that first tuple and see that it moved
+ # from the Face6 we set above.
+ self.assertEqual(sketch1.AttachmentSupport[0][1][0], "Face9")
+ self.assertIn("Face6", pad.Shape.ElementReverseMap) # different Face6 exists
# TODO other tests:
# getHigherElement
diff --git a/src/Mod/Test/Document.py b/src/Mod/Test/Document.py
index dd58b95098..efc93c62ee 100644
--- a/src/Mod/Test/Document.py
+++ b/src/Mod/Test/Document.py
@@ -21,7 +21,6 @@
# * *
# ***************************************************************************/
-from plistlib import UID
import FreeCAD, os, unittest, tempfile
from FreeCAD import Base
import math
@@ -674,45 +673,46 @@ class DocumentBasicCases(unittest.TestCase):
class DocumentImportCases(unittest.TestCase):
def testDXFImportCPPIssue20195(self):
- import importDXF
- from draftutils import params
+ if "BUILD_DRAFT" in FreeCAD.__cmake__:
+ import importDXF
+ from draftutils import params
- # Set options, doing our best to restore them:
- wasShowDialog = params.get_param("dxfShowDialog")
- wasUseLayers = params.get_param("dxfUseDraftVisGroups")
- wasUseLegacyImporter = params.get_param("dxfUseLegacyImporter")
- wasCreatePart = params.get_param("dxfCreatePart")
- wasCreateDraft = params.get_param("dxfCreateDraft")
- wasCreateSketch = params.get_param("dxfCreateSketch")
+ # Set options, doing our best to restore them:
+ wasShowDialog = params.get_param("dxfShowDialog")
+ wasUseLayers = params.get_param("dxfUseDraftVisGroups")
+ wasUseLegacyImporter = params.get_param("dxfUseLegacyImporter")
+ wasCreatePart = params.get_param("dxfCreatePart")
+ wasCreateDraft = params.get_param("dxfCreateDraft")
+ wasCreateSketch = params.get_param("dxfCreateSketch")
- try:
- # disable Preferences dialog in gui mode (avoids popup prompt to user)
- params.set_param("dxfShowDialog", False)
- # Preserve the DXF layers (makes the checking of document contents easier)
- params.set_param("dxfUseDraftVisGroups", True)
- # Use the new C++ importer -- that's where the bug was
- params.set_param("dxfUseLegacyImporter", False)
- # create simple part shapes (3 params)
- # This is required to display the bug because creation of Draft objects clears out the
- # pending exception this test is looking for, whereas creation of the simple shape object
- # actually throws on the pending exception so the entity is absent from the document.
- params.set_param("dxfCreatePart", True)
- params.set_param("dxfCreateDraft", False)
- params.set_param("dxfCreateSketch", False)
- importDXF.insert(
- FreeCAD.getHomePath() + "Mod/Test/TestData/DXFSample.dxf", "ImportedDocName"
- )
- finally:
- params.set_param("dxfShowDialog", wasShowDialog)
- params.set_param("dxfUseDraftVisGroups", wasUseLayers)
- params.set_param("dxfUseLegacyImporter", wasUseLegacyImporter)
- params.set_param("dxfCreatePart", wasCreatePart)
- params.set_param("dxfCreateDraft", wasCreateDraft)
- params.set_param("dxfCreateSketch", wasCreateSketch)
- doc = FreeCAD.getDocument("ImportedDocName")
- # This doc should have 3 objects: The Layers container, the DXF layer called 0, and one Line
- self.assertEqual(len(doc.Objects), 3)
- FreeCAD.closeDocument("ImportedDocName")
+ try:
+ # disable Preferences dialog in gui mode (avoids popup prompt to user)
+ params.set_param("dxfShowDialog", False)
+ # Preserve the DXF layers (makes the checking of document contents easier)
+ params.set_param("dxfUseDraftVisGroups", True)
+ # Use the new C++ importer -- that's where the bug was
+ params.set_param("dxfUseLegacyImporter", False)
+ # create simple part shapes (3 params)
+ # This is required to display the bug because creation of Draft objects clears out the
+ # pending exception this test is looking for, whereas creation of the simple shape object
+ # actually throws on the pending exception so the entity is absent from the document.
+ params.set_param("dxfCreatePart", True)
+ params.set_param("dxfCreateDraft", False)
+ params.set_param("dxfCreateSketch", False)
+ importDXF.insert(
+ FreeCAD.getHomePath() + "Mod/Test/TestData/DXFSample.dxf", "ImportedDocName"
+ )
+ finally:
+ params.set_param("dxfShowDialog", wasShowDialog)
+ params.set_param("dxfUseDraftVisGroups", wasUseLayers)
+ params.set_param("dxfUseLegacyImporter", wasUseLegacyImporter)
+ params.set_param("dxfCreatePart", wasCreatePart)
+ params.set_param("dxfCreateDraft", wasCreateDraft)
+ params.set_param("dxfCreateSketch", wasCreateSketch)
+ doc = FreeCAD.getDocument("ImportedDocName")
+ # This doc should have 3 objects: The Layers container, the DXF layer called 0, and one Line
+ self.assertEqual(len(doc.Objects), 3)
+ FreeCAD.closeDocument("ImportedDocName")
# class must be defined in global scope to allow it to be reloaded on document open