Many thanks! It works fine.
Thanks for the latest revisions. Much improved usability.
Feature Request:
Would it be possible to add a mode, where all the sub- and sub-sub-etc-part LCS:s would be hidden in the 3D view? If I understand correctly, it is only possible to link between LCS:s in the current file’s Model folder and directly attached Bodies’ and Parts’ LCS:s. Thus, I’d like to avoid cluttering the 3D display from subsub…part LCS:s, that are inaccessible from the current file anyway. Not sure, if this kind of hiding is technically feasible or even possible, though…
Maybe it would be easier to say that I would like the 3D view to only show LCS:s that are directly accessible from the current file by Asm 4. BTW, Assembly 4 is a great tool, I use it all the time, thanks! ![]()
Hi, I have a question. When I import a part into Assembly4, I would like to know if two or more restrictions can be applied at the same time.
Imagine that with one point the parts are centered but there is 360º mobility in all axes, if you put a reference line and a point or three points then the parts only have one placement. Is this possible? Apply more than one constraint to the part.
Thanks
Hi, Asm4 is an assembly workbench without solver, that is the main idea behind the workbench. So, no, it’s not possible. However, you’re supposed to a do a skeleton sketch (a sketch without any 3D-shape, just the sketch), and use the sketch solver. There you can apply multiple restrictions, albeit in 2D-only. Then, you’ll attach the LCS:s into some sketch elements, and voila, your assembly follows the sketch movement. This allows neat animations by animating the sketches. Moreover, you’ll be able to combine several 2D sketches in order to do 3D solving/animation, if necessary.
EDIT: I made a small example assembly, just for fun!
If you load the attached FCStd model, and activate the Asm4 workbench and hit the animate icon (the two gears), and fill in the Arm_angle as animated variable and range from e.g. 0 to 60 with 0.5 steps, you’ll see a sketch based simple animation. The model is real simple, so it should be rather easy to study how it’s done. The main difficulty is to hit the small blue (f(x)) button in Master Sketch Constraints, which is needed in order to put variables into the sketch constraint values. Hitting the button opens a small window, where you’ll write “Variables.my_variable” (without the quotes).


