diff --git a/src/Mod/Arch/Resources/ui/preferences-dae.ui b/src/Mod/Arch/Resources/ui/preferences-dae.ui index e4694b3c3..1e13175d2 100644 --- a/src/Mod/Arch/Resources/ui/preferences-dae.ui +++ b/src/Mod/Arch/Resources/ui/preferences-dae.ui @@ -56,6 +56,246 @@ + + + + + + Mesher + + + + + + + The mesher to use. If using netgen, make sure netgen is enabled in the Mesh module + + + ColladaMesher + + + Mod/Arch + + + + Builtin + + + + + Mefisto + + + + + Netgen + + + + + + + + + + + + + Builtin and mefisto mesher options + + + + + + + + Tessellation + + + + + + + The tessellation value to use with the builtin and mefisto meshers + + + 4 + + + 1.000000000000000 + + + ColladaTessellation + + + Mod/Arch + + + + + + + + + + + + Netgen mesher options + + + + + + + + Grading + + + + + + + The grading value to use for netgen meshing + + + 4 + + + 0.300000000000000 + + + ColladaGrading + + + Mod/Arch + + + + + + + + + + + Segments per edge + + + + + + + The maximum number of segments per edge + + + 1 + + + 1 + + + ColladaSegsPerEdge + + + Mod/Arch + + + + + + + + + + + Segments per radius + + + + + + + The number of segments per radius + + + 1 + + + 2 + + + ColladaSegsPerRadius + + + Mod/Arch + + + + + + + + + + + Allow second order + + + Second order + + + ColladaSecondOrder + + + Mod/Arch + + + + + + + + + + + Allows optimization + + + Optimize + + + true + + + ColladaOptimize + + + Mod/Arch + + + + + + + + + + + Allow quad faces + + + Allow quads + + + ColladaAllowQuads + + + Mod/Arch + + + + + @@ -77,6 +317,21 @@ qPixmapFromMimeSource + + Gui::PrefSpinBox + QSpinBox +
Gui/PrefWidgets.h
+
+ + Gui::PrefCheckBox + QCheckBox +
Gui/PrefWidgets.h
+
+ + Gui::PrefComboBox + QComboBox +
Gui/PrefWidgets.h
+
Gui::PrefDoubleSpinBox QDoubleSpinBox diff --git a/src/Mod/Arch/importDAE.py b/src/Mod/Arch/importDAE.py index f82568ec8..077e4702e 100644 --- a/src/Mod/Arch/importDAE.py +++ b/src/Mod/Arch/importDAE.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD, Mesh, os, numpy +import FreeCAD, Mesh, os, numpy, MeshPart if FreeCAD.GuiUp: from DraftTools import translate else: @@ -45,6 +45,27 @@ def checkCollada(): return False else: return True + +def triangulate(shape): + "triangulates the given face" + p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Arch") + mesher = p.GetInt("ColladaMesher",0) + tessellation = p.GetFloat("ColladaTessellation",1.0) + grading = p.GetFloat("ColladaGrading",0.3) + segsperedge = p.GetInt("ColladaSegsPerEdge",1) + segsperradius = p.GetInt("ColladaSegsPerRadius",2) + secondorder = p.GetBool("ColladaSecondOrder",False) + optimize = p.GetBool("ColladaOptimize",True) + allowquads = p.GetBool("ColladaAllowQuads",False) + if mesher == 0: + return shape.tessellate(tessellation) + elif mesher == 1: + return MeshPart.meshFromShape(Shape=shape,MaxLength=tessellation).Topology + else: + return MeshPart.meshFromShape(Shape=shape,GrowthRate=grading,SegPerEdge=segsperedge, + SegPerRadius=segsperradius,SecondOrder=secondorder,Optimize=optimize, + AllowQuad=allowquads).Topology + def open(filename): "called when freecad wants to open a file" @@ -131,7 +152,7 @@ def export(exportList,filename,tessellation=1): m = None if obj.isDerivedFrom("Part::Feature"): print "exporting object ",obj.Name, obj.Shape - m = Mesh.Mesh(obj.Shape.tessellate(tessellation)) + m = Mesh.Mesh(triangulate(obj.Shape)) elif obj.isDerivedFrom("Mesh::Feature"): print "exporting object ",obj.Name, obj.Mesh m = obj.Mesh