Tue, 03/01/2022 - 10:37
Hello,
For 99% of my STEP files, I use the conversion from the static interface:
Interface_Static::SetCVal("xstep.cascade.unit", "M")
And the BRepMesh_IncrementalMesh and it works as expected.
For some reason, I have a STEP file composed of an assembly of shells, and meshing fails as all triangulations are Null for all faces.
Strangely if I comment the static interface or set it to "MM", meshing/triangulation works and everything is fine.
Is there a new option for converting to Meters ?
NOTE: CAD Assistant opens 100% of my files, so I'm pretty sure this is a missing option of a bug.
Tue, 03/01/2022 - 11:19
OCCT 7.6 has introduced a new interface for managing length units conversion while importing into XCAF document as alternative to previously used "xstep.cascade.unit" (which is still supported for backward compatibility) - XCAFDoc_DocumentTool::SetLengthUnit().
You may play with length units in CAD Assistant as well - see "System units" in "Import/Export options" in Settings.
This might happen when model becomes smaller than global constants like Precision::Confusion() and similar, used by OCCT algorithms as smallest allowed tolerance values. You should be careful to use different length units due to these side effects and select units suitable for your real models considering these global OCCT constants. E.g. it is likely not a bug of BRepMesh_IncrementalMesh or other OCCT, but a limitation by design.
Tue, 03/01/2022 - 16:51
Thanks for your answer. I tried to use this new fonction and the result is the same.
For both STEPs that work/dont work, the unit is mm.
Another info:
Both STEP are about 10-30cm long, so no small parts that would get below Confusion();
For the STEP that is not working, which is made of a few parts, only one part (shell) seems to cause problems. If I export the STEP without this shell, then the meshing works with/without unit conversion. As soon as there this shell part, meshing only works if I don't do any conversion using both of the above method (and read it as plain mm). Confusion() is on me :)
Tue, 03/01/2022 - 17:32
Sorry if my description looked confusing - I didn't meant the size of entire part, but the lower-level geometry and topology definition, like distances between B-Spline nodes, vertex/edge/face tolerances, etc.
Wed, 03/02/2022 - 18:55
Ok that clearer then.
Another test:
- Loading a STEP in mm units , checking with XCAFDoc_DocumentTool::GetLengthUnit(doc, conv_val) gives conv_val=0.001, Fine
- Loading a STEP in m unites, checking with XCAFDoc_DocumentTool::GetLengthUnit(doc, conv_val) gives conv_val=0.001, Very strange !
- Loading a STEP in mm units , checking with XCAFDoc_DocumentTool::GetLengthUnit(doc, conv_val, UnitsMethods_LengthUnit_Meter) gives conv_val=0.001, Fine
- Loading a STEP in m unites, checking with XCAFDoc_DocumentTool::GetLengthUnit(doc, conv_val, UnitsMethods_LengthUnit_Meter) gives conv_val=0.001, Very strange !
Wed, 03/02/2022 - 19:58
What does it mean?
Wed, 03/02/2022 - 20:35
Loading a document that was exported from Fusion360 with Meters as the document unit.
A simple cube of 1000mx500mmx250mm has cartesian points like this :
#156=CARTESIAN_POINT('',(0.,0.,0.));
#157=CARTESIAN_POINT('Origin',(1.,0.5,0.));
#158=CARTESIAN_POINT('',(1.,0.5,0.));
#159=CARTESIAN_POINT('',(0.,0.5,0.));
#160=CARTESIAN_POINT('',(1.,0.5,0.));
#161=CARTESIAN_POINT('',(0.,0.5,0.25));
1m, 0.5m, 0.25m.
It seams that the STEPCAFControl_Reader does not seem to catch the unit in the file, causing bad conversions, tiny edges etc..
Wed, 03/02/2022 - 22:06
You are exporting exactly the same model - why would you expect different import results?
XCAFDoc_DocumentTool::GetLengthUnit() has nothing to do with the length units of imported file, it defines units into which file should be converted during import process. So reported value wouldn't change until you will call SetLengthUnit() or similar method.
Thu, 03/03/2022 - 01:05
Hi,
All file's length and angle units, attached to the entity, should be processed correctly. (they scaled to the system unit).
This case seems very strange. STEPCAFControl_Reader ensures that if the document does not have its own length unit, a global static variable value(scale unit) will be set to the document.
In addition, the STEPCAFControl_Reader sets the used length unit in the document as an attribute. You can always check it out. If in your document exists only MM attribute, MM unit is used for read.
Can you check if the length units exist in the document before read process? By default, a new document does not contain a length units attribute. If the attribute is created by you, or the document is reused, then the static variable will not be used when reading (the attribute has a higher priority).
Additionally, can you check the MASS or AREA of the imported shapes?
Best regards,
Dmitry.
Thu, 11/02/2023 - 16:50
I have the same issue described here.
After reading all this topic, is there any way to get the units defined on a CAD file?
Kind regards,
Lorenzo Navarro