OS: Debian GNU/Linux bullseye/sid (KDE//usr/share/xsessions/plasma)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.21854 (Git)
Build type: Unknown
Branch: master
Hash: ffbcab5b4964af1170e7f09e9788b3ade0c727af
Python version: 3.8.3
Qt version: 5.14.2
Coin version: 4.0.0
OCC version: 7.4.0
Locale: English/United States (en_US)
20200705 Asm4 Animation.FCStd (68.4 KB)
I want to do Nested Assembly, and I can add New LCS directly on Model, but when I edit datum and select anything, it says problem in selection on report view, how can I solve this?
Did you try to ignore that message ?
I don’t get the same error message but I can’t select any element of one of the subassemblies in order to reference the LCS of the Model.
When I select a line or a surface the task list does not react by adjusting the options to choose and when hitting ok it tells me that no reference has been selected.
Best regards
Oliver
I can’t select any element of one of the subassemblies in order to reference the LCS of the Model.
Can you please list the exact steps you do to get to the problem ?
It seems to me that you try to attach a datum object with the “Edit Datum” command (right-click > Edit Datum), which is the same as hitting the small […] button in the MapMode field of the object’s properties, and then try to attach the datum to something in a child link of the assembly. Is that right ? In which case this behaviour is “normal” in the sense that this doesn’t work like this. Attachment to App::Link objects is not supported (currently at v0.19).
What you have to do is to create and attach a datum object in the document where the original (linked) object is. If you want to have that datum in the assembly, then you need, after having created and attached the datum in the original object, to “import” it into the assembly, which does the following: it creates another (native) datum in the assembly, and attaches it to the original datum in the original object. Thus, the datum in the assembly will always “follow” the original datum in the original object. But there are actually 2 distinct datum objects: 1 in the original (linked) file and 1 in the assembly.
Hi Zolko,
thanks for the reply. It might also be that I am using the Assembly 4 workbench the wrong way. Therefore let me first describe what I would like to achieve and then go step-by-step through the challenges with a simpler example.
This is a a simple Item Cross-Brace that I have put together from an Item profile and two connectors as an assembly. I would now like to place this assembly at several places in a bigger one:

For this I thought the logical approach would be to define a LCS within the assembly of the Crossbrace so that I can attach this LCS to elements in the overall assembly.
Here are the steps for reproducing my problem:
- Working with FreeCA 0.19 and a recent (1 week old?) version of A4:
OS: Ubuntu 20.04 LTS
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.21718 (Git) AppImage
Build type: Release
Branch: master
Hash: 002e25b5617f2c79f65968f1f82f7267899965c3
Python version: 3.8.2
Qt version: 5.12.5
Coin version: 4.0.0
OCC version: 7.4.0
Locale: German/Germany (de_DE)
-
Creating a New Part, Body, Sketch, Padding it to a cube and adding an arbitrary LCS (see file cube)
-
Creating a New Model in a separate file, adding the cube part twice and attaching one cube to another (see file 2cubes)
-
Now I would like to add a LCS “LCS_in_Model” to the model that I could then use to place the subassembly of the two cubes (or my crossbrace in reality) into a bigger assembly. After adding the LCS, I edit it but I can’t select a reference (neither a plane, vertice, edge, nor a LCS from one of the parts:

Would be great if you could let me know what I would have to do differently. Thanks a lot in advance!
Best
Oliver
2cubes.FCStd (6.2 KB)
cube.FCStd (11.8 KB)
- Now I would like to add a LCS “LCS_in_Model” to the model that I could then use to place the subassembly of the two cubes (or my crossbrace in reality) into a bigger assembly. After adding the LCS, I edit it but I can’t select a reference (neither a plane, vertice, edge, nor a LCS from one of the parts:
I’m not sure if I understood you correctly, but you’re supposed to connect parts together only LCS-to-LCS, using this button:

screenshot
With that button you can choose which LCS you connect, and how to select the XYZ-permutations of the coordinates.
If you want to attach an LCS to a certain feature of your model, you should only attach an LCS within your part into that part; so don’t try to attach an LCS of part A into part B. Instead, attach an LCS_A001 in part A to part A + attach an LCS_B001 in part B to part B; and then use the “move/attach a part” tool above. Select part A, press the tool, inside the tool select part B in the list, and then select LCS_A001 in part A list and LCS_B001 in part B list. Then, the parts magically connected, and stay together. ![]()
I’m not sure if I understood you correctly, but you’re supposed to connect parts together only LCS-to-LCS, using this button:
That’s clear and if you look into the 2cubes file the 2 cubes are connected by linking their “LCS_Test”. ![]()
As long as everything stays within one assembly the workbench works flawless for me. What doesn’t work for me is to use the 2 cubes as a sub-assembly in another model.
If you create a new file, create a new model and link the entire model from the “2cubes” into this file you no longer have access to the LCS of the individual cubes:

As you can see here if I have the 2 subassemblies in one file I can see the LCS of the individual cubes (“LCS_Test”) but I can’t use them to place the linked part.
I can use the LCS_in_Model in order to position my subassembly but within the model I don’t have a possbility to link the LCS on the Model level to any part of the subassembly.
From my point of view there are three options:
(1) I still don’t get the concept of A4 and I am doing sth wrong. ![]()
(2) The LCS of a linked part should be accessible on the model level so that it can be used to placement
(3) The LCS of a model could be somehow linked to a part of the model geometry or a LCS of one of the parts of the subassembly.
Best,
Oliver
I can use the LCS_in_Model in order to position my subassembly but within the model I don’t have a possbility to link the LCS on the Model level to any part of the subassembly.
you can attach the LCS_in_Model to an LCS_in_childPart with the Place_Datum command. Better yet, select LCS_in_childPart in the tree and click Import_Datum.
(1) I still don’t get the concept of A4 and I am doing sth wrong. >
(2) The LCS of a linked part should be accessible on the model level so that it can be used to placement
(3) The LCS of a model could be somehow linked to a part of the model geometry or a LCS of one of the parts of the subassembly.
(1) I have the feeling that you got that quite correct
(2) it’s easy to say, quite easy to do, but it adds more levels of complexity and more ways of breaking things, more error-checking and more options, so I’m not favorable to that. Also, then people will want to use LCS in the sub-assembly of a sub-assembly, adding even more levels and more ways for breaking things
(3) this is a built-in FreeCAD limitation
you can attach the LCS_in_Model to an LCS_in_childPart with the Place_Datum command. Better yet, select LCS_in_childPart in the tree and click Import_Datum.
Thanks a lot! This was the missing bit of information. With an imported LCS the subassembly is easy to position in the overall master.
Best regards
Oliver
I agree with Zolko’s reasoning…
Ping
I’ve gone through the official tutorials and examples and I’m slowly beginning to think that I’ve completely misunderstood ASM4.
I have basically following use-cases:
- I place some thing in an enclosure to specific places and then I try modeling openings, mounting holes, and mounting brackets around them.
- I want to draw some features which are not only additive but also subtractive at specific places in parent model.
Regarding 1. I’m starting to kinda succesfully manage it with heavy use of subshapebinders.
Regarding 2. I can’t even do the additions… I haven’t figured out how to do an union and export of assembled things.
Anyway, back to my first sentence: I’ve looked through the examples and I also opened some models I found in this thread and it seems that nobody is even trying to do something like I’m trying to do and just use the ASM4 for visualization and animation.
Is it really what is ASM4 for? visualization and animation and nothing like doing somthing similar to this https://github.com/DeepSOIC/Lattice2/wiki/PartDesign-Pattern-Tutorial ?
I’ve gone through the official tutorials and examples and I’m slowly beginning to think that I’ve completely misunderstood ASM4.
I think you are rather looking for features of the PartDesign workbench and other workbenches working with solids. An assembly is by definition when you put things together that you can disassemble again. So putting a board in a case would be an assembly but cutting holes in a case would be part of the “normal” modeling.
I think you are rather looking for features of the PartDesign workbench and other workbenches working with solids. An assembly is by definition when you put things together that you can disassemble again. So putting a board in a case would be an assembly but cutting holes in a case would be part of the “normal” modeling.
Maybe the Lattice2 has been adding some weight to my confusion, because it is also working with LCSs (called Placements there). It is actually exactly what I need and I’ve used it many many times but it is missing a key feature and that is working across multiple files (or at least I haven’t been able to persuade it to take App::Link as a regular PD body
).
I’m slowly beginning to think that I’ve completely misunderstood ASM4.
…
Is it really what is ASM4 for? visualization and animation and nothing like doing somthing similar to this https://github.com/DeepSOIC/Lattice2/wiki/PartDesign-Pattern-Tutorial ?
you have misunderstood the purpose of an assembly workbench. I can’t help you there. Look at all the examples and you’ll understand.
Is it really what is ASM4 for? visualization and animation…
Hardly.
Assembly4 facilitates the creation of numerous bodies using the PartDesign or Part workbench in the same or individual files then assemble and attach them in their proper location in 3D space. It also has the added benefit of simulating motion of an articulating or rotating assembly to check for proper operation during the design process.
If you have not seen these examples perhaps they will give you a better understanding:
https://forum.freecadweb.org/viewtopic.php?f=24&t=48473