aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Boxer.py67
1 files changed, 40 insertions, 27 deletions
diff --git a/Boxer.py b/Boxer.py
index f331198..b31098d 100644
--- a/Boxer.py
+++ b/Boxer.py
@@ -1,4 +1,4 @@
-from FreeCAD import Base, Vector, Matrix, Placement, Rotation
+from FreeCAD import Base, Vector, Matrix, Placement, Rotation, Draft
import Part
from enum import Enum
import math
@@ -163,7 +163,7 @@ class BoxCfg(object):
self.calculate()
self.generateExtrudes = True
- self.generateCrossSections = False # Not very useful so off by default
+ self.generateViews = True
for s in self.sides:
s.enabled = False
@@ -411,26 +411,27 @@ def makeExtrudes(doc, parts, cfg):
return extrudes
-def makeCrossSections(doc, cfg, extrudes):
- def makeCrossSection(extrude, name):
- wires = list()
- shape = extrude.Shape
-
- raise Exception('cfg.thickness is de-implemented')
- for i in shape.slice(Base.Vector(0, 0, 1), cfg.thickness / 2):
- wires.append(i)
+def makeShape2DViews(doc, cfg, extrudes):
+ pvs = {
+ SideType.front: Vector(0, 1, 0),
+ SideType.back: Vector(0, 1, 0),
+ SideType.left: Vector(1, 0, 0),
+ SideType.right: Vector(1, 0, 0),
+ SideType.top: Vector(0, 0, 1),
+ SideType.bottom: Vector(0, 0, 1)
+ }
- comp = Part.Compound(wires)
- cs = doc.addObject("Part::Feature", name + "_Cross_Section")
- cs.Shape = comp
- cs.ViewObject.Visibility = False
- cs.purgeTouched()
- return cs
+ def makeShape2DView(extrude, sideType):
+ boxSide = cfg.sideForType(sideType)
+ print('pvs[sideType]=' + str(pvs[sideType]))
+ s = Draft.makeShape2DView(extrude, projectionVector = pvs[sideType])
+ s.Label = boxSide.title + ' View'
+ return s
- crossSections = {}
- for key, extrude in extrudes.items():
- crossSections[key] = makeCrossSection(extrude, key.title())
- return crossSections
+ objects = {}
+ for sideType, extrude in extrudes.items():
+ objects[sideType] = makeShape2DView(extrude, sideType)
+ return objects
def make(doc, cfg):
@@ -447,13 +448,19 @@ def make(doc, cfg):
doc.recompute()
- crossSections = None
- if cfg.generateCrossSections:
- crossSections = makeCrossSections(doc, cfg, extrudes)
- crossSectionsGroup = doc.addObject("App::DocumentObjectGroup", "Cross Sections")
- [crossSectionsGroup.addObject(cs) for cs in crossSections.values()]
+ views = None
+ cfg.generateViews = True
+ if cfg.generateViews:
+ views = makeShape2DViews(doc, cfg, extrudes)
+ viewsGroup = doc.addObject("App::DocumentObjectGroup", "Views")
+ viewsGroup.Label = 'Views'
+ for sideType, view in views.items():
+ viewsGroup.addObject(view)
- return {'parts': parts, 'extrudes': extrudes, 'crossSections': crossSections}
+ return {
+ 'parts': parts,
+ 'extrudes': extrudes,
+ 'views': views}
def removeEverything(doc):
@@ -462,9 +469,15 @@ def removeEverything(doc):
doc.removeObject(name)
rm("Box")
- rm("Cross Sections")
+ rm("Views")
for key in ['Front', 'Back', 'Left', 'Right', 'Top', 'Bottom']:
rm(key + '_Cross_Section')
rm(key + '_Extrude')
rm(key + '_Part')
+ rm('Shape2DView')
+ rm('Shape2DView001')
+ rm('Shape2DView002')
+ rm('Shape2DView003')
+ rm('Shape2DView004')
+ rm('Shape2DView005')