如何在FreeCAD中为架构创建拱门?

时间:2016-09-09 19:24:17

标签: freecad

我想在FreeCAD中创建一个拱门,用于架构模块。在OpenSCAD中,它看起来像这样:

Arch in OpenSCAD

来源:

rotate(270, v=[1,0,0]) {difference() {rotate_extrude(fn=500) {translate([750, 0, 0])square([400,400]);};
translate([-2000, 0, 0]) {cube([4000, 1500, 1500]);};
}};

使用OpenSCAD模块不是一个解决方案,因为我想使用网格捕捉功能,并且能够编辑拱门而不删除并从OpenSCAD源代码重新创建它(显然在FreeCAD中是必需的)。 / p>

使用搜索引擎搜索解决方案是不可能的,因为显然只显示架构模块(= Arch)。

1 个答案:

答案 0 :(得分:2)

可以通过

创建一个用于体系结构模块的拱门
  • 在表示拱门面部的零件设计模式中创建草图
  • 在Arch模式下制作一个结构

等效的FreeCAD脚本代码是:

import Part
import Sketcher
import Arch

App.newDocument("Unnamed")
App.setActiveDocument("Unnamed")
App.ActiveDocument=App.getDocument("Unnamed")
Gui.ActiveDocument=Gui.getDocument("Unnamed")
Gui.activateWorkbench("PartDesignWorkbench")
App.activeDocument().addObject('Sketcher::SketchObject','Sketch')
App.activeDocument().Sketch.Placement = App.Placement(App.Vector(0.000000,0.000000,0.000000),App.Rotation(-0.707107,0.000000,0.000000,-0.707107))
#Gui.activeDocument().activeView().setCamera('#Inventor V2.1 ascii \n OrthographicCamera {\n viewportMapping ADJUST_CAMERA\n  position 0 -87 0 \n  orientation -1 0 0  4.712389\n  nearDistance -112.88701\n  farDistance 287.28702\n  aspectRatio 1\n  focalDistance 87\n  height 143.52005\n\n}')
Gui.activeDocument().setEdit('Sketch')
App.ActiveDocument.Sketch.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.000000,-0.000000,0),App.Vector(0,0,1),200.000000),0.000000,3.141593))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',0,3,-1,1)) 
App.ActiveDocument.Sketch.addGeometry(Part.ArcOfCircle(Part.Circle(App.Vector(0.000000,-0.000000,0),App.Vector(0,0,1),300.000000),0.000000,3.141593))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',1,3,-1,1)) 
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('PointOnObject',1,2,-1)) 
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('PointOnObject',1,1,-1)) 
App.ActiveDocument.Sketch.addGeometry(Part.Line(App.Vector(-300.000000,-0.000000,0),App.Vector(-200.000000,-0.000000,0)))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',2,1,1,2)) 
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',2,2,0,2)) 
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Horizontal',2)) 
App.ActiveDocument.Sketch.addGeometry(Part.Line(App.Vector(200.000000,-0.000000,0),App.Vector(300.000000,-0.000000,0)))
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',3,1,0,1)) 
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Coincident',3,2,1,1)) 
App.ActiveDocument.Sketch.addConstraint(Sketcher.Constraint('Horizontal',3)) 
Gui.activeDocument().resetEdit()
App.ActiveDocument.recompute()
Gui.activateWorkbench("ArchWorkbench")
Gui.activeDocument().activeView().viewAxometric()
Arch.makeStructure(FreeCAD.ActiveDocument.Sketch)
FreeCAD.getDocument("Unnamed").getObject("Structure").Height = '100 mm'
Gui.SendMsgToActiveView("ViewFit")
App.ActiveDocument.recompute()
Gui.SendMsgToActiveView("ViewFit")