Skip to content

paullee0/FreeCAD_SketchArch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FreeCAD SketchArch Workbench

alt text 2 An experimental add-on module to augment Arch Objects with additional feature

I. Description

To leverage Sketch and/or SketchObjectPython inherent features to help building Architectural Models

II. Features

1. Sketcher Capabilities

alt text 1

  • Leverage Sketch and/or SketchObjectPython inherent features and capabilities
  • So Sketch Layout + Arch Wall = Building Layout
  • Sketcher have geometric and dimensional constraints to help making and editing 'single-line sketch layouts'

(Click To PLAY VIDEO !)  Youtube Video  Youtube Video

alt text 1a

alt text 1b

2. Parametric Placement/Attachment of Arch Objects Intuitively

(Toponaming-Tolerant)

alt text 2

  • Sketch have Mapmode/Attachment Offset so sketch for each floor layout can be fixed at desired position 'mutually as a whole'
  • Extend capability to Arch Objects, e.g. Window, Equipment and their Links could 'attach' to 'Wall Segment' / 'Layout Sketch' to fix its position
    • Discussion (Intuitive Automatic Windows/Doors + Equipment Placement) (forum thread) (downloadable model)
    • Note: (Window Object also use Sketch; alternative use Window's Sketch to attach to Layout Sketch)

[ Special Remarks :

  • For this feature to work, use at least the 0.20_pre-release version git 26720 (e.g. FreeCAD_weekly-builds-26720-Linux-Conda_glibc2.12-x86_64.AppImage)
  • Otherwise, needs to follow the FreeCAD forum discussion to use the tweaked ArchWindow.py, ArchEquipment.py etc. ]

(Click To PLAY VIDEO !)  Youtube Video  Youtube Video

(Click To PLAY VIDEO !)  Youtube Video

alt text 2a alt text 2b alt text 2c

3. Width & Align Per Edge

(Toponaming-Tolerant)

alt text 3a alt text 3b

  • ArchWall base on a Sketch / SketchObjectPython object (ArchSketch) can have different width for each segment - per Sketch Edge
  • ArchWall base on a Sketch / ArchSketch can then be treated / moved / edited as single floor layout object, the dimension of which, width of individual wall segment can be modified relatively easily

(Click To PLAY VIDEO !)  Youtube Video  Youtube Video

alt text 3a

4. ArchStructure, Curtain Wall, ArchWall etc. + Same ArchSketch = Building Layout

alt text 4a alt text 4a
ArchSketch + ArchStructure = Slab Layout
ArchSketch + ArchCurtainWall = CurtainWall Layout
ArchSketch + ArchWall = Wall Layout

Have your ever set out your building layout in a sketch like below, and wonder if -

  • ArchWall would build walls based on edges in the middle part
  • ArchStructure build slab based on the outermost one, with an opening in the middle
  • ArchCurtainWall build panels based on the outermost one edges

So you have just 1 simple ArchSketch, just like any architectural student start learning sketching building layout in school. Now, you just edit the same ArchSketch, you have e.g. the shape / dimension of the slab and curtain wall changed at the same time.

FreeCAD Forum Discussion Thread

(Click To PLAY VIDEO !)  Youtube Video

alt text 3a alt text 3a alt text 3a alt text 3a

5. Floor Area Calculation + Room Dimension

  • [Feature] Floor Area Calculation + Room Dimension (forum thread)
  • See below on CellComplex

alt text 3a

6. CellComplex Creation [Topologic]

alt text 6

(Click To PLAY VIDEO !) Youtub Video

alt text 3a alt text 3a alt text 3a

7. Topological Naming Tolerant

  • Progress / Status of Implementation :

    1. 10.7.2021 Exposed - Arch Object Intuitive Automatic Placement
    2. 27.4.2024 Exposed - Arch Wall Width Setting for Each Wall Segment
    3. 27.4.2024 Exposed - Arch Wall Align Setting for Each Wall Segment
    4. (Above 3 Features Implementated in 2019-21)
  • The most important feature is to make referencing to a Sketch Edge persistent (not currently as of 0.19_pre, unless use @realthunder's branch), 3 main approaches :

    1. Using sketch.Geometry[index].Tag Using sketch.Geometry[index].Tag == Unique identification survive changes? (forum thread)
      a. Implemented On-the-fly updating Index referencing Sketch.Geometry[index].Tag on UpdateAttachmentOffset() (preferred approach) [Need every object recompute() to keep in sync]
      b. Rebuilding a Dict referencing Sketch.Geometry[index].Tag onDocumentRestore (Implemented but not exposed. Solution 1a is preferable)
      (As of Marh 2024, a mix use of 1a and 1b are used)
    2. Using PartGeometryExtension / SketchGeometryExtension
      Being Implemented as of March 2024
      • Part Geometry Extensions - Extension for 'Persistent UUID Tag' (forum thread)
      • Sketcher Development - Integration of Extensions (forum thread)
    3. Using @Realthunder's branch
  • Earlier Discussions : Unique and Persistent Sketch Edge Name

    • Ability to (auto) give (unique) name each edges in a sketch which would not be repeated or reused - Sketcher: Virtual Space (forum thread)
    • Tag consistent (for Sketch geometries) - Civil engineering feature implementation (Transportation Engineering) (forum thread)

(Click To PLAY VIDEO !)  Youtube Video

8. Voxelisation

alt text 6

  1. Select the shape object to 'voxelise', click Voxel button
  2. Can select the shape of voxel, like (App::Link to) a Group w/ 4 Walls, Windows, Slab etc.
  3. Has 3 modes :-
    • a. Center : If Center of (the BoundBox of) voxel is within the Input Shape, it is shown
    • b. Any Corner : If Any Corner of (the BoundBox of) voxel is within the Input Shape, it is shown
    • c. All Corners : Only if All Corners of (the BoundBox of) voxel are within the Input Shape, it is shown

What ceated ?

  1. Under the hood, pressing the button creates 2 objects
  2. First is a 'VoxelPart' object with a propertyLink to an 'Input Shape Object'
  3. Second is an App::Link which produce the Array of Voxels
    • The VoxelPart calculates the placement of every Voxels
    • It creates a Box, or copy the shape of 'VoxelObj' (usecase: point to a object with Shape, or to a Link to a Group containing a numbers of objects)
    • The 2nd Object App::Link actually create the array of Voxels according to VoxelPart calculation

alt text 6a alt text 6b

Features in Development, Other Remarks

Click to expand!

9. Space / Room / Zone & Cell Complex Definition

  • A Space, Room or Zone could be defined right within (Arch)Sketch itself

  • Automatic identification of each enclosed area (room) defined by edges (walls)

  • Automatic generation of CellComplex (see below)

  • Manual assignment of Space / Zone definition identified by user

  • Naming of the Space / Room / Zone by user

  • Single Source of 'Information Rich' Sketch to build

    • ArchWall
    • ArchSpace / CellComplex (rooms)
  • CellComplex

    • OSArch forum: Talk on Topologic (CellComplex) (forum thread)
    • Built on same Sketch as ArchWall (building layout)
    • Share same faces between Cells
    • Cell faces have no thickness
  • Space Connectivity

    • So 2 ArchSpace / Cells with same ArchWindow/Door is interconnected
  • ArchWindow/Door Attachment

    • 'Attached' to Space / Room / Zone rather than only 'Arch Wall' (or edges)
    • 'Grouped' under 'ArchSpace' as well

10. More concepts of adopting SketchObjectPython / ArchSketch as Building Layout Object

  • Different materials for wall surface on each sides
  • Different wall joint / junction geometrical shape
  • (good for IFCexport ?) Maybe Wall can support different Height for each segment? Similarly, this information be saved in the ArchSketch
  • (good for IFCexport ?) Different materials for different wall segment?

Prerequisites / Other Remarks

  • The said information (width, align, height, material etc.) is conceived to be saved in Sketch / SketchObjectPython with Part Geometry Extensions feature - the latter currently has a bug which crash FC
  • Bugs / IFC export / multi-materials etc. to support Wall base on Sketch to be fixed / implemented

III. Examples

Models

IV. Install

'Semi'- Automatic (recommended)

  • Launch FreeCAD and start the Addons Manager (Tools > Addon manager)
  • Press the Configure... button.
    • The Addon manager options dialog box opens.
    • Add the repository to the Custom repositories list - https://github.com/paullee0/FreeCAD_SketchArch
    • Optionally choose proxy settings.
    • Press the OK button button to close the dialog box.
  • Restart FreeCAD
  • Locate the workbench dropdown list and switch to the 'SketchArch workbench'

Manual

If necessary, this workbench can be installed manually. Example:

  • Find your default local FreeCAD directory and clone SketchArch in to it. Example:
    cd ~/.FreeCAD/Mod
    git clone https://github.com/paullee0/FreeCAD_SketchArch
    
  • Restart FreeCAD
  • Locate the workbench dropdown list and switch to the 'SketchArch workbench'

For more general info see the general instructions for manual install on the FreeCAD wiki.

V. Feedback / Discussion / Announcement

There are a few discussion on FreeCAD discussion fourm with different topics:-

When bugs/feature-requests are vetted on the forum they will then be tracked in the issue queue of this repo.

VI. About

Maintainer: paullee (@paullee0) Repository: https://github.com/paullee0/FreeCAD_SketchArch

VII. License

LICENSE

About

A module for Architecure and making Arch Objects with SketchObjectPython

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages