realthunder wrote: ↑Thu Jun 21, 2018 11:45 pmThis sounds like a bug. It would be better if you can post a file to demonstrate the problem. And maybe some screencast to show your steps.
I will try to test it more and give some feedback. You have probably noticed, that in the meanwhile user jpg87 experienced the very same thing...
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pm
2. Positioning
You can either a) turn off auto recompute, and use mover to (roughly) pre-align the part to your desired configuration, and then hit recompute button, or b) turn on auto recompute, and use mover to rotate the part. When rotate pass some threshold, it will flip. What the software does behind the scene is that, it will move the part with your mouse, and call the solver. If the solver fail (which is made silent and hidden from user), the part position will be reset. So the end user won't see the movement, but it does move behind the scene, kind of like method a), and I believe that is how SolveSpace handle this, too.
I tried that sometimes with mixed results, I failed to identify the case with solver silently giving up. Now I know it's a valid workflow, I test it this way.
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pm
3. Tree - Assembly --> Parts --> Constraints --> Constrained Elements
You suggestion will not work well in nested assemblies. Remember that a 'part' can be repeatedly used in many different places, say a screw. The screw has the same geometry element for constraining with others, but each instance will certainly connect to an element of a different part. In other word, one of the elements in the constraint will be different each time the instance is used, so it cannot be grouped with the 'part'.
There's a little misunderstanding, perhaps. The parts shown in mockup tree are not source parts, but of course their instances (as well as parts in your Parts container); you can see there STIFFENER and STIFFENER001 and similar cases. Thus, "STIFFENER.Face2" is short (
visual representation only) for a more complicated link like perhaps "Parts.Link0009.Pad.Face2" (the same you store in the real link).
There's another "issue" with this model: The constraints shown become duplicated. They're placed at both parts they're constraining. But this is OK, most users are used to that from another CAD/CAE packages and again, it is only
visual representation of the parts, constraints and their elements. There's always just one real constraint behind the two constraints shown.
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pm
The logic of my assembly's grouping is this. The constraint group groups the configuration of its owner assembly. The element group groups which element the owner assembly can be constrained with other higher level assemblies. The proper way of doing assembly, IMO, is to put each part object into an assembly container, even though the part itself do not need any assembling. Because in A3, assembly container serves a double purpose of part container.
I think that your design is pretty neat and totally agree with placing parts into assembly containers.
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pmThen, the part author should manually specify which geometry element this part can be connected to, and give them meaningful names.
Here, my humble opinion differs. I agree that without naming each constraint, the current tree quickly becomes very difficult to use, because one cannot find the constraint he needs (I had big problems with the small tree for the relatively small assembly shown above). I wouldn't introduce manual naming; why to spend time on something, which is not nessecary You could force naming convention like i.e. <constraintName_Part1-Part2>, but I think it wouldn't make things completely clear. When you'll have 50 or 100 constraints, it wil become a nightmare to look for the one you want to edit. I'd say it's way easier, when it's grouped under a part instance node.
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pmRepeat this process to create composite parts that contain sub-assemblies. When assembling, only connect the parts at their declared elements. I probably should add a property to optionally enforce this behavior (i.e. let the part author decide). The above workflow is not strictly enforced, in case the user just want some quick single hierarchy assembling. But for mult-hierarchy assembling, it will quickly become hard to track without some 'rules', or 'workflows', or whatever.
I'm completely lost, perhaps I'm missing some point. From the previous discussions, I got a sense that to achieve multi-level assemblies, simply assemblies could be placed within another assembly container (I didn't test it in detail yet), it would receive same constraints as parts (though technically, the object path would be more complicated) and I see no obstacles in the proposed tree. It is not necessary for a user to know, that the assembly he constrained with 3 constraints are in reality 3 constraints applied to 3 different parts.
IMHO, from past front-end experience I think that, CAD/CAEs consider inserted (sub)assembly as a "solid" or "locked" object and don't try to resolve subassembly constraints in the same context (mathematically meanin the same formulae), as the parent assembly. I'm not sure how FC handles that, but from your explanation I have a notion that you put all the constraints from all the levels into one context (so solver would try to handle
all the constraints in one solution). Is this the case and the reason of your concern?
Again, what I propose is a visual representation (front-end) anyway, it wouldn't change a thing on the design... I think in the low/object level (back-end) it is necessary to do it the way you did or likewise.
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pmFinally, there is a way to trace the element to its owner part. When A3 workbench is active, right click the element of the constraint in the tree view, and choose 'Link actions -> Select linked object'. This will locate the element in the sub assembly's element group. In case there are more hierarchy down below, use 'Select linked object' again to go down. If you want to jump straight to the final geometry model object that actually owns the geometry element of the constraint, then choose 'Link actions -> Select final linked object'.
Thanks, this works for selecting a link.
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pm
4. "Redundant Constraints" message
If you see this message, then there is definitely redundancy. It is not always intuitive, but if you carefully count the DOFs, you'll see. But yeah, I probably should not make that as a warning message.
Well, you're right, I counted them and with typical 3x PlaneAlignment setup, 2nd pane alignment has 1 redundant DOF constraint and 3rd has 2 redundants. I'd still suggest to hide the message in this
valid case, because it's the mainstrem realworld workflow...
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pm
5. Drawing
I'll add that support in Techdraw later.
Great and in the meanwhile, the workaround is to merge it as you pointed out in the point 6 below. Works fine!
realthunder wrote: ↑Thu Jun 21, 2018 11:45 pm
6. Merging - is there or would there be a way to merge particular parts ("bodies") into one body, when assembled this way? One reason for that I can imagine is a FEM analysis, where one wants to assess a body with ribs and brackets as a one solid thing...
Switch to Part workbench. Select the assembly you want to merge in the tree view. In the Main window menu, select 'Part -> Create a copy -> Create simple copy'. You will get a single Shape of that assembly.
Works like charm!
One more thing I wonder about is the necessity to open all the drawing, whem making an assembly. I think, while it's OK for development, it would be a real complication for regular use. I believe that all the CAE SW I worked with (SolidEdge SolidWorks, Catia) are able to load from each component only relevant information, a sort of STEP representation of the part, without history, internal relations and constraints, etc. This is loaded only into RAM and is not exposed to user other than as a part model in the assembly. A "refresh" button then reloads the STEP-like representation and re-applies the constraints. I can't imagine other way, specifically I can't image a feasible way to handle i.e. multi-level assembly with 100 parts in total as it is now (with opened files, full history, possibly all the details like drawings, FEA analysis, path solutions,...).
I just wonder, if you considered it when designing the assemblies object model or what is the long-term plan?