Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create an arch in FreeCAD for architecture?

Tags:

freecad

I'd like to create an arch in FreeCAD to be used in the architecture module. In OpenSCAD it'd look like this:

Arch in OpenSCAD

Source:

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]);};
}};

Using the OpenSCAD module is not a solution because I'd like to use the grid snapping features and be able to edit the arch without deleting and recreating it from OpenSCAD source code (which apparently is necessary in FreeCAD).

Searching for solutions with a search engine is impossible because apparently only referring to the architecture module (= Arch) are displayed.

like image 710
Kalle Richter Avatar asked Sep 09 '16 19:09

Kalle Richter


People also ask

Can FreeCAD be used for architecture?

FreeCAD is a great tool for both professionals and hobbyists, and can be used in design, architecture, construction, mechanical engineering, and other fields.

Is FreeCAD a BIM?

FreeCAD is a general-purpose parametric 3D computer-aided design (CAD) modeler and a building information modeling (BIM) software application with finite element method (FEM) support.

Can FreeCAD do assemblies?

This assembly workbench allows to assemble into a single assembly container other FreeCAD objects, and place them relative to the assembly and to each-other. The parts in the assembly can be in the same document as the assembly or in an external document.


1 Answers

It's possible to create an arch for usage in the architecture module by

  • creating a sketch in part design mode representing the face of the arch
  • make a structure from it in Arch mode

The equivalent FreeCAD scripting code is:

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")
like image 54
Kalle Richter Avatar answered Sep 19 '22 23:09

Kalle Richter