## FC#3006: PartDesign Mirrored bugs

About the development of the Part Design module/workbench. PLEASE DO NOT POST HELP REQUESTS HERE!
kkremitzki
Posts: 2168
Joined: Thu Mar 03, 2016 9:52 pm
Location: Texas

### FC#3006: PartDesign Mirrored bugs

Hi, so I'm working on this issue and just wanted to create a thread to get some feedback.

First question:

I'm assuming it must be a mistake.

Anyway, I believe one of the core issues here may be an OCC bug, or at least a misuse of OCC, here and here.

Reference:
void gp_Trsf::SetMirror ( const gp_Ax2 & A2)

My test case is simple: I'm using a 1mm x 1mm square sketch, cornered at the origin and padded up 1mm, so a unit cube in the +X,+Y,+Z octant. So my gp_Pnt axbase is always (0, 0, 0).

If I reverse the inversion in my first link, I get the following results:
Mirror about vertical sketch axis (Y): axdir is (0, 1, 0). So, the mirror matrix should be [[-1, 0, 0], [0, 1, 0], [0, 0, 1]]. However the Z-direction ends up being negative.

Mirror about horizontal sketch axis (X): axdir is (1, 0, 0), ok. But the mirror matrix is [[1, 0, 0], [0, -1, 0], [0, 0,-1]] as above. The Z direction is negative when it shouldn't be.

Repeat this with sketches attached to the YZ and XZ planes, and always the corresponding normal is reversed. (So what should be X is -X, and what should be Y is -Y, respectively.)

So, this is obviously a problem. It got me thinking, though. Is this a problem with handedness/chirality of coordinate systems, and the fact that we're trying to mirror? In OCC, gp_Ax2 is a right-handed coordinate system only. There is a separate class, gp_Ax3, that can be left-handed, but then there is no gp_Trsf::SetMirror( const gp_Ax3& A3 )...
Like my FreeCAD work? I'd appreciate any level of support via Patreon, Liberapay, or PayPal! Read more about what I do at my blog.
abdullah
Posts: 3583
Joined: Sun May 04, 2014 3:16 pm

### Re: FC#3006: PartDesign Mirrored bugs

kkremitzki wrote:Hi, so I'm working on this issue and just wanted to create a thread to get some feedback.

As part of "mirrored feature does not intersect support" error when touching, I am working on: Part::checkIntersection last section non-manyfold detection:

Code: Select all

``````    //non manifold condition. 1 has to be a face
for (int index = 1; index < extrema.NbSolution() + 1; ++index)
{
if (extrema.SupportTypeShape1(index) == BRepExtrema_IsInFace || extrema.SupportTypeShape2(index) == BRepExtrema_IsInFace)
return true;
}

return false;
}
else
return false;
``````
I will likely come to your questions later. I won't interfere in Mirrored Feature code.
abdullah
Posts: 3583
Joined: Sun May 04, 2014 3:16 pm

### Re: FC#3006: PartDesign Mirrored bugs

I'm assuming it must be a mistake.
Definitely a mistake. It explains why I always have to select the axis I do not want to get what I want
abdullah
Posts: 3583
Joined: Sun May 04, 2014 3:16 pm

### Re: FC#3006: PartDesign Mirrored bugs

kkremitzki wrote:
Thu Jun 01, 2017 5:34 am
So, this is obviously a problem. It got me thinking, though. Is this a problem with handedness/chirality of coordinate systems, and the fact that we're trying to mirror? In OCC, gp_Ax2 is a right-handed coordinate system only. There is a separate class, gp_Ax3, that can be left-handed, but then there is no gp_Trsf::SetMirror( const gp_Ax3& A3 )...
It seems to be just a visualization problem in the mesh (the red thing the screenshoots).

When the transformation succeeds, there is no inversion (but then you do not see the red mesh, because that is only when it fails). When it fails (for other reasons, like misdetection by Part::CheckIntersection), this inverted red thing appears, making you think the inversion is causing the transformation to fail. However, in my tests the transformation fails for other reasons (at least in some of my examples).

If you want to test this, you can do this:

Code: Select all

``````bool Part::checkIntersection(const TopoDS_Shape& first, const TopoDS_Shape& second,
const bool quick, const bool touch_is_intersection) {

return true;
}
``````
If you confirm my findings. Then the thing to fix is the ViewProvider...
abdullah
Posts: 3583
Joined: Sun May 04, 2014 3:16 pm

### Re: FC#3006: PartDesign Mirrored bugs

I want to document this problem:

A point on object constraint in the sketcher, in a first solve, reaches a precision of 2E-7, whereas precision::confusion is 1e-7. The mirroring feature fails. See case:
example_sketcher_confusion.png (2.62 KiB) Viewed 1348 times
I just open the sketcher and try to drag the point (the one with the Point on object constraint) to the -x axis (so as to try to make it closer from the mirroring feature that would be done). Close sketch and the mirroring feature success.

Problem: The Sketcher should increase its precision (we know it is not straight-forward, but still).
pdn_mirror_failure1.png (9.25 KiB) Viewed 1348 times
abdullah
Posts: 3583
Joined: Sun May 04, 2014 3:16 pm

### Re: FC#3006: PartDesign Mirrored bugs

Definitely, the culprit of Mirroring not working properly is Part::checkIntersection. The red mesh is wrongly represented in the ViewProvider ("inverted" and if the mistake Kurt identified is corrected, then also it makes the horizontal mirror when asking for the vertical mirror and vice versa).
abdullah
Posts: 3583
Joined: Sun May 04, 2014 3:16 pm

### Re: FC#3006: PartDesign Mirrored bugs

checkIntersection is also the only reason why a multitransform can not be used to make a full part from a quarter:
multitransform_mirror_mirror.png (10.41 KiB) Viewed 1345 times
bypassing it:
pdn_mirror_mirror_success.png (14.06 KiB) Viewed 1345 times
Note: The in the first image the "non-manifold" test was already by passed. For the second, the whole checkIntersection was bypassed (it was giving a minimum distance of "7" mm?, probably was not measuring the right "shapes" as there are two original and two results).
kkremitzki
Posts: 2168
Joined: Thu Mar 03, 2016 9:52 pm
Location: Texas

### Re: FC#3006: PartDesign Mirrored bugs

Here's my test case btw:
Attachments
pdtest1.fcstd
Like my FreeCAD work? I'd appreciate any level of support via Patreon, Liberapay, or PayPal! Read more about what I do at my blog.
kkremitzki
Posts: 2168
Joined: Thu Mar 03, 2016 9:52 pm
Location: Texas

### Re: FC#3006: PartDesign Mirrored bugs

The unit test I added BTW should be failing when checkIntersection is set to return true, but it isn't.

This needs to be changed to be >= 1.0