netgen-mesher 6.2.2506.post35.dev0__cp314-cp314-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- netgen/NgOCC.py +7 -0
- netgen/__init__.py +114 -0
- netgen/__init__.pyi +22 -0
- netgen/__main__.py +53 -0
- netgen/cmake/NetgenConfig.cmake +79 -0
- netgen/cmake/netgen-targets-release.cmake +69 -0
- netgen/cmake/netgen-targets.cmake +146 -0
- netgen/config/__init__.py +1 -0
- netgen/config/__init__.pyi +52 -0
- netgen/config/__main__.py +4 -0
- netgen/config/config.py +68 -0
- netgen/config/config.pyi +54 -0
- netgen/csg.py +25 -0
- netgen/geom2d.py +178 -0
- netgen/gui.py +82 -0
- netgen/include/core/archive.hpp +1256 -0
- netgen/include/core/array.hpp +1760 -0
- netgen/include/core/autodiff.hpp +1131 -0
- netgen/include/core/autodiffdiff.hpp +733 -0
- netgen/include/core/bitarray.hpp +240 -0
- netgen/include/core/concurrentqueue.h +3619 -0
- netgen/include/core/exception.hpp +145 -0
- netgen/include/core/flags.hpp +199 -0
- netgen/include/core/hashtable.hpp +1281 -0
- netgen/include/core/localheap.hpp +318 -0
- netgen/include/core/logging.hpp +117 -0
- netgen/include/core/memtracer.hpp +221 -0
- netgen/include/core/mpi4py_pycapi.h +245 -0
- netgen/include/core/mpi_wrapper.hpp +643 -0
- netgen/include/core/ng_mpi.hpp +94 -0
- netgen/include/core/ng_mpi_generated_declarations.hpp +155 -0
- netgen/include/core/ng_mpi_native.hpp +25 -0
- netgen/include/core/ngcore.hpp +32 -0
- netgen/include/core/ngcore_api.hpp +152 -0
- netgen/include/core/ngstream.hpp +115 -0
- netgen/include/core/paje_trace.hpp +279 -0
- netgen/include/core/profiler.hpp +382 -0
- netgen/include/core/python_ngcore.hpp +457 -0
- netgen/include/core/ranges.hpp +109 -0
- netgen/include/core/register_archive.hpp +100 -0
- netgen/include/core/signal.hpp +82 -0
- netgen/include/core/simd.hpp +160 -0
- netgen/include/core/simd_arm64.hpp +407 -0
- netgen/include/core/simd_avx.hpp +394 -0
- netgen/include/core/simd_avx512.hpp +285 -0
- netgen/include/core/simd_generic.hpp +1053 -0
- netgen/include/core/simd_math.hpp +178 -0
- netgen/include/core/simd_sse.hpp +289 -0
- netgen/include/core/statushandler.hpp +37 -0
- netgen/include/core/symboltable.hpp +153 -0
- netgen/include/core/table.hpp +810 -0
- netgen/include/core/taskmanager.hpp +1161 -0
- netgen/include/core/type_traits.hpp +65 -0
- netgen/include/core/utils.hpp +385 -0
- netgen/include/core/version.hpp +102 -0
- netgen/include/core/xbool.hpp +47 -0
- netgen/include/csg/algprim.hpp +563 -0
- netgen/include/csg/brick.hpp +150 -0
- netgen/include/csg/csg.hpp +43 -0
- netgen/include/csg/csgeom.hpp +389 -0
- netgen/include/csg/csgparser.hpp +101 -0
- netgen/include/csg/curve2d.hpp +67 -0
- netgen/include/csg/edgeflw.hpp +112 -0
- netgen/include/csg/explicitcurve2d.hpp +113 -0
- netgen/include/csg/extrusion.hpp +185 -0
- netgen/include/csg/gencyl.hpp +70 -0
- netgen/include/csg/geoml.hpp +16 -0
- netgen/include/csg/identify.hpp +213 -0
- netgen/include/csg/manifold.hpp +29 -0
- netgen/include/csg/meshsurf.hpp +46 -0
- netgen/include/csg/polyhedra.hpp +121 -0
- netgen/include/csg/revolution.hpp +180 -0
- netgen/include/csg/singularref.hpp +84 -0
- netgen/include/csg/solid.hpp +295 -0
- netgen/include/csg/specpoin.hpp +194 -0
- netgen/include/csg/spline3d.hpp +99 -0
- netgen/include/csg/splinesurface.hpp +85 -0
- netgen/include/csg/surface.hpp +394 -0
- netgen/include/csg/triapprox.hpp +63 -0
- netgen/include/csg/vscsg.hpp +34 -0
- netgen/include/general/autodiff.hpp +356 -0
- netgen/include/general/autoptr.hpp +39 -0
- netgen/include/general/gzstream.h +121 -0
- netgen/include/general/hashtabl.hpp +1692 -0
- netgen/include/general/myadt.hpp +48 -0
- netgen/include/general/mystring.hpp +226 -0
- netgen/include/general/netgenout.hpp +205 -0
- netgen/include/general/ngarray.hpp +797 -0
- netgen/include/general/ngbitarray.hpp +149 -0
- netgen/include/general/ngpython.hpp +74 -0
- netgen/include/general/optmem.hpp +44 -0
- netgen/include/general/parthreads.hpp +138 -0
- netgen/include/general/seti.hpp +50 -0
- netgen/include/general/sort.hpp +47 -0
- netgen/include/general/spbita2d.hpp +59 -0
- netgen/include/general/stack.hpp +114 -0
- netgen/include/general/table.hpp +280 -0
- netgen/include/general/template.hpp +509 -0
- netgen/include/geom2d/csg2d.hpp +750 -0
- netgen/include/geom2d/geometry2d.hpp +280 -0
- netgen/include/geom2d/spline2d.hpp +234 -0
- netgen/include/geom2d/vsgeom2d.hpp +28 -0
- netgen/include/gprim/adtree.hpp +1392 -0
- netgen/include/gprim/geom2d.hpp +858 -0
- netgen/include/gprim/geom3d.hpp +749 -0
- netgen/include/gprim/geomfuncs.hpp +212 -0
- netgen/include/gprim/geomobjects.hpp +544 -0
- netgen/include/gprim/geomops.hpp +404 -0
- netgen/include/gprim/geomtest3d.hpp +101 -0
- netgen/include/gprim/gprim.hpp +33 -0
- netgen/include/gprim/spline.hpp +778 -0
- netgen/include/gprim/splinegeometry.hpp +73 -0
- netgen/include/gprim/transform3d.hpp +216 -0
- netgen/include/include/acisgeom.hpp +3 -0
- netgen/include/include/csg.hpp +1 -0
- netgen/include/include/geometry2d.hpp +1 -0
- netgen/include/include/gprim.hpp +1 -0
- netgen/include/include/incopengl.hpp +62 -0
- netgen/include/include/inctcl.hpp +13 -0
- netgen/include/include/incvis.hpp +6 -0
- netgen/include/include/linalg.hpp +1 -0
- netgen/include/include/meshing.hpp +1 -0
- netgen/include/include/myadt.hpp +1 -0
- netgen/include/include/mydefs.hpp +70 -0
- netgen/include/include/mystdlib.h +59 -0
- netgen/include/include/netgen_config.hpp +27 -0
- netgen/include/include/netgen_version.hpp +9 -0
- netgen/include/include/nginterface_v2_impl.hpp +395 -0
- netgen/include/include/ngsimd.hpp +1 -0
- netgen/include/include/occgeom.hpp +1 -0
- netgen/include/include/opti.hpp +1 -0
- netgen/include/include/parallel.hpp +1 -0
- netgen/include/include/stlgeom.hpp +1 -0
- netgen/include/include/visual.hpp +1 -0
- netgen/include/interface/rw_medit.hpp +11 -0
- netgen/include/interface/writeuser.hpp +80 -0
- netgen/include/linalg/densemat.hpp +414 -0
- netgen/include/linalg/linalg.hpp +29 -0
- netgen/include/linalg/opti.hpp +142 -0
- netgen/include/linalg/polynomial.hpp +47 -0
- netgen/include/linalg/vector.hpp +217 -0
- netgen/include/meshing/adfront2.hpp +274 -0
- netgen/include/meshing/adfront3.hpp +332 -0
- netgen/include/meshing/basegeom.hpp +370 -0
- netgen/include/meshing/bcfunctions.hpp +53 -0
- netgen/include/meshing/bisect.hpp +72 -0
- netgen/include/meshing/boundarylayer.hpp +113 -0
- netgen/include/meshing/classifyhpel.hpp +1984 -0
- netgen/include/meshing/clusters.hpp +46 -0
- netgen/include/meshing/curvedelems.hpp +274 -0
- netgen/include/meshing/delaunay2d.hpp +73 -0
- netgen/include/meshing/fieldlines.hpp +103 -0
- netgen/include/meshing/findip.hpp +198 -0
- netgen/include/meshing/findip2.hpp +103 -0
- netgen/include/meshing/geomsearch.hpp +69 -0
- netgen/include/meshing/global.hpp +54 -0
- netgen/include/meshing/hpref_hex.hpp +330 -0
- netgen/include/meshing/hpref_prism.hpp +3405 -0
- netgen/include/meshing/hpref_pyramid.hpp +154 -0
- netgen/include/meshing/hpref_quad.hpp +2082 -0
- netgen/include/meshing/hpref_segm.hpp +122 -0
- netgen/include/meshing/hpref_tet.hpp +4230 -0
- netgen/include/meshing/hpref_trig.hpp +848 -0
- netgen/include/meshing/hprefinement.hpp +366 -0
- netgen/include/meshing/improve2.hpp +178 -0
- netgen/include/meshing/improve3.hpp +151 -0
- netgen/include/meshing/localh.hpp +223 -0
- netgen/include/meshing/meshclass.hpp +1076 -0
- netgen/include/meshing/meshfunc.hpp +47 -0
- netgen/include/meshing/meshing.hpp +63 -0
- netgen/include/meshing/meshing2.hpp +163 -0
- netgen/include/meshing/meshing3.hpp +123 -0
- netgen/include/meshing/meshtool.hpp +90 -0
- netgen/include/meshing/meshtype.hpp +1930 -0
- netgen/include/meshing/msghandler.hpp +62 -0
- netgen/include/meshing/paralleltop.hpp +172 -0
- netgen/include/meshing/python_mesh.hpp +206 -0
- netgen/include/meshing/ruler2.hpp +172 -0
- netgen/include/meshing/ruler3.hpp +211 -0
- netgen/include/meshing/soldata.hpp +141 -0
- netgen/include/meshing/specials.hpp +17 -0
- netgen/include/meshing/surfacegeom.hpp +73 -0
- netgen/include/meshing/topology.hpp +1003 -0
- netgen/include/meshing/validate.hpp +21 -0
- netgen/include/meshing/visual_interface.hpp +71 -0
- netgen/include/mydefs.hpp +70 -0
- netgen/include/nginterface.h +474 -0
- netgen/include/nginterface_v2.hpp +406 -0
- netgen/include/nglib.h +697 -0
- netgen/include/nglib_occ.h +50 -0
- netgen/include/occ/occ_edge.hpp +47 -0
- netgen/include/occ/occ_face.hpp +52 -0
- netgen/include/occ/occ_solid.hpp +23 -0
- netgen/include/occ/occ_utils.hpp +376 -0
- netgen/include/occ/occ_vertex.hpp +30 -0
- netgen/include/occ/occgeom.hpp +659 -0
- netgen/include/occ/occmeshsurf.hpp +168 -0
- netgen/include/occ/vsocc.hpp +33 -0
- netgen/include/pybind11/LICENSE +29 -0
- netgen/include/pybind11/attr.h +722 -0
- netgen/include/pybind11/buffer_info.h +208 -0
- netgen/include/pybind11/cast.h +2361 -0
- netgen/include/pybind11/chrono.h +228 -0
- netgen/include/pybind11/common.h +2 -0
- netgen/include/pybind11/complex.h +74 -0
- netgen/include/pybind11/conduit/README.txt +15 -0
- netgen/include/pybind11/conduit/pybind11_conduit_v1.h +116 -0
- netgen/include/pybind11/conduit/pybind11_platform_abi_id.h +87 -0
- netgen/include/pybind11/conduit/wrap_include_python_h.h +72 -0
- netgen/include/pybind11/critical_section.h +56 -0
- netgen/include/pybind11/detail/class.h +823 -0
- netgen/include/pybind11/detail/common.h +1348 -0
- netgen/include/pybind11/detail/cpp_conduit.h +75 -0
- netgen/include/pybind11/detail/descr.h +226 -0
- netgen/include/pybind11/detail/dynamic_raw_ptr_cast_if_possible.h +39 -0
- netgen/include/pybind11/detail/exception_translation.h +71 -0
- netgen/include/pybind11/detail/function_record_pyobject.h +191 -0
- netgen/include/pybind11/detail/init.h +538 -0
- netgen/include/pybind11/detail/internals.h +799 -0
- netgen/include/pybind11/detail/native_enum_data.h +209 -0
- netgen/include/pybind11/detail/pybind11_namespace_macros.h +82 -0
- netgen/include/pybind11/detail/struct_smart_holder.h +378 -0
- netgen/include/pybind11/detail/type_caster_base.h +1591 -0
- netgen/include/pybind11/detail/typeid.h +65 -0
- netgen/include/pybind11/detail/using_smart_holder.h +22 -0
- netgen/include/pybind11/detail/value_and_holder.h +90 -0
- netgen/include/pybind11/eigen/common.h +9 -0
- netgen/include/pybind11/eigen/matrix.h +723 -0
- netgen/include/pybind11/eigen/tensor.h +521 -0
- netgen/include/pybind11/eigen.h +12 -0
- netgen/include/pybind11/embed.h +320 -0
- netgen/include/pybind11/eval.h +161 -0
- netgen/include/pybind11/functional.h +147 -0
- netgen/include/pybind11/gil.h +199 -0
- netgen/include/pybind11/gil_safe_call_once.h +102 -0
- netgen/include/pybind11/gil_simple.h +37 -0
- netgen/include/pybind11/iostream.h +265 -0
- netgen/include/pybind11/native_enum.h +67 -0
- netgen/include/pybind11/numpy.h +2312 -0
- netgen/include/pybind11/operators.h +202 -0
- netgen/include/pybind11/options.h +92 -0
- netgen/include/pybind11/pybind11.h +3645 -0
- netgen/include/pybind11/pytypes.h +2680 -0
- netgen/include/pybind11/stl/filesystem.h +114 -0
- netgen/include/pybind11/stl.h +666 -0
- netgen/include/pybind11/stl_bind.h +858 -0
- netgen/include/pybind11/subinterpreter.h +299 -0
- netgen/include/pybind11/trampoline_self_life_support.h +65 -0
- netgen/include/pybind11/type_caster_pyobject_ptr.h +61 -0
- netgen/include/pybind11/typing.h +298 -0
- netgen/include/pybind11/warnings.h +75 -0
- netgen/include/stlgeom/meshstlsurface.hpp +67 -0
- netgen/include/stlgeom/stlgeom.hpp +491 -0
- netgen/include/stlgeom/stlline.hpp +193 -0
- netgen/include/stlgeom/stltool.hpp +331 -0
- netgen/include/stlgeom/stltopology.hpp +419 -0
- netgen/include/stlgeom/vsstl.hpp +58 -0
- netgen/include/visualization/meshdoc.hpp +42 -0
- netgen/include/visualization/mvdraw.hpp +325 -0
- netgen/include/visualization/vispar.hpp +128 -0
- netgen/include/visualization/visual.hpp +28 -0
- netgen/include/visualization/visual_api.hpp +10 -0
- netgen/include/visualization/vssolution.hpp +399 -0
- netgen/lib/libnggui.lib +0 -0
- netgen/lib/ngcore.lib +0 -0
- netgen/lib/nglib.lib +0 -0
- netgen/lib/togl.lib +0 -0
- netgen/libnggui.dll +0 -0
- netgen/libngguipy.lib +0 -0
- netgen/libngguipy.pyd +0 -0
- netgen/libngpy/_NgOCC.pyi +1545 -0
- netgen/libngpy/__init__.pyi +7 -0
- netgen/libngpy/_csg.pyi +259 -0
- netgen/libngpy/_geom2d.pyi +323 -0
- netgen/libngpy/_meshing.pyi +1111 -0
- netgen/libngpy/_stl.pyi +131 -0
- netgen/libngpy.lib +0 -0
- netgen/libngpy.pyd +0 -0
- netgen/meshing.py +65 -0
- netgen/ngcore.dll +0 -0
- netgen/nglib.dll +0 -0
- netgen/occ.py +52 -0
- netgen/read_gmsh.py +259 -0
- netgen/read_meshio.py +22 -0
- netgen/stl.py +2 -0
- netgen/togl.dll +0 -0
- netgen/version.py +2 -0
- netgen/webgui.py +529 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boundarycondition.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boxcyl.geo +32 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/circle_on_cube.geo +27 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cone.geo +13 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cube.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandring.geo +55 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandspheres.geo +21 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemcyl.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemsphere.geo +19 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylinder.geo +12 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylsphere.geo +12 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/doc/ng4.pdf +0 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipsoid.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipticcyl.geo +10 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/extrusion.geo +99 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/fichera.geo +24 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/frame.step +11683 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/hinge.stl +8486 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/lshape3d.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes2.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/matrix.geo +27 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ortho.geo +11 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/part1.stl +2662 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/period.geo +33 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/exportNeutral.py +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/mesh.py +19 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/shaft.geo +65 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/revolution.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/screw.step +1694 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sculpture.geo +13 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shaft.geo +65 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shell.geo +10 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphere.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphereincube.geo +17 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/square.in2d +35 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarecircle.in2d +48 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarehole.in2d +47 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/torus.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/trafo.geo +57 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twobricks.geo +15 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocubes.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocyl.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/METADATA +15 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/RECORD +340 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/WHEEL +5 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/entry_points.txt +2 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/AUTHORS +1 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/LICENSE +504 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/top_level.txt +2 -0
- pyngcore/__init__.py +1 -0
- pyngcore/pyngcore.cp314-win_amd64.pyd +0 -0
|
@@ -0,0 +1,659 @@
|
|
|
1
|
+
#ifndef FILE_OCCGEOM
|
|
2
|
+
#define FILE_OCCGEOM
|
|
3
|
+
|
|
4
|
+
/* *************************************************************************/
|
|
5
|
+
/* File: occgeom.hpp */
|
|
6
|
+
/* Author: Robert Gaisbauer */
|
|
7
|
+
/* Date: 26. May 03 */
|
|
8
|
+
/* *************************************************************************/
|
|
9
|
+
|
|
10
|
+
#ifdef OCCGEOMETRY
|
|
11
|
+
|
|
12
|
+
#include <set>
|
|
13
|
+
|
|
14
|
+
#include <meshing.hpp>
|
|
15
|
+
#include "occ_utils.hpp"
|
|
16
|
+
#include "occmeshsurf.hpp"
|
|
17
|
+
|
|
18
|
+
#include <BOPAlgo_BuilderShape.hxx>
|
|
19
|
+
#include <BRepTools_ReShape.hxx>
|
|
20
|
+
#include <BRepBuilderAPI_MakeShape.hxx>
|
|
21
|
+
#include <BRepBuilderAPI_Sewing.hxx>
|
|
22
|
+
#include <Quantity_ColorRGBA.hxx>
|
|
23
|
+
#include <STEPCAFControl_Reader.hxx>
|
|
24
|
+
#include <StepBasic_MeasureValueMember.hxx>
|
|
25
|
+
#include <StepRepr_CompoundRepresentationItem.hxx>
|
|
26
|
+
#include <StepRepr_IntegerRepresentationItem.hxx>
|
|
27
|
+
#include <StepRepr_ValueRepresentationItem.hxx>
|
|
28
|
+
#include <TCollection_HAsciiString.hxx>
|
|
29
|
+
#include <TDocStd_Document.hxx>
|
|
30
|
+
#include <TopoDS.hxx>
|
|
31
|
+
#include <TopoDS_Shape.hxx>
|
|
32
|
+
#include <Transfer_FinderProcess.hxx>
|
|
33
|
+
|
|
34
|
+
#if OCC_VERSION_MAJOR>=7 && OCC_VERSION_MINOR>=4
|
|
35
|
+
#define OCC_HAVE_HISTORY
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
namespace netgen
|
|
39
|
+
{
|
|
40
|
+
|
|
41
|
+
// extern DLL_HEADER MeshingParameters mparam;
|
|
42
|
+
|
|
43
|
+
#define PROJECTION_TOLERANCE 1e-10
|
|
44
|
+
|
|
45
|
+
#define ENTITYISVISIBLE 1
|
|
46
|
+
#define ENTITYISHIGHLIGHTED 2
|
|
47
|
+
#define ENTITYISDRAWABLE 4
|
|
48
|
+
|
|
49
|
+
#define OCCGEOMETRYVISUALIZATIONNOCHANGE 0
|
|
50
|
+
#define OCCGEOMETRYVISUALIZATIONFULLCHANGE 1 // Compute transformation matrices and redraw
|
|
51
|
+
#define OCCGEOMETRYVISUALIZATIONHALFCHANGE 2 // Redraw
|
|
52
|
+
|
|
53
|
+
bool IsMappedShape(const Transformation<3> & trafo, const TopoDS_Shape & me, const TopoDS_Shape & you);
|
|
54
|
+
|
|
55
|
+
class EntityVisualizationCode
|
|
56
|
+
{
|
|
57
|
+
int code;
|
|
58
|
+
|
|
59
|
+
public:
|
|
60
|
+
|
|
61
|
+
EntityVisualizationCode()
|
|
62
|
+
{ code = ENTITYISVISIBLE + !ENTITYISHIGHLIGHTED + ENTITYISDRAWABLE;}
|
|
63
|
+
|
|
64
|
+
int IsVisible ()
|
|
65
|
+
{ return code & ENTITYISVISIBLE;}
|
|
66
|
+
|
|
67
|
+
int IsHighlighted ()
|
|
68
|
+
{ return code & ENTITYISHIGHLIGHTED;}
|
|
69
|
+
|
|
70
|
+
int IsDrawable ()
|
|
71
|
+
{ return code & ENTITYISDRAWABLE;}
|
|
72
|
+
|
|
73
|
+
void Show ()
|
|
74
|
+
{ code |= ENTITYISVISIBLE;}
|
|
75
|
+
|
|
76
|
+
void Hide ()
|
|
77
|
+
{ code &= ~ENTITYISVISIBLE;}
|
|
78
|
+
|
|
79
|
+
void Highlight ()
|
|
80
|
+
{ code |= ENTITYISHIGHLIGHTED;}
|
|
81
|
+
|
|
82
|
+
void Lowlight ()
|
|
83
|
+
{ code &= ~ENTITYISHIGHLIGHTED;}
|
|
84
|
+
|
|
85
|
+
void SetDrawable ()
|
|
86
|
+
{ code |= ENTITYISDRAWABLE;}
|
|
87
|
+
|
|
88
|
+
void SetNotDrawable ()
|
|
89
|
+
{ code &= ~ENTITYISDRAWABLE;}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class Line
|
|
95
|
+
{
|
|
96
|
+
public:
|
|
97
|
+
Point<3> p0, p1;
|
|
98
|
+
int layer = 1;
|
|
99
|
+
double Dist (Line l);
|
|
100
|
+
double Length () { return (p1-p0).Length(); }
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
inline double Det3 (double a00, double a01, double a02,
|
|
106
|
+
double a10, double a11, double a12,
|
|
107
|
+
double a20, double a21, double a22)
|
|
108
|
+
{
|
|
109
|
+
return a00*a11*a22 + a01*a12*a20 + a10*a21*a02 - a20*a11*a02 - a10*a01*a22 - a21*a12*a00;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
class DLL_HEADER OCCParameters
|
|
113
|
+
{
|
|
114
|
+
public:
|
|
115
|
+
|
|
116
|
+
/// Factor for meshing close edges, moved to meshingparameters
|
|
117
|
+
// double resthcloseedgefac = 2.;
|
|
118
|
+
|
|
119
|
+
/// Enable / Disable detection of close edges
|
|
120
|
+
// int resthcloseedgeenable = true;
|
|
121
|
+
|
|
122
|
+
/// Minimum edge length to be used for dividing edges to mesh points
|
|
123
|
+
// double resthminedgelen = 0.001;
|
|
124
|
+
double resthminedgelen = 1e-4;
|
|
125
|
+
|
|
126
|
+
/// Enable / Disable use of the minimum edge length (by default use 1e-4)
|
|
127
|
+
int resthminedgelenenable = false;
|
|
128
|
+
|
|
129
|
+
/*!
|
|
130
|
+
Dump all the OpenCascade specific meshing parameters
|
|
131
|
+
to console
|
|
132
|
+
*/
|
|
133
|
+
void Print (ostream & ost) const;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class DLL_HEADER OCCGeometry : public NetgenGeometry
|
|
138
|
+
{
|
|
139
|
+
Point<3> center;
|
|
140
|
+
OCCParameters occparam;
|
|
141
|
+
public:
|
|
142
|
+
static TopTools_IndexedMapOfShape global_shape_property_indices;
|
|
143
|
+
static std::vector<ShapeProperties> global_shape_properties;
|
|
144
|
+
static TopTools_IndexedMapOfShape global_identification_indices;
|
|
145
|
+
static std::vector<std::vector<OCCIdentification>> global_identifications;
|
|
146
|
+
|
|
147
|
+
static ShapeProperties& GetProperties(const TopoDS_Shape& shape)
|
|
148
|
+
{
|
|
149
|
+
try
|
|
150
|
+
{
|
|
151
|
+
CheckValidPropertyType(shape);
|
|
152
|
+
}
|
|
153
|
+
catch(Exception& e)
|
|
154
|
+
{
|
|
155
|
+
cerr << "WARNING: " << e.what() << endl;
|
|
156
|
+
}
|
|
157
|
+
auto index = OCCGeometry::global_shape_property_indices.FindIndex(shape);
|
|
158
|
+
if(index > 0)
|
|
159
|
+
return OCCGeometry::global_shape_properties
|
|
160
|
+
[index-1];
|
|
161
|
+
OCCGeometry::global_shape_property_indices.Add(shape);
|
|
162
|
+
OCCGeometry::global_shape_properties.push_back({});
|
|
163
|
+
return OCCGeometry::global_shape_properties.back();
|
|
164
|
+
}
|
|
165
|
+
static bool HaveProperties(const TopoDS_Shape& shape)
|
|
166
|
+
{
|
|
167
|
+
return OCCGeometry::global_shape_property_indices.FindIndex(shape) > 0;
|
|
168
|
+
}
|
|
169
|
+
static std::vector<OCCIdentification>& GetIdentifications(const TopoDS_Shape& shape)
|
|
170
|
+
{
|
|
171
|
+
auto index = OCCGeometry::global_identification_indices.FindIndex(shape);
|
|
172
|
+
if(index > 0)
|
|
173
|
+
return OCCGeometry::global_identifications[index-1];
|
|
174
|
+
OCCGeometry::global_identification_indices.Add(shape);
|
|
175
|
+
OCCGeometry::global_identifications.push_back({});
|
|
176
|
+
return OCCGeometry::global_identifications.back();
|
|
177
|
+
}
|
|
178
|
+
static bool HaveIdentifications(const TopoDS_Shape& shape)
|
|
179
|
+
{
|
|
180
|
+
return OCCGeometry::global_identification_indices.FindIndex(shape) > 0;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
TopoDS_Shape shape;
|
|
184
|
+
TopTools_IndexedMapOfShape fmap, emap, vmap, somap, shmap, wmap;
|
|
185
|
+
NgArray<bool> fsingular, esingular, vsingular;
|
|
186
|
+
Box<3> boundingbox;
|
|
187
|
+
|
|
188
|
+
mutable int changed;
|
|
189
|
+
mutable NgArray<int> facemeshstatus;
|
|
190
|
+
|
|
191
|
+
// Philippose - 15/01/2009
|
|
192
|
+
// Maximum mesh size for a given face
|
|
193
|
+
// (Used to explicitly define mesh size limits on individual faces)
|
|
194
|
+
NgArray<double> face_maxh;
|
|
195
|
+
|
|
196
|
+
// Philippose - 14/01/2010
|
|
197
|
+
// Boolean array to detect whether a face has been explicitly modified
|
|
198
|
+
// by the user or not
|
|
199
|
+
NgArray<bool> face_maxh_modified;
|
|
200
|
+
|
|
201
|
+
// Philippose - 15/01/2009
|
|
202
|
+
// Indicates which faces have been selected by the user in geometry mode
|
|
203
|
+
// (Currently handles only selection of one face at a time, but an array would
|
|
204
|
+
// help to extend this to multiple faces)
|
|
205
|
+
NgArray<bool> face_sel_status;
|
|
206
|
+
|
|
207
|
+
NgArray<EntityVisualizationCode> fvispar, evispar, vvispar;
|
|
208
|
+
|
|
209
|
+
double tolerance;
|
|
210
|
+
bool fixsmalledges;
|
|
211
|
+
bool fixspotstripfaces;
|
|
212
|
+
bool sewfaces;
|
|
213
|
+
bool makesolids;
|
|
214
|
+
bool splitpartitions;
|
|
215
|
+
|
|
216
|
+
OCCGeometry()
|
|
217
|
+
{
|
|
218
|
+
somap.Clear();
|
|
219
|
+
shmap.Clear();
|
|
220
|
+
fmap.Clear();
|
|
221
|
+
wmap.Clear();
|
|
222
|
+
emap.Clear();
|
|
223
|
+
vmap.Clear();
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
OCCGeometry(const TopoDS_Shape& _shape, int aoccdim = 3, bool copy = false);
|
|
227
|
+
|
|
228
|
+
Mesh::GEOM_TYPE GetGeomType() const override
|
|
229
|
+
{ return Mesh::GEOM_OCC; }
|
|
230
|
+
|
|
231
|
+
void SetDimension(int dim)
|
|
232
|
+
{
|
|
233
|
+
dimension = dim;
|
|
234
|
+
BuildFMap();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
void SetOCCParameters(const OCCParameters& par)
|
|
238
|
+
{ occparam = par; }
|
|
239
|
+
|
|
240
|
+
using NetgenGeometry::GetVertex;
|
|
241
|
+
using NetgenGeometry::GetEdge;
|
|
242
|
+
using NetgenGeometry::GetFace;
|
|
243
|
+
using NetgenGeometry::GetSolid;
|
|
244
|
+
|
|
245
|
+
GeometryShape & GetShape(const TopoDS_Shape & shape)
|
|
246
|
+
{
|
|
247
|
+
return const_cast<GeometryShape&>(as_const(*this).GetShape(shape));
|
|
248
|
+
}
|
|
249
|
+
GeometryVertex & GetVertex(const TopoDS_Shape & shape)
|
|
250
|
+
{
|
|
251
|
+
return const_cast<GeometryVertex&>(as_const(*this).GetVertex(shape));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
GeometryEdge & GetEdge(const TopoDS_Shape & shape)
|
|
255
|
+
{
|
|
256
|
+
return const_cast<GeometryEdge&>(as_const(*this).GetEdge(shape));
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
GeometryFace & GetFace(const TopoDS_Shape & shape)
|
|
260
|
+
{
|
|
261
|
+
return const_cast<GeometryFace&>(as_const(*this).GetFace(shape));
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
GeometrySolid & GetSolid(const TopoDS_Shape & shape)
|
|
265
|
+
{
|
|
266
|
+
return const_cast<GeometrySolid&>(as_const(*this).GetSolid(shape));
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
const GeometryShape & GetShape(const TopoDS_Shape & shape) const;
|
|
270
|
+
const GeometryVertex & GetVertex(const TopoDS_Shape & shape) const;
|
|
271
|
+
const GeometryEdge & GetEdge(const TopoDS_Shape & shape) const;
|
|
272
|
+
const GeometryFace & GetFace(const TopoDS_Shape & shape) const;
|
|
273
|
+
const GeometrySolid & GetSolid(const TopoDS_Shape & shape) const;
|
|
274
|
+
|
|
275
|
+
void Analyse(Mesh& mesh,
|
|
276
|
+
const MeshingParameters& mparam) const override;
|
|
277
|
+
bool MeshFace(Mesh& mesh, const MeshingParameters& mparam,
|
|
278
|
+
int nr, FlatArray<int, PointIndex> glob2loc) const override;
|
|
279
|
+
// void OptimizeSurface(Mesh& mesh, const MeshingParameters& mparam) const override {}
|
|
280
|
+
|
|
281
|
+
void Save (const filesystem::path & filename) const override;
|
|
282
|
+
void SaveToMeshFile (ostream & /* ost */) const override;
|
|
283
|
+
|
|
284
|
+
void DoArchive(Archive& ar) override;
|
|
285
|
+
|
|
286
|
+
void BuildFMap();
|
|
287
|
+
|
|
288
|
+
auto GetShape() const { return shape; }
|
|
289
|
+
Box<3> GetBoundingBox() const
|
|
290
|
+
{ return boundingbox; }
|
|
291
|
+
|
|
292
|
+
int NrSolids() const
|
|
293
|
+
{ return somap.Extent(); }
|
|
294
|
+
|
|
295
|
+
// Philippose - 17/01/2009
|
|
296
|
+
// Total number of faces in the geometry
|
|
297
|
+
int NrFaces() const
|
|
298
|
+
{ return fmap.Extent(); }
|
|
299
|
+
|
|
300
|
+
void SetCenter()
|
|
301
|
+
{ center = boundingbox.Center(); }
|
|
302
|
+
|
|
303
|
+
Point<3> Center() const
|
|
304
|
+
{ return center; }
|
|
305
|
+
|
|
306
|
+
OCCSurface GetSurface (int surfi)
|
|
307
|
+
{
|
|
308
|
+
cout << "OCCGeometry::GetSurface using PLANESPACE" << endl;
|
|
309
|
+
return OCCSurface (TopoDS::Face(fmap(surfi)), PLANESPACE);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
void CalcBoundingBox ();
|
|
313
|
+
void BuildVisualizationMesh (double deflection);
|
|
314
|
+
|
|
315
|
+
void RecursiveTopologyTree (const TopoDS_Shape & sh,
|
|
316
|
+
stringstream & str,
|
|
317
|
+
TopAbs_ShapeEnum l,
|
|
318
|
+
bool free,
|
|
319
|
+
const char * lname);
|
|
320
|
+
|
|
321
|
+
void GetTopologyTree (stringstream & str);
|
|
322
|
+
|
|
323
|
+
void PrintNrShapes ();
|
|
324
|
+
|
|
325
|
+
void CheckIrregularEntities (stringstream & str);
|
|
326
|
+
|
|
327
|
+
void SewFaces();
|
|
328
|
+
|
|
329
|
+
void MakeSolid();
|
|
330
|
+
|
|
331
|
+
Array<const GeometryVertex*> GetFaceVertices(const GeometryFace& face) const override;
|
|
332
|
+
|
|
333
|
+
void FixFaceOrientation();
|
|
334
|
+
void HealGeometry();
|
|
335
|
+
void GlueGeometry();
|
|
336
|
+
|
|
337
|
+
// Philippose - 15/01/2009
|
|
338
|
+
// Sets the maximum mesh size for a given face
|
|
339
|
+
// (Note: Local mesh size limited by the global max mesh size)
|
|
340
|
+
void SetFaceMaxH(int facenr, double faceh, const MeshingParameters & mparam)
|
|
341
|
+
{
|
|
342
|
+
if((facenr> 0) && (facenr <= fmap.Extent()))
|
|
343
|
+
{
|
|
344
|
+
face_maxh[facenr-1] = min(mparam.maxh,faceh);
|
|
345
|
+
|
|
346
|
+
// Philippose - 14/01/2010
|
|
347
|
+
// If the face maxh is greater than or equal to the
|
|
348
|
+
// current global maximum, then identify the face as
|
|
349
|
+
// not explicitly controlled by the user any more
|
|
350
|
+
if(faceh >= mparam.maxh)
|
|
351
|
+
{
|
|
352
|
+
face_maxh_modified[facenr-1] = 0;
|
|
353
|
+
}
|
|
354
|
+
else
|
|
355
|
+
{
|
|
356
|
+
face_maxh_modified[facenr-1] = 1;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
void SetFaceMaxH(size_t facenr, double faceh)
|
|
362
|
+
{
|
|
363
|
+
if(facenr >= fmap.Extent())
|
|
364
|
+
throw RangeException("OCCGeometry faces", facenr, 0, fmap.Extent());
|
|
365
|
+
face_maxh[facenr] = faceh;
|
|
366
|
+
face_maxh_modified[facenr] = true;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// Philippose - 15/01/2009
|
|
370
|
+
// Returns the local mesh size of a given face
|
|
371
|
+
double GetFaceMaxH(int facenr)
|
|
372
|
+
{
|
|
373
|
+
if((facenr> 0) && (facenr <= fmap.Extent()))
|
|
374
|
+
{
|
|
375
|
+
return face_maxh[facenr-1];
|
|
376
|
+
}
|
|
377
|
+
else
|
|
378
|
+
{
|
|
379
|
+
return 0.0;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Philippose - 14/01/2010
|
|
384
|
+
// Returns the flag whether the given face
|
|
385
|
+
// has a mesh size controlled by the user or not
|
|
386
|
+
bool GetFaceMaxhModified(int facenr)
|
|
387
|
+
{
|
|
388
|
+
return face_maxh_modified[facenr-1];
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// Philippose - 17/01/2009
|
|
392
|
+
// Returns the index of the currently selected face
|
|
393
|
+
int SelectedFace()
|
|
394
|
+
{
|
|
395
|
+
for(int i = 1; i <= fmap.Extent(); i++)
|
|
396
|
+
{
|
|
397
|
+
if(face_sel_status[i-1])
|
|
398
|
+
{
|
|
399
|
+
return i;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
return 0;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// Philippose - 17/01/2009
|
|
407
|
+
// Sets the currently selected face
|
|
408
|
+
void SetSelectedFace(int facenr)
|
|
409
|
+
{
|
|
410
|
+
face_sel_status = 0;
|
|
411
|
+
|
|
412
|
+
if((facenr >= 1) && (facenr <= fmap.Extent()))
|
|
413
|
+
{
|
|
414
|
+
face_sel_status[facenr-1] = 1;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
void LowLightAll()
|
|
419
|
+
{
|
|
420
|
+
for (int i = 1; i <= fmap.Extent(); i++)
|
|
421
|
+
fvispar[i-1].Lowlight();
|
|
422
|
+
for (int i = 1; i <= emap.Extent(); i++)
|
|
423
|
+
evispar[i-1].Lowlight();
|
|
424
|
+
for (int i = 1; i <= vmap.Extent(); i++)
|
|
425
|
+
vvispar[i-1].Lowlight();
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
void GetUnmeshedFaceInfo (stringstream & str);
|
|
429
|
+
void GetNotDrawableFaces (stringstream & str);
|
|
430
|
+
bool ErrorInSurfaceMeshing ();
|
|
431
|
+
|
|
432
|
+
// void WriteOCC_STL(char * filename);
|
|
433
|
+
|
|
434
|
+
private:
|
|
435
|
+
//bool FastProject (int surfi, Point<3> & ap, double& u, double& v) const;
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
DLL_HEADER void Identify(const ListOfShapes & me, const ListOfShapes & you, string name, Identifications::ID_TYPE type, Transformation<3> trafo);
|
|
439
|
+
DLL_HEADER void Identify(const TopoDS_Shape & me, const TopoDS_Shape & you, string name, Identifications::ID_TYPE type, std::optional<std::variant<gp_Trsf, gp_GTrsf>> opt_trafo);
|
|
440
|
+
|
|
441
|
+
|
|
442
|
+
void PrintContents (OCCGeometry * geom);
|
|
443
|
+
|
|
444
|
+
DLL_HEADER OCCGeometry * LoadOCC_IGES (const filesystem::path & filename);
|
|
445
|
+
DLL_HEADER OCCGeometry * LoadOCC_STEP (const filesystem::path & filename);
|
|
446
|
+
DLL_HEADER OCCGeometry * LoadOCC_BREP (const filesystem::path & filename);
|
|
447
|
+
|
|
448
|
+
// Philippose - 31.09.2009
|
|
449
|
+
// External access to the mesh generation functions within the OCC
|
|
450
|
+
// subsystem (Not sure if this is the best way to implement this....!!)
|
|
451
|
+
DLL_HEADER extern void OCCSetLocalMeshSize(const OCCGeometry & geom, Mesh & mesh, const MeshingParameters & mparam,
|
|
452
|
+
const OCCParameters& occparam);
|
|
453
|
+
|
|
454
|
+
DLL_HEADER extern bool OCCMeshFace (const OCCGeometry & geom, Mesh & mesh, FlatArray<int, PointIndex> glob2loc,
|
|
455
|
+
const MeshingParameters & mparam, int nr, int projecttype, bool delete_on_failure);
|
|
456
|
+
|
|
457
|
+
inline auto GetModified(BRepBuilderAPI_MakeShape & builder, TopoDS_Shape shape) { return builder.Modified(shape); }
|
|
458
|
+
inline auto GetModified(BRepTools_History & history, TopoDS_Shape shape) { return history.Modified(shape); }
|
|
459
|
+
inline auto GetModified(BOPAlgo_BuilderShape & builder, TopoDS_Shape shape) { return builder.Modified(shape); }
|
|
460
|
+
inline ArrayMem<TopoDS_Shape, 1> GetModified(BRepBuilderAPI_Sewing& builder, TopoDS_Shape shape) { return {builder.Modified(shape)}; }
|
|
461
|
+
inline auto GetModified(BRepTools_ReShape& reshape, TopoDS_Shape shape) {
|
|
462
|
+
auto history = reshape.History();
|
|
463
|
+
return history->Modified(shape);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
template <class TBuilder>
|
|
467
|
+
void PropagateIdentifications (TBuilder & builder, TopoDS_Shape shape, std::optional<Transformation<3>> trafo = nullopt)
|
|
468
|
+
{
|
|
469
|
+
TopTools_IndexedMapOfShape mod_indices;
|
|
470
|
+
Array<TopTools_IndexedMapOfShape> modifications;
|
|
471
|
+
TopTools_MapOfShape shape_handled;
|
|
472
|
+
|
|
473
|
+
Transformation<3> trafo_inv;
|
|
474
|
+
if(trafo)
|
|
475
|
+
trafo_inv = trafo->CalcInverse();
|
|
476
|
+
|
|
477
|
+
for (auto typ : { TopAbs_SOLID, TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX })
|
|
478
|
+
for (TopExp_Explorer e(shape, typ); e.More(); e.Next())
|
|
479
|
+
{
|
|
480
|
+
auto s = e.Current();
|
|
481
|
+
mod_indices.Add(s);
|
|
482
|
+
modifications.Append(TopTools_IndexedMapOfShape());
|
|
483
|
+
modifications.Last().Add(s);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
for (auto typ : { TopAbs_SOLID, TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX })
|
|
487
|
+
for (TopExp_Explorer e(shape, typ); e.More(); e.Next())
|
|
488
|
+
{
|
|
489
|
+
auto s = e.Current();
|
|
490
|
+
for (auto mods : GetModified(builder, s))
|
|
491
|
+
{
|
|
492
|
+
auto index = mod_indices.FindIndex(s)-1;
|
|
493
|
+
modifications[index].Add(mods);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
for (auto typ : { TopAbs_SOLID, TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX })
|
|
498
|
+
for (TopExp_Explorer e(shape, typ); e.More(); e.Next())
|
|
499
|
+
{
|
|
500
|
+
auto s = e.Current();
|
|
501
|
+
|
|
502
|
+
if(shape_handled.Contains(s))
|
|
503
|
+
continue;
|
|
504
|
+
shape_handled.Add(s);
|
|
505
|
+
|
|
506
|
+
if(!OCCGeometry::HaveIdentifications(s))
|
|
507
|
+
continue;
|
|
508
|
+
auto& identifications = OCCGeometry::GetIdentifications(s);
|
|
509
|
+
|
|
510
|
+
// auto& shape_mapped = modifications[mod_indices.FindIndex(s)-1];
|
|
511
|
+
|
|
512
|
+
for(auto ident : identifications)
|
|
513
|
+
{
|
|
514
|
+
auto i1 = mod_indices.FindIndex(ident.to);
|
|
515
|
+
auto i2 = mod_indices.FindIndex(ident.from);
|
|
516
|
+
if(i1 == 0 || i2 == 0) // not in geometry
|
|
517
|
+
continue;
|
|
518
|
+
auto& mods_to = modifications[i1-1];
|
|
519
|
+
auto& mods_from = modifications[i2-1];
|
|
520
|
+
if(mods_to.Extent()==1 && mods_from.Extent() ==1)
|
|
521
|
+
continue;
|
|
522
|
+
|
|
523
|
+
auto from = ident.from;
|
|
524
|
+
auto to = ident.to;
|
|
525
|
+
|
|
526
|
+
for(auto it = mods_from.cbegin(); it != mods_from.cend(); it++)
|
|
527
|
+
for(auto it2 = mods_to.cbegin(); it2 != mods_to.cend(); it2++)
|
|
528
|
+
{
|
|
529
|
+
auto& from_mapped = it.Iterator().Value();
|
|
530
|
+
auto& to_mapped = it2.Iterator().Value();
|
|
531
|
+
if(from.IsSame(from_mapped) && to.IsSame(to_mapped))
|
|
532
|
+
continue;
|
|
533
|
+
|
|
534
|
+
if(!ident.trafo) continue;
|
|
535
|
+
Transformation<3> trafo_mapped = *ident.trafo;
|
|
536
|
+
|
|
537
|
+
if(trafo)
|
|
538
|
+
{
|
|
539
|
+
Transformation<3> trafo_temp;
|
|
540
|
+
trafo_temp.Combine(*ident.trafo, trafo_inv);
|
|
541
|
+
trafo_mapped.Combine(*trafo, trafo_temp);
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
if(!IsMappedShape(trafo_mapped, from_mapped, to_mapped))
|
|
545
|
+
continue;
|
|
546
|
+
|
|
547
|
+
OCCIdentification id_new = ident;
|
|
548
|
+
id_new.to = to_mapped;
|
|
549
|
+
id_new.from = from_mapped;
|
|
550
|
+
id_new.trafo = trafo_mapped;
|
|
551
|
+
auto id_owner = from.IsSame(s) ? from_mapped : to_mapped;
|
|
552
|
+
OCCGeometry::GetIdentifications(id_owner).push_back(id_new);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
template <class TBuilder>
|
|
559
|
+
void PropagateProperties (TBuilder & builder, TopoDS_Shape shape, std::optional<Transformation<3>> trafo = nullopt)
|
|
560
|
+
{
|
|
561
|
+
bool have_identifications = false;
|
|
562
|
+
|
|
563
|
+
for (auto typ : { TopAbs_SOLID, TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX })
|
|
564
|
+
for (TopExp_Explorer e(shape, typ); e.More(); e.Next())
|
|
565
|
+
{
|
|
566
|
+
auto s = e.Current();
|
|
567
|
+
have_identifications |= OCCGeometry::HaveIdentifications(s);
|
|
568
|
+
if(!OCCGeometry::HaveProperties(s))
|
|
569
|
+
continue;
|
|
570
|
+
auto prop = OCCGeometry::GetProperties(s);
|
|
571
|
+
for (auto mods : GetModified(builder, s))
|
|
572
|
+
OCCGeometry::GetProperties(mods).Merge(prop);
|
|
573
|
+
}
|
|
574
|
+
if(have_identifications)
|
|
575
|
+
PropagateIdentifications(builder, shape, trafo);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
namespace step_utils
|
|
579
|
+
{
|
|
580
|
+
inline Handle(TCollection_HAsciiString) MakeName (string s)
|
|
581
|
+
{
|
|
582
|
+
return new TCollection_HAsciiString(s.c_str());
|
|
583
|
+
};
|
|
584
|
+
|
|
585
|
+
inline Handle(StepRepr_RepresentationItem) MakeInt (int n, string name = "")
|
|
586
|
+
{
|
|
587
|
+
Handle(StepRepr_IntegerRepresentationItem) int_obj = new StepRepr_IntegerRepresentationItem;
|
|
588
|
+
int_obj->Init(MakeName(name), n);
|
|
589
|
+
return int_obj;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
inline int ReadInt (Handle(StepRepr_RepresentationItem) item)
|
|
593
|
+
{
|
|
594
|
+
return Handle(StepRepr_IntegerRepresentationItem)::DownCast(item)->Value();
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
inline Handle(StepRepr_RepresentationItem) MakeReal (double val, string name = "")
|
|
598
|
+
{
|
|
599
|
+
Handle(StepBasic_MeasureValueMember) value_member = new StepBasic_MeasureValueMember;
|
|
600
|
+
value_member->SetReal(val);
|
|
601
|
+
Handle(StepRepr_ValueRepresentationItem) value_repr = new StepRepr_ValueRepresentationItem;
|
|
602
|
+
value_repr->Init(MakeName(name), value_member);
|
|
603
|
+
return value_repr;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
inline double ReadReal (Handle(StepRepr_RepresentationItem) item)
|
|
607
|
+
{
|
|
608
|
+
return Handle(StepRepr_ValueRepresentationItem)::DownCast(item)
|
|
609
|
+
->ValueComponentMember()->Real();
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
|
|
613
|
+
inline Handle(StepRepr_RepresentationItem) MakeCompound( FlatArray<Handle(StepRepr_RepresentationItem)> items, string name = "" )
|
|
614
|
+
{
|
|
615
|
+
Handle(StepRepr_HArray1OfRepresentationItem) array_repr = new StepRepr_HArray1OfRepresentationItem(1,items.Size());
|
|
616
|
+
|
|
617
|
+
for(auto i : Range(items))
|
|
618
|
+
array_repr->SetValue(i+1, items[i]);
|
|
619
|
+
|
|
620
|
+
Handle(StepRepr_CompoundRepresentationItem) comp = new StepRepr_CompoundRepresentationItem;
|
|
621
|
+
comp->Init( MakeName(name), array_repr );
|
|
622
|
+
return comp;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
void WriteIdentifications(const Handle(Interface_InterfaceModel) model, const TopoDS_Shape & shape, const Handle(Transfer_FinderProcess) finder);
|
|
626
|
+
void ReadIdentifications(Handle(StepRepr_RepresentationItem) item, Handle(Transfer_TransientProcess) transProc);
|
|
627
|
+
|
|
628
|
+
inline Quantity_ColorRGBA MakeColor(const Vec<4> & c)
|
|
629
|
+
{
|
|
630
|
+
return Quantity_ColorRGBA (c[0], c[1], c[2], c[3]);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
inline Vec<4> ReadColor (const Quantity_ColorRGBA & c)
|
|
634
|
+
{
|
|
635
|
+
auto rgb = c.GetRGB();
|
|
636
|
+
return {rgb.Red(), rgb.Green(), rgb.Blue(), c.Alpha()};
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
|
|
640
|
+
void LoadProperties(const TopoDS_Shape & shape,
|
|
641
|
+
const STEPCAFControl_Reader & reader,
|
|
642
|
+
const Handle(TDocStd_Document) step_doc);
|
|
643
|
+
void WriteProperties(const Handle(Interface_InterfaceModel) model, const Handle(Transfer_FinderProcess) finder, const TopoDS_Shape & shape);
|
|
644
|
+
|
|
645
|
+
void WriteSTEP(const TopoDS_Shape & shape, const filesystem::path & filename);
|
|
646
|
+
|
|
647
|
+
inline void WriteSTEP(const OCCGeometry & geo, const filesystem::path & filename)
|
|
648
|
+
{
|
|
649
|
+
WriteSTEP(geo.GetShape(), filename);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
// deep copy, also ensures consistent shape ordering (face numbers etc.)
|
|
653
|
+
TopoDS_Shape WriteAndRead(const TopoDS_Shape shape);
|
|
654
|
+
} // namespace step_utils
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
#endif
|
|
658
|
+
|
|
659
|
+
#endif
|