diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 2f3f02810..6b7bf5199 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -34,6 +34,7 @@ def addToComponent(compobject,addobject,mod=None): "Components", the first one that exists in the component. Mod can be set to one of those attributes ("Objects", Base", etc...) to override the default.''' + import Draft if compobject == addobject: return # first check is already there found = False @@ -51,11 +52,17 @@ def addToComponent(compobject,addobject,mod=None): if hasattr(compobject,mod): if mod == "Base": setattr(compobject,mod,addobject) + addobject.ViewObject.hide() + elif mod == "Axes": + if Draft.getType(addobject) == "Axis": + l = getattr(compobject,mod) + l.append(addobject) + setattr(compobject,mod,l) else: l = getattr(compobject,mod) l.append(addobject) setattr(compobject,mod,l) - addobject.ViewObject.hide() + addobject.ViewObject.hide() else: for a in attribs[:3]: if hasattr(compobject,a): @@ -103,7 +110,7 @@ class ComponentTaskPanel: # the categories are shown only if they are not empty. self.obj = None - self.attribs = ["Base","Additions","Subtractions","Objects","Components"] + self.attribs = ["Base","Additions","Subtractions","Objects","Components","Axes"] self.form = QtGui.QWidget() self.form.setObjectName("TaskPanel") self.grid = QtGui.QGridLayout(self.form) @@ -233,6 +240,7 @@ class ComponentTaskPanel: self.treeAdditions.setText(0,QtGui.QApplication.translate("Arch", "Additions", None, QtGui.QApplication.UnicodeUTF8)) self.treeSubtractions.setText(0,QtGui.QApplication.translate("Arch", "Subtractions", None, QtGui.QApplication.UnicodeUTF8)) self.treeObjects.setText(0,QtGui.QApplication.translate("Arch", "Objects", None, QtGui.QApplication.UnicodeUTF8)) + self.treeAxes.setText(0,QtGui.QApplication.translate("Arch", "Axes", None, QtGui.QApplication.UnicodeUTF8)) self.treeComponents.setText(0,QtGui.QApplication.translate("Arch", "Components", None, QtGui.QApplication.UnicodeUTF8)) class Component: diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index af7674e42..37be71102 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -84,15 +84,30 @@ class _Structure(ArchComponent.Component): "The width of this element, if not based on a profile") obj.addProperty("App::PropertyLength","Height","Base", "The height or extrusion depth of this element. Keep 0 for automatic") + obj.addProperty("App::PropertyLinkList","Axes","Base", + "Axes systems this structure is built on") self.Type = "Structure" def execute(self,obj): self.createGeometry(obj) def onChanged(self,obj,prop): - if prop in ["Base","Length","Width","Height","Normal","Additions","Subtractions"]: + if prop in ["Base","Length","Width","Height","Normal","Additions","Subtractions","Axes"]: self.createGeometry(obj) + def getAxisPoints(self,obj): + "returns the gridpoints of linked axes" + from draftlibs import fcgeo + pts = [] + if len(obj.Axes) >= 2: + set1 = obj.Axes[0].Shape.Edges + set2 = obj.Axes[1].Shape.Edges + for e1 in set1: + for e2 in set2: + pts.extend(fcgeo.findIntersection(e1,e2)) + return pts + return None + def createGeometry(self,obj): import Part from draftlibs import fcgeo @@ -158,8 +173,17 @@ class _Structure(ArchComponent.Component): base = base.cut(hole.Shape) hole.ViewObject.hide() # to be removed if base: - obj.Shape = base - if not fcgeo.isNull(pl): obj.Placement = pl + pts = self.getAxisPoints(obj) + if pts: + fsh = [] + for p in pts: + sh = base.copy() + sh.translate(p) + fsh.append(sh) + obj.Shape = Part.makeCompound(fsh) + else: + obj.Shape = base + if not fcgeo.isNull(pl): obj.Placement = pl class _ViewProviderStructure(ArchComponent.ViewProviderComponent): "A View Provider for the Structure object" diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index c8e980297..b6e22cd6e 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -536,13 +536,13 @@ def makeCopy(obj): _Block(newobj) _ViewProviderDraftPart(newobj.ViewObject) elif getType(obj) == "Structure": - import Structure - Structure._Structure(newobj) - Structure._ViewProviderStructure(newobj.ViewObject) + import Arch + Arch._Structure(newobj) + Arch._ViewProviderStructure(newobj.ViewObject) elif getType(obj) == "Wall": - import Wall - Wall._Wall(newobj) - Wall._ViewProviderWall(newobj.ViewObject) + import Arch + Arch._Wall(newobj) + Arch._ViewProviderWall(newobj.ViewObject) elif obj.isDerivedFrom("Part::Feature"): newobj.Shape = obj.Shape else: