Lattice2 icon indicating copy to clipboard operation
Lattice2 copied to clipboard

Placement has to be attached to edge called Edge1

Open macdroid53 opened this issue 3 years ago • 13 comments

When using the Placement if the support property is set to, for example Edge2, then Edge1 is ignored.

See Placement002 in this file. If the Support is changed to Edge1 the 3rd latch is populated. As it is, set to Edge2, no copy is populated for Edge1.

Lattice2_Placement_on_Edge2.FCStd.zip

macdroid53 avatar Jun 15 '22 13:06 macdroid53

Hi, this is by design, to allow cross-item attachment. For example, if you use Edge1 and Edge2 (which Lattice2 reinterprets as Child2.Edge1) as support, Lattice2 will loop as: Child1.Edge1+Clild2.Edge1, Child2.Edge1+Child3.Edge1. You can switch PlacementSubsequence.CycleMode to Periodic, then the first one will also be included (but appear as the last placement of the array).

DeepSOIC avatar Jun 15 '22 13:06 DeepSOIC

Ok, I thought it might be by design But, what are Child 1 & 2? I'm making that connection...

macdroid53 avatar Jun 15 '22 14:06 macdroid53

The shape of the sketch is a compound of wires, ChildX is a child of that compound (a wire). Each child in your sketch has just 1 edge. If you were to make the L-shape placer sketch, each child will have two edges.

DeepSOIC avatar Jun 15 '22 14:06 DeepSOIC

Excuse me, I've not looked at the way the sketch handles this is quite a while.

So, what associates the 2 edges of the L-shape to a child?

macdroid53 avatar Jun 15 '22 14:06 macdroid53

Sketcher assembles edges into wires by looking at geometrically coincident vertices (the way you constrain it doesn't matter, actual positions do). Also, don't do triple (and higher) connections, they cause broken shapes and unstable edge/vertex numbering. (construction geometry is completely ignored, thankfully)

DeepSOIC avatar Jun 15 '22 15:06 DeepSOIC

I'm sure I don't get the details...

I opened one of the sketches in the example. Added an edge to make up an L-shape. One vertex is on top of the other. When the sketch is closed, the Placement is changed as expected.

But, when I select the sketch, then look at it's details in the selection object (I stop the code running in a debugger), the sketch has now 4 'Part::GeomLineSegment' objects (before it had 3). But, I don't see what indicates there is a parent of two of the segments...

macdroid53 avatar Jun 15 '22 15:06 macdroid53

Part::GeomLineSegment is the content of Geometry property. Lattice2 does not use it, it uses Shape property.

DeepSOIC avatar Jun 15 '22 15:06 DeepSOIC

Use Lattice2's Shape Info to examine shape structure, it was made for that.

Selected 1 subelements:
Vertex2: Vertex ([-14.905163, 35.62737, 4.0])

Selected document object:
  Name = Sketch002
  Label = Sketch002
  Is placement/array = False
Structure: 
Compound (3 objects):
    Wire (1 segments)
    Wire (1 segments)
    Wire (1 segments)

DeepSOIC avatar Jun 15 '22 15:06 DeepSOIC

Aha, I see in my debugger the SubShape.SubShapes has the association between two of the edges.. But, what process made that association?

I'll have a look at the Shape Info here shortly.

macdroid53 avatar Jun 15 '22 16:06 macdroid53

But, what process made that association?

https://github.com/FreeCAD/FreeCAD/blob/e89ebba7369dca5775fd8aa878a0d3c494e6b2ac/src/Mod/Sketcher/App/Sketch.cpp#L4139

DeepSOIC avatar Jun 15 '22 16:06 DeepSOIC

Ok, so that's a sort of base process.

Thanks...I hope I haven't asked too many questions. I appreciate your patience.

macdroid53 avatar Jun 15 '22 16:06 macdroid53

well, they are good questions!

DeepSOIC avatar Jun 15 '22 19:06 DeepSOIC

Thank you, DeepSOIC, for creating this amazing workbench! You are a technical mastermind of which there are only few. Your workbench enables workflows that are complex but which are too cumbersome to do in regular FreeCAD. I also love that you added the PartDesign equivalent of Feature Mirror as Lattice2 Mirror tool! You enable people.

quiret avatar Oct 27 '22 18:10 quiret