View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0032132 | Community | OCCT:Data Exchange | public | 2021-02-15 21:55 | 2022-05-02 10:20 |
Reporter | geuzaine | Assigned To | gka | ||
Priority | normal | Severity | minor | ||
Status | new | Resolution | open | ||
Product Version | 7.5.0 | ||||
Summary | 0032132: Data Exchange - STEP export duplicates surfaces, leading to non-conformal geometry | ||||
Description | Dear OCCT team, When I import a BREP file that contains several solids that share faces, then export it as STEP, the STEP file duplicates the shared faces, leading to a non-conformal (topologically) model. I've tried the various STEP export modes, but so far without success. Is this a know issue/limitation of the STEP exporter? Thanks, Christophe | ||||
Steps To Reproduce | Compile and run the following C++ code, which loads a BREP file (input.brep - attached to this report) and outputs both BREP (output.brep) and STEP (output.step) files :// g++ io.cpp -I/usr/local/occt/include/opencascade -L/usr/local/occt/lib -lTKSTEP -lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKXSBase -lTKShHealing -lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d -lTKMath -lTKernel -lfreetype #include <BRep_Builder.hxx> #include <BRepTools.hxx> #include <STEPControl_Writer.hxx> int main() { TopoDS_Shape shape; BRep_Builder builder; BRepTools::Read(shape, "input.brep", builder); BRepTools::Write(shape, "output.brep"); STEPControl_Writer writer; writer.Transfer(shape, STEPControl_AsIs); writer.Write("output.step"); return 0; } The output STEP file contains duplicate surfaces, while the output BREP file is correct. | ||||
Additional information and documentation updates | See e.g. https://gitlab.onelab.info/gmsh/gmsh/-/issues/906 for a related bug report in Gmsh. | ||||
Tags | No tags attached. | ||||
Test case number | |||||
|
input.brep (47,079 bytes) |
|
Maybe parameters "write.step.nonmanifold" and "read.step.nonmanifold" might be helpful.pload XDE MODELING restore input.brep i testwritestep i1.stp i testreadstep i1.stp i1 param write.step.nonmanifold 1 param read.step.nonmanifold 1 testwritestep i2.stp i testreadstep i2.stp i2 |
|
I've tried the various options listed here https://dev.opencascade.org/doc/refman/html/_s_t_e_p_control___step_model_type_8hxx.html#a032affe8dae498d429a83225f8c5da4e but none produced a file with non-duplicated faces (and some just fail). What are the C++ options that correspond to write.step.nonmanifold/read.step.nonmanifold? If there are no direct equivalents, could you attach your files i1.stp and i2.stp so I could examine them? |
|
i1.stp (391,581 bytes) |
|
i2.stp (268,787 bytes) |
|
> What are the C++ options that correspond to write.step.nonmanifold/read.step.nonmanifold? STEP/IGES parameters are managed via Interface_Static interface (exposed by "param" command in Draw Harness) - something like that: STEPCAFControl_Controller::Init(); STEPControl_Controller::Init(); Interface_Static::SetIVal ("write.step.nonmanifold", 1); Interface_Static::SetIVal ("read.step.nonmanifold", 1); |
|
output.step (262,453 bytes) |
|
I've attached the output.step file that I obtain after modifying the test-case to set the global "write.step.nonmanifold" option:// g++ io.cpp -I/usr/local/occt/include/opencascade -L/usr/local/occt/lib -lTKSTEP -lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKXSBase -lTKShHealing -lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d -lTKMath -lTKernel -lfreetype #include <BRepTools.hxx> #include <BRep_Builder.hxx> #include <Interface_Static.hxx> #include <STEPControl_Controller.hxx> #include <STEPControl_Writer.hxx> int main() { TopoDS_Shape shape; BRep_Builder builder; BRepTools::Read(shape, "input.brep", builder); BRepTools::Write(shape, "output.brep"); STEPControl_Controller::Init(); Interface_Static::SetIVal("write.step.nonmanifold", 1); STEPControl_Writer writer; writer.Transfer(shape, STEPControl_AsIs); writer.Write("output.step"); return 0; } Unfortunately the new STEP output file now only contains 11 volumes (instead if 12). |
|
> Unfortunately the new STEP output file now only contains 11 volumes (instead if 12). How you've counted them? Have you used > Interface_Static::SetIVal ("read.step.nonmanifold", 1); option to read STEP back? |
|
Yes, I've tried both with and without setting "read.step.nonmanifold". Here's the updated test-case so you can directly give it a try on your side:// g++ io.cpp -I/usr/local/occt/include/opencascade -L/usr/local/occt/lib -lTKSTEP -lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKXSBase -lTKShHealing -lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d -lTKMath -lTKernel -lfreetype #include <iostream> #include <BRepTools.hxx> #include <BRep_Builder.hxx> #include <Interface_Static.hxx> #include <STEPControl_Controller.hxx> #include <STEPControl_Writer.hxx> #include <STEPControl_Reader.hxx> #include <TopExp_Explorer.hxx> int main() { TopoDS_Shape shape; BRep_Builder builder; BRepTools::Read(shape, "input.brep", builder); TopExp_Explorer exp; int in = 0; for(exp.Init(shape, TopAbs_SOLID); exp.More(); exp.Next()) in++; BRepTools::Write(shape, "output.brep"); STEPControl_Controller::Init(); Interface_Static::SetIVal("write.step.nonmanifold", 1); STEPControl_Writer writer; writer.Transfer(shape, STEPControl_AsIs); writer.Write("output.step"); Interface_Static::SetIVal("read.step.nonmanifold", 1); STEPControl_Reader reader; reader.ReadFile("output.step"); reader.NbRootsForTransfer(); reader.TransferRoots(); TopoDS_Shape result = reader.OneShape(); int out = 0; for(exp.Init(result, TopAbs_SOLID); exp.More(); exp.Next()) out++; std::cout << in << " input solids, " << out << " output solids\n"; return 0; } |
|
Here's a downstream bug report that I think stems from this issue: https://github.com/CadQuery/cadquery/issues/697 Is there anything we can do to work around the problem today? Incorrect step file generation feels like an important issue (to me personally). |
|
grey.christoforo, > Here's a downstream bug report that I think stems from this issue I may be wrong, but I don't see how your issue is relevant to this one. Please register a dedicated bug - if it will be found that these bugs correlate to each other, this can be indicated later via bugs relations. |
|
Any news about this? The issue is exactly the same as the one discussed here: This issue https://dev.opencascade.org/content/saving-compsolid-object |
Date Modified | Username | Field | Change |
---|---|---|---|
2021-02-15 21:55 | geuzaine | New Issue | |
2021-02-15 21:55 | geuzaine | Assigned To | => gka |
2021-02-15 21:55 | geuzaine | File Added: input.brep | |
2021-02-15 22:01 | kgv | Summary | STEP export duplicates surfaces, leading to non-conformal geometry => Data Exchange - STEP export duplicates surfaces, leading to non-conformal geometry |
2021-02-15 22:01 | kgv | Steps to Reproduce Updated | |
2021-02-15 22:08 | kgv | Relationship added | related to 0025092 |
2021-02-16 12:26 | kgv | Note Added: 0098888 | |
2021-02-16 14:47 | geuzaine | Note Added: 0098891 | |
2021-02-16 14:48 | geuzaine | Note Edited: 0098891 | |
2021-02-16 14:49 | kgv | File Added: i1.stp | |
2021-02-16 14:49 | kgv | File Added: i2.stp | |
2021-02-16 14:53 | kgv | Note Added: 0098892 | |
2021-02-16 15:53 | geuzaine | File Added: output.step | |
2021-02-16 15:55 | geuzaine | Note Added: 0098896 | |
2021-02-16 16:02 | kgv | Note Added: 0098897 | |
2021-02-16 16:14 | geuzaine | Note Added: 0098898 | |
2021-03-29 14:03 | grey.christoforo_170262 | Note Added: 0099813 | |
2021-03-29 14:18 | kgv | Note Added: 0099814 | |
2021-03-29 14:19 | kgv | Note Edited: 0099814 | |
2022-05-02 10:20 | geuzaine | Note Added: 0108282 |