From 80e80fef832d6b9582e5f9fb77c0c1b4f2532111 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 30 Aug 2014 19:17:30 -0300 Subject: [PATCH] Arch: allow for equipment objects to be part shapes --- src/Mod/Arch/ArchEquipment.py | 56 ++++++++++++++++++++++------------- src/Mod/Arch/InitGui.py | 4 +-- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/src/Mod/Arch/ArchEquipment.py b/src/Mod/Arch/ArchEquipment.py index e91f520c4..99152a523 100644 --- a/src/Mod/Arch/ArchEquipment.py +++ b/src/Mod/Arch/ArchEquipment.py @@ -41,9 +41,12 @@ else: Roles = ["Furniture", "Hydro Equipment", "Electric Equipment"] -def makeEquipment(baseobj=None,placement=None,name=translate("Arch","Equipment")): - "makeEquipment([baseobj,placement,name]): creates an equipment object from the given base object" - obj = FreeCAD.ActiveDocument.addObject("Mesh::FeaturePython",name) +def makeEquipment(baseobj=None,placement=None,name=translate("Arch","Equipment"),type="Part"): + "makeEquipment([baseobj,placement,name,type]): creates an equipment object from the given base object" + if type == "Part": + obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython",name) + else: + obj = FreeCAD.ActiveDocument.addObject("Mesh::FeaturePython",name) obj.Label = name _Equipment(obj) if baseobj: @@ -52,6 +55,8 @@ def makeEquipment(baseobj=None,placement=None,name=translate("Arch","Equipment") obj.Placement = placement if FreeCAD.GuiUp: _ViewProviderEquipment(obj.ViewObject) + if baseobj: + baseobj.ViewObject.hide() def createMeshView(obj,direction=FreeCAD.Vector(0,0,-1),outeronly=False,largestonly=False): @@ -230,25 +235,36 @@ class _Equipment(ArchComponent.Component): def execute(self,obj): pl = obj.Placement - m = None if obj.Base: - - if obj.Base.isDerivedFrom("Part::Feature"): - base = obj.Base.Shape.copy() - base = self.processSubShapes(obj,base,pl) + if obj.isDerivedFrom("Mesh::Feature"): + m = None + if obj.Base.isDerivedFrom("Part::Feature"): + base = obj.Base.Shape.copy() + base = self.processSubShapes(obj,base,pl) + if base: + import Mesh + m = Mesh.Mesh(base.tessellate(1)) + + elif obj.Base.isDerivedFrom("Mesh::Feature"): + m = obj.Base.Mesh.copy() + if m: + if not pl.isNull(): + m.Placement = pl + obj.Mesh = m + else: + base = None + if obj.Base.isDerivedFrom("Part::Feature"): + base = obj.Base.Shape.copy() + elif obj.Base.isDerivedFrom("Mesh::Feature"): + import Part + base = Part.Shape() + base.makeShapeFromMesh(obj.Base.Mesh.Topology,0.05) + base = base.removeSplitteR() if base: - import Mesh - m = Mesh.Mesh(base.tessellate(1)) - - elif obj.Base.isDerivedFrom("Mesh::Feature"): - m = obj.Base.Mesh.copy() - - if m: - if not pl.isNull(): - m.Placement = pl - obj.Mesh = m - - + base = self.processSubShapes(obj,base,pl) + self.applyShape(obj,base,pl) + + class _ViewProviderEquipment(ArchComponent.ViewProviderComponent): "A View Provider for the Equipment object" diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index d25e1fe2b..3483bff1b 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -89,7 +89,7 @@ class ArchWorkbench(Workbench): "Draft_Trimex", "Draft_Upgrade", "Draft_Downgrade", "Draft_Scale", "Draft_Drawing","Draft_Shape2DView","Draft_Draft2Sketch","Draft_Array", "Draft_Clone"] - self.extramodtools = ["Draft_WireToBSpline","Draft_AddPoint","Draft_DelPoint"] + self.draftextratools = ["Draft_WireToBSpline","Draft_AddPoint","Draft_DelPoint","Draft_ShapeString","Draft_PathArray"] self.draftcontexttools = ["Draft_ApplyStyle","Draft_ToggleDisplayMode","Draft_AddToGroup", "Draft_SelectGroup","Draft_SelectPlane", "Draft_ShowSnapBar","Draft_ToggleGrid","Draft_UndoLine", @@ -107,7 +107,7 @@ class ArchWorkbench(Workbench): self.appendToolbar(translate("arch","Draft mod tools"),self.draftmodtools) self.appendMenu([translate("arch","&Architecture"),translate("arch","Utilities")],self.utilities) self.appendMenu(translate("arch","&Architecture"),self.archtools) - self.appendMenu(translate("arch","&Draft"),self.drafttools+self.draftmodtools+self.extramodtools) + self.appendMenu(translate("arch","&Draft"),self.drafttools+self.draftmodtools+self.draftextratools) self.appendMenu([translate("arch","&Draft"),translate("arch","Utilities")],self.draftutils+self.draftcontexttools) self.appendMenu([translate("arch","&Draft"),translate("arch","Snapping")],self.snapList) FreeCADGui.addIconPath(":/icons")