Assembly3 preview

Discussion about the development of the Assembly workbench.
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
User avatar
OakLD
Posts: 131
Joined: Fri Jan 12, 2018 7:38 pm
Location: Brno

Re: Assembly3 preview

Post by OakLD »

Oh, I made a mistake under the impression of your tree. What I really meant is this:
ProposalCorrected.png
ProposalCorrected.png (48.93 KiB) Viewed 2592 times
I mean that I have never edited subassembly from within an assembly and I think that no existing CAE can even do that. In-assembly editing (i.e available in SollidEdge and I think SolidWorks too) is designed only for part (component) edits (perhaps someone using them on daily-basis can confirm that, it's many years since I worked with CAE SW daily, now I'm only ocassionally supervise CAE design at my work).
There are several points, why to keep assemblies in separate files, i.e. reduced CPU and GPU loads, when dealing with demanding assemblies. Most imporantly, what is the point of splitting a large complicated assembly into subassemblies? The point comes most importantly from production - a design should allow to split it into units that could be well handled by production processes - not too much material, too many instructions carried out not too many jobs and not too much checking done at time. This means separate drawings with separate instructions, separate part lists and many companies allow welders and assembly workers to access 3D models they can rotate in a viewer and measure dimensions. I'd say it would be very difficult to maintain all that in one file. And risky from the stability point-of-view. Even now with FreeCAD, I'm doing copies of files when creating drawings of FEM analysis, even though FreeCAD allows to place everything in one file. It's just mine experience, however.
The multi-level assembly tree looks cool, but it might be counter-productive to go into too-big detail in the end. I say "might", because it could be different case with some industries I don't know well, but I am certain about common engineering practices.

I don't want to be annoying, I just have some little hunches, that some of the effort might be directed in a wrong direction and if that was the case, the sooner it would be discussed, the better chances to deal with it.
Regards,

Oak
realthunder
Veteran
Posts: 2190
Joined: Tue Jan 03, 2017 10:55 am

Re: Assembly3 preview

Post by realthunder »

OakLD wrote: Fri Jun 22, 2018 8:08 pm I'd say it would be very difficult to maintain all that in one file.
asm3 supports external file linking. You can open multiple files in FreeCAD, create sub-assembly in those file, and drag them to the main assembly file. A link will be created between the main file and external component file. No copy is performed. When you see a little white arrow in the right bottom of a tree item icon, that means it is a link. And a small straight arrow in the right top means it is a external link. 'Link' is a very efficient way of creating instance. It will show whatever children the linked object claimed. With your design of hierarchy, each instance will have different constraints depending on where it is located, hence different children objects. It can only be done with a dedicated container.

OakLD wrote: Fri Jun 22, 2018 8:08 pm The multi-level assembly tree looks cool, but it might be counter-productive to go into too-big detail in the end
It could certainly be true in many cases, but as you mentioned later, there are cases where in-place editing might be useful. So the key is to be flexible, and let user choose whether to include all the shape history and stuff. We already have tools in FC to reduce shape history, like Clone, Shapebinder, etc. With some small modification, I can make FC to load only those referenced 'special' object in the external file without loading full shape history.

The ultimate solution might be to let use choose dynamically, like I mentioned before, depending on tree view item collapsing and expanding. That is much harder to do, though.
Try Assembly3 with my custom build of FreeCAD at here.
And if you'd like to show your support, you can donate through patreon, liberapay, or paypal
User avatar
OakLD
Posts: 131
Joined: Fri Jan 12, 2018 7:38 pm
Location: Brno

Re: Assembly3 preview

Post by OakLD »

realthunder wrote: Fri Jun 22, 2018 11:03 pm
OakLD wrote: Fri Jun 22, 2018 8:08 pm I'd say it would be very difficult to maintain all that in one file.
asm3 supports external file linking. You can open multiple files in FreeCAD, create sub-assembly in those file, and drag them to the main assembly file. A link will be created between the main file and external component file. No copy is performed.
Yes, I know and it is a very benefitial feature indeed.
What I only meant was, that when elaborating on examples, we should start with focusing on mainstream examples and practices, because they give FC most user-value.
realthunder wrote: Fri Jun 22, 2018 11:03 pmWhen you see a little white arrow in the right bottom of a tree item icon, that means it is a link. And a small straight arrow in the right top means it is a external link. 'Link' is a very efficient way of creating instance. It will show whatever children the linked object claimed. With your design of hierarchy, each instance will have different constraints depending on where it is located, hence different children objects. It can only be done with a dedicated container.
Sure link is efficient for inserting components and sub-assemblies, I believe everything in Parts container is link.
Would you please explain me, how can a constraint be shared? This is where I'm lost completely.
I'd start with AssyA constrained to AssyB and there would be a link assembly AssyB' placed in a different possition then AssyB and constraint to AssyA. That's what I understand, you're explaining. How can be constraint A-B be the same as A-B'?
realthunder wrote: Fri Jun 22, 2018 11:03 pm
OakLD wrote: Fri Jun 22, 2018 8:08 pm The multi-level assembly tree looks cool, but it might be counter-productive to go into too-big detail in the end
It could certainly be true in many cases, but as you mentioned later, there are cases where in-place editing might be useful. So the key is to be flexible, and let user choose whether to include all the shape history and stuff. We already have tools in FC to reduce shape history, like Clone, Shapebinder, etc. With some small modification, I can make FC to load only those referenced 'special' object in the external file without loading full shape history.

The ultimate solution might be to let use choose dynamically, like I mentioned before, depending on tree view item collapsing and expanding. That is much harder to do, though.
OK, I understand your point.
Here is just a description, how a similar feautres work in CAEs. You might know them, but in case you're not familiar with them, perhaps it can give you some inspiration.

In-assembly part editing - worked in SolidEdge (well some 10 to 15 years ago): You could double-click a part in the assembly or select a command from a local menu (something like "Edit part in-place"). It took some time to load full model into memmory, the rest of the assembly got a bit faded colors to idicate inactive state and you could modify the part as if editing on it's own, only the responsivity was very limited (depending on how complicated the assembly was). When you finished editing, you used command to exit this mode, the file of the part was saved and unloaded and the assembly resumed it's colors.
Back those days, even good computers struggled a lot to handle such features, but it could have been better with smaller assemblies than mine.

Another concept I know of (I attended a training as a supervisor, but haven't used it myself) is "multi-body design", introduced pompously few years back, I think by both SolidEdge and SolidWorks. It literally means you design (make sketches, pads, holes, pockets, etc.) multiple parts simultaneously in one document and split them into "bodies", which can be handled separately. This is very much the same concept (I think), as the blue "Body" you have introduced.
Regards,

Oak
realthunder
Veteran
Posts: 2190
Joined: Tue Jan 03, 2017 10:55 am

Re: Assembly3 preview

Post by realthunder »

OakLD wrote: Sat Jun 23, 2018 6:46 am Would you please explain me, how can a constraint be shared? This is where I'm lost completely.
I'd start with AssyA constrained to AssyB and there would be a link assembly AssyB' placed in a different possition then AssyB and constraint to AssyA. That's what I understand, you're explaining. How can be constraint A-B be the same as A-B'?
In asm3 hierarchy, the constraint that is constraining AssyA and AssB will be put in their parent assembly, so there is no need to repeatedly showing the same constraint in different places.

You idea requires the constraint to be put into the involving parts, so it has to be repeated shown in all the involved parts. That is fine. This is effectively what Assembly2 is doing, and I believe some other CADs, too. The problem, however, is when the same part, lets say a screw, is used in multiple places. However are you going to organize the constraints? What Assembly2 does is that each instance is effectively a flattened copy of the original part, and each copy serves as the container holding only the constraint that involve this particular instance. The downside of this implementation is obvious, as you've mentioned, updating the component requires extra time. Especially for part like screw that is often used hundreds of times. Another subtle problem is the trouble you will be facing when the constraining element reference is lost due model changes, especially if the change happened deep in the original part's sub-assembly hierarchy. In fact, solving this subtle problem is the biggest motivation of asm3.

asm3 uses link which requires almost no update time. You can even dynamically change the type of screw as you wish with barely any computation required. The downside of this is that there is no easy way to override instances children, meaning that you can't group a different constraint under each instance of the part. For that you'll need to make each instance a dedicated container, with one more extra hierarchy like I shown in the code snippet.

But hey, I have no experience of using other CAD. I am actually curious of how other CAD can handle the subtle problem I mentioned, for example to replace a part like this. The 'non-mainstream' hierarchy, as you put, used in asm3 is designed from the beginning in order to do operation like this.
Try Assembly3 with my custom build of FreeCAD at here.
And if you'd like to show your support, you can donate through patreon, liberapay, or paypal
triplus
Veteran
Posts: 9471
Joined: Mon Dec 12, 2011 4:45 pm

Re: Assembly3 preview

Post by triplus »

jpg87 wrote: Thu Jun 21, 2018 6:44 pm Hello,
I have the pleasure to show you this small wind turbine model designed entirely with PartDesign 0.17 and 0.18 and assembled with A3 (several levels of subassemblies).
Nice.
Jee-Bee
Veteran
Posts: 2566
Joined: Tue Jun 16, 2015 10:32 am
Location: Netherlands

Re: Assembly3 preview

Post by Jee-Bee »

realthunder wrote: Fri Jun 22, 2018 3:35 pm
Jee-Bee wrote: Fri Jun 22, 2018 11:12 am I don't know if this is best place to quote...
I have added how creo handle the structure of parts in an assembly.
Could you please give some brief description of the meaning of those Sets items? Are these constraint applying to the bodies inside its owner part, or for inter-relationship between the sibling parts?
The sets have i think a different meaning. I can create a family table with let say 3 different extrudes for a certain function. In the family table i have tree instances one for every instance.
for a part/ subassembly i can create 3 different sets for the placement of the part/ subassembly one for every extrude.
Now i can create in every instance the corresponding set. the tree sets don't have necessary fit all in the master.

I use it most for creating a placement with constraints. than add coordinate system in a skeleton part on the position of the coordinate origin of the part. than change the relation to the skeleton origin. add constraint between the previous made coordinate system and the part coordinate system (in a new set) and check when switching the part is moving.
User avatar
jpg87
Posts: 809
Joined: Thu Mar 16, 2017 7:16 am
Location: Limoges - France
Contact:

Re: Assembly3 preview

Post by jpg87 »

Hello everyone,
Sorry for my late response ...
easyw-fc wrote: Thu Jun 21, 2018 7:27 pm Very nice!
...
you can use this macro that @realthunder gave me, to convert the A3 assembly into an 'old style' Part assembly.
Thank you. I tested the macro, but for several levels of assembly, there are malfunctions.

realthunder wrote: Thu Jun 21, 2018 11:53 pm That is most likely a bug. I'd appreciate if you can post a file to demonstrate this problem. Or, since the problem is gone after reopen the file, maybe recall the steps triggering this problem.
I took part of my assembly and made a test tutorial that I join in pdf with the concerned FC files.
The problems I have reported begin with the actions described in paragraphs 43-44.
I made this tutorial essay to try to create a little more enthusiasm among my French compatriots for your excellent work.
If testers want to validate it or make comments, I'll be delighted.

...you can change the 'BuildShape' property of an assembly to 'Compound', and then TechDraw will have no problem with it.
I have the same problem with the macro: for several levels of assembly, there are malfunctions.

triplus wrote: Sat Jun 23, 2018 2:14 pm Nice.
Thank you. If you want to test my tutorial essay ...

FC Files : https://www.dropbox.com/s/lhzczm52ekc59 ... 3.zip?dl=0
all pdf in one :https://www.dropbox.com/s/kkjrmx9d4lgxg ... n.pdf?dl=0
Attachments
Asm3_essai_methodo_En3.pdf
(620.25 KiB) Downloaded 115 times
Asm3_essai_methodo_En2.pdf
(914.18 KiB) Downloaded 85 times
Asm3_essai_methodo_En1.pdf
(547.62 KiB) Downloaded 101 times
Last edited by jpg87 on Thu Jun 28, 2018 7:09 am, edited 1 time in total.
My website : http://help-freecad-jpg87.fr updated 2023/11/06
User avatar
OakLD
Posts: 131
Joined: Fri Jan 12, 2018 7:38 pm
Location: Brno

Re: Assembly3 preview

Post by OakLD »

realthunder wrote: Sat Jun 23, 2018 9:00 am
OakLD wrote: Sat Jun 23, 2018 6:46 am Would you please explain me, how can a constraint be shared? This is where I'm lost completely.
I'd start with AssyA constrained to AssyB and there would be a link assembly AssyB' placed in a different possition then AssyB and constraint to AssyA. That's what I understand, you're explaining. How can be constraint A-B be the same as A-B'?
In asm3 hierarchy, the constraint that is constraining AssyA and AssB will be put in their parent assembly, so there is no need to repeatedly showing the same constraint in different places.
I think I finally understand your point, I followed the Link Assembly tutorial to reproduce your result. It confirmed what I thought and that is that your method does not produce less constraints (as minimum possible is used in either case).
By the way, I think that the design you did is really good, seems pretty robust to me. This is what I got from your tutorial:
TestingLinks.PNG
TestingLinks.PNG (81.34 KiB) Viewed 2272 times
What I mean to present to user in such case would be:
LinkAssembly2.png
LinkAssembly2.png (52.88 KiB) Viewed 2272 times
So, I wouldn't change a hair on your design, just presented relevant information to the user. Perhaps ther could be more schemes in future for different style of work (regular, multi-body, in-place-editing).
realthunder wrote: Sat Jun 23, 2018 9:00 amYou idea requires the constraint to be put into the involving parts, so it has to be repeated shown in all the involved parts. That is fine. This is effectively what Assembly2 is doing, and I believe some other CADs, too. The problem, however, is when the same part, lets say a screw, is used in multiple places. However are you going to organize the constraints? What Assembly2 does is that each instance is effectively a flattened copy of the original part, and each copy serves as the container holding only the constraint that involve this particular instance. The downside of this implementation is obvious, as you've mentioned, updating the component requires extra time. Especially for part like screw that is often used hundreds of times. Another subtle problem is the trouble you will be facing when the constraining element reference is lost due model changes, especially if the change happened deep in the original part's sub-assembly hierarchy. In fact, solving this subtle problem is the biggest motivation of asm3.
Yes, that is pretty much right, except as shown above, I don't really see any reduction in constraint numbers.
realthunder wrote: Sat Jun 23, 2018 9:00 amasm3 uses link which requires almost no update time. You can even dynamically change the type of screw as you wish with barely any computation required.
I believe it's similar in other software too, because sub-assemblies are out of scope and it is recalculating only actual assembly. Even Assembly2 works this way (I think, because it has never broken subassembly, while often breaking the assembly itself).
There was, in SolidEdge, also a possibility to replace an assembly and it worked fairly well on similar assemblies.
realthunder wrote: Sat Jun 23, 2018 9:00 amThe downside of this is that there is no easy way to override instances children, meaning that you can't group a different constraint under each instance of the part. For that you'll need to make each instance a dedicated container, with one more extra hierarchy like I shown in the code snippet.
I don't get the last bit about one more extra hierarchy.

But hey, I have no experience of using other CAD. I am actually curious of how other CAD can handle the subtle problem I mentioned, for example to replace a part like this. The 'non-mainstream' hierarchy, as you put, used in asm3 is designed from the beginning in order to do operation like this.[/quote]

I think SolidWorks calls constraints "Mates" and groups them into one separate container too, but they're higlighted quite sensibly. I can't remember how it was done in SolidEdge (even thought I spent with it few years :-)), but I know that I had no trouble to get relevant constraints, I think they were grouped within part container. I can get more details about SolidWorks in about a week after holidays, we have it in our company... I'll get also Invertor constraining details off my friend, who has a little company and uses it for years. I hope it will help.
Regards,

Oak
realthunder
Veteran
Posts: 2190
Joined: Tue Jan 03, 2017 10:55 am

Re: Assembly3 preview

Post by realthunder »

jpg87 wrote: Mon Jun 25, 2018 9:41 pm I took part of my assembly and made a test tutorial that I join in pdf with the concerned FC files.
Thanks. I am so glad to have tests like you. And I'll fixed the problem soon.
Try Assembly3 with my custom build of FreeCAD at here.
And if you'd like to show your support, you can donate through patreon, liberapay, or paypal
realthunder
Veteran
Posts: 2190
Joined: Tue Jan 03, 2017 10:55 am

Re: Assembly3 preview

Post by realthunder »

OakLD wrote: Mon Jun 25, 2018 9:41 pm By the way, I think that the design you did is really good, seems pretty robust to me. This is what I got from your tutorial:
Thanks. There is a small difference, though. With my scheme, all link elements in the array contain the exact same constraints, so it is possible to collapse the array without showing individual element objects. You can do so by changing the `ShowElement` property in `Link_Assembly` to False, and then Link_Assembly will now have only one child, but still have 4 elements in the 3D view. This doesn't make much difference for this small tutorial, but imagine a big one with lots of duplicated instances. If you follow the STEP discussion in this post, you'll see that the collapsed link array feature is a very effective acceleration for huge assembly.

OakLD wrote: Mon Jun 25, 2018 9:41 pm
realthunder wrote: ↑
Sat Jun 23, 2018 5:00 pm
asm3 uses link which requires almost no update time. You can even dynamically change the type of screw as you wish with barely any computation required.
I believe it's similar in other software too, because sub-assemblies are out of scope and it is recalculating only actual assembly. Even Assembly2 works this way (I think, because it has never broken subassembly, while often breaking the assembly itself).
What I meant is if you change a part in the deep level sub-assembly. For example, change a fusion object in a sub-assembly 4 levels down, the update time of the upper assemblies is potentially significant for implementations like Assembly2, and lots of constraint element changes are expected, too. But in asm3, constraining element is a multi-level link that links all the way to the deep level geometry model object. If you change the model at some deep level, you only need to change the element link at the same level. The elements in upper level assemblies are not affected.
Try Assembly3 with my custom build of FreeCAD at here.
And if you'd like to show your support, you can donate through patreon, liberapay, or paypal
Post Reply