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.
Files changed (340) hide show
  1. netgen/NgOCC.py +7 -0
  2. netgen/__init__.py +114 -0
  3. netgen/__init__.pyi +22 -0
  4. netgen/__main__.py +53 -0
  5. netgen/cmake/NetgenConfig.cmake +79 -0
  6. netgen/cmake/netgen-targets-release.cmake +69 -0
  7. netgen/cmake/netgen-targets.cmake +146 -0
  8. netgen/config/__init__.py +1 -0
  9. netgen/config/__init__.pyi +52 -0
  10. netgen/config/__main__.py +4 -0
  11. netgen/config/config.py +68 -0
  12. netgen/config/config.pyi +54 -0
  13. netgen/csg.py +25 -0
  14. netgen/geom2d.py +178 -0
  15. netgen/gui.py +82 -0
  16. netgen/include/core/archive.hpp +1256 -0
  17. netgen/include/core/array.hpp +1760 -0
  18. netgen/include/core/autodiff.hpp +1131 -0
  19. netgen/include/core/autodiffdiff.hpp +733 -0
  20. netgen/include/core/bitarray.hpp +240 -0
  21. netgen/include/core/concurrentqueue.h +3619 -0
  22. netgen/include/core/exception.hpp +145 -0
  23. netgen/include/core/flags.hpp +199 -0
  24. netgen/include/core/hashtable.hpp +1281 -0
  25. netgen/include/core/localheap.hpp +318 -0
  26. netgen/include/core/logging.hpp +117 -0
  27. netgen/include/core/memtracer.hpp +221 -0
  28. netgen/include/core/mpi4py_pycapi.h +245 -0
  29. netgen/include/core/mpi_wrapper.hpp +643 -0
  30. netgen/include/core/ng_mpi.hpp +94 -0
  31. netgen/include/core/ng_mpi_generated_declarations.hpp +155 -0
  32. netgen/include/core/ng_mpi_native.hpp +25 -0
  33. netgen/include/core/ngcore.hpp +32 -0
  34. netgen/include/core/ngcore_api.hpp +152 -0
  35. netgen/include/core/ngstream.hpp +115 -0
  36. netgen/include/core/paje_trace.hpp +279 -0
  37. netgen/include/core/profiler.hpp +382 -0
  38. netgen/include/core/python_ngcore.hpp +457 -0
  39. netgen/include/core/ranges.hpp +109 -0
  40. netgen/include/core/register_archive.hpp +100 -0
  41. netgen/include/core/signal.hpp +82 -0
  42. netgen/include/core/simd.hpp +160 -0
  43. netgen/include/core/simd_arm64.hpp +407 -0
  44. netgen/include/core/simd_avx.hpp +394 -0
  45. netgen/include/core/simd_avx512.hpp +285 -0
  46. netgen/include/core/simd_generic.hpp +1053 -0
  47. netgen/include/core/simd_math.hpp +178 -0
  48. netgen/include/core/simd_sse.hpp +289 -0
  49. netgen/include/core/statushandler.hpp +37 -0
  50. netgen/include/core/symboltable.hpp +153 -0
  51. netgen/include/core/table.hpp +810 -0
  52. netgen/include/core/taskmanager.hpp +1161 -0
  53. netgen/include/core/type_traits.hpp +65 -0
  54. netgen/include/core/utils.hpp +385 -0
  55. netgen/include/core/version.hpp +102 -0
  56. netgen/include/core/xbool.hpp +47 -0
  57. netgen/include/csg/algprim.hpp +563 -0
  58. netgen/include/csg/brick.hpp +150 -0
  59. netgen/include/csg/csg.hpp +43 -0
  60. netgen/include/csg/csgeom.hpp +389 -0
  61. netgen/include/csg/csgparser.hpp +101 -0
  62. netgen/include/csg/curve2d.hpp +67 -0
  63. netgen/include/csg/edgeflw.hpp +112 -0
  64. netgen/include/csg/explicitcurve2d.hpp +113 -0
  65. netgen/include/csg/extrusion.hpp +185 -0
  66. netgen/include/csg/gencyl.hpp +70 -0
  67. netgen/include/csg/geoml.hpp +16 -0
  68. netgen/include/csg/identify.hpp +213 -0
  69. netgen/include/csg/manifold.hpp +29 -0
  70. netgen/include/csg/meshsurf.hpp +46 -0
  71. netgen/include/csg/polyhedra.hpp +121 -0
  72. netgen/include/csg/revolution.hpp +180 -0
  73. netgen/include/csg/singularref.hpp +84 -0
  74. netgen/include/csg/solid.hpp +295 -0
  75. netgen/include/csg/specpoin.hpp +194 -0
  76. netgen/include/csg/spline3d.hpp +99 -0
  77. netgen/include/csg/splinesurface.hpp +85 -0
  78. netgen/include/csg/surface.hpp +394 -0
  79. netgen/include/csg/triapprox.hpp +63 -0
  80. netgen/include/csg/vscsg.hpp +34 -0
  81. netgen/include/general/autodiff.hpp +356 -0
  82. netgen/include/general/autoptr.hpp +39 -0
  83. netgen/include/general/gzstream.h +121 -0
  84. netgen/include/general/hashtabl.hpp +1692 -0
  85. netgen/include/general/myadt.hpp +48 -0
  86. netgen/include/general/mystring.hpp +226 -0
  87. netgen/include/general/netgenout.hpp +205 -0
  88. netgen/include/general/ngarray.hpp +797 -0
  89. netgen/include/general/ngbitarray.hpp +149 -0
  90. netgen/include/general/ngpython.hpp +74 -0
  91. netgen/include/general/optmem.hpp +44 -0
  92. netgen/include/general/parthreads.hpp +138 -0
  93. netgen/include/general/seti.hpp +50 -0
  94. netgen/include/general/sort.hpp +47 -0
  95. netgen/include/general/spbita2d.hpp +59 -0
  96. netgen/include/general/stack.hpp +114 -0
  97. netgen/include/general/table.hpp +280 -0
  98. netgen/include/general/template.hpp +509 -0
  99. netgen/include/geom2d/csg2d.hpp +750 -0
  100. netgen/include/geom2d/geometry2d.hpp +280 -0
  101. netgen/include/geom2d/spline2d.hpp +234 -0
  102. netgen/include/geom2d/vsgeom2d.hpp +28 -0
  103. netgen/include/gprim/adtree.hpp +1392 -0
  104. netgen/include/gprim/geom2d.hpp +858 -0
  105. netgen/include/gprim/geom3d.hpp +749 -0
  106. netgen/include/gprim/geomfuncs.hpp +212 -0
  107. netgen/include/gprim/geomobjects.hpp +544 -0
  108. netgen/include/gprim/geomops.hpp +404 -0
  109. netgen/include/gprim/geomtest3d.hpp +101 -0
  110. netgen/include/gprim/gprim.hpp +33 -0
  111. netgen/include/gprim/spline.hpp +778 -0
  112. netgen/include/gprim/splinegeometry.hpp +73 -0
  113. netgen/include/gprim/transform3d.hpp +216 -0
  114. netgen/include/include/acisgeom.hpp +3 -0
  115. netgen/include/include/csg.hpp +1 -0
  116. netgen/include/include/geometry2d.hpp +1 -0
  117. netgen/include/include/gprim.hpp +1 -0
  118. netgen/include/include/incopengl.hpp +62 -0
  119. netgen/include/include/inctcl.hpp +13 -0
  120. netgen/include/include/incvis.hpp +6 -0
  121. netgen/include/include/linalg.hpp +1 -0
  122. netgen/include/include/meshing.hpp +1 -0
  123. netgen/include/include/myadt.hpp +1 -0
  124. netgen/include/include/mydefs.hpp +70 -0
  125. netgen/include/include/mystdlib.h +59 -0
  126. netgen/include/include/netgen_config.hpp +27 -0
  127. netgen/include/include/netgen_version.hpp +9 -0
  128. netgen/include/include/nginterface_v2_impl.hpp +395 -0
  129. netgen/include/include/ngsimd.hpp +1 -0
  130. netgen/include/include/occgeom.hpp +1 -0
  131. netgen/include/include/opti.hpp +1 -0
  132. netgen/include/include/parallel.hpp +1 -0
  133. netgen/include/include/stlgeom.hpp +1 -0
  134. netgen/include/include/visual.hpp +1 -0
  135. netgen/include/interface/rw_medit.hpp +11 -0
  136. netgen/include/interface/writeuser.hpp +80 -0
  137. netgen/include/linalg/densemat.hpp +414 -0
  138. netgen/include/linalg/linalg.hpp +29 -0
  139. netgen/include/linalg/opti.hpp +142 -0
  140. netgen/include/linalg/polynomial.hpp +47 -0
  141. netgen/include/linalg/vector.hpp +217 -0
  142. netgen/include/meshing/adfront2.hpp +274 -0
  143. netgen/include/meshing/adfront3.hpp +332 -0
  144. netgen/include/meshing/basegeom.hpp +370 -0
  145. netgen/include/meshing/bcfunctions.hpp +53 -0
  146. netgen/include/meshing/bisect.hpp +72 -0
  147. netgen/include/meshing/boundarylayer.hpp +113 -0
  148. netgen/include/meshing/classifyhpel.hpp +1984 -0
  149. netgen/include/meshing/clusters.hpp +46 -0
  150. netgen/include/meshing/curvedelems.hpp +274 -0
  151. netgen/include/meshing/delaunay2d.hpp +73 -0
  152. netgen/include/meshing/fieldlines.hpp +103 -0
  153. netgen/include/meshing/findip.hpp +198 -0
  154. netgen/include/meshing/findip2.hpp +103 -0
  155. netgen/include/meshing/geomsearch.hpp +69 -0
  156. netgen/include/meshing/global.hpp +54 -0
  157. netgen/include/meshing/hpref_hex.hpp +330 -0
  158. netgen/include/meshing/hpref_prism.hpp +3405 -0
  159. netgen/include/meshing/hpref_pyramid.hpp +154 -0
  160. netgen/include/meshing/hpref_quad.hpp +2082 -0
  161. netgen/include/meshing/hpref_segm.hpp +122 -0
  162. netgen/include/meshing/hpref_tet.hpp +4230 -0
  163. netgen/include/meshing/hpref_trig.hpp +848 -0
  164. netgen/include/meshing/hprefinement.hpp +366 -0
  165. netgen/include/meshing/improve2.hpp +178 -0
  166. netgen/include/meshing/improve3.hpp +151 -0
  167. netgen/include/meshing/localh.hpp +223 -0
  168. netgen/include/meshing/meshclass.hpp +1076 -0
  169. netgen/include/meshing/meshfunc.hpp +47 -0
  170. netgen/include/meshing/meshing.hpp +63 -0
  171. netgen/include/meshing/meshing2.hpp +163 -0
  172. netgen/include/meshing/meshing3.hpp +123 -0
  173. netgen/include/meshing/meshtool.hpp +90 -0
  174. netgen/include/meshing/meshtype.hpp +1930 -0
  175. netgen/include/meshing/msghandler.hpp +62 -0
  176. netgen/include/meshing/paralleltop.hpp +172 -0
  177. netgen/include/meshing/python_mesh.hpp +206 -0
  178. netgen/include/meshing/ruler2.hpp +172 -0
  179. netgen/include/meshing/ruler3.hpp +211 -0
  180. netgen/include/meshing/soldata.hpp +141 -0
  181. netgen/include/meshing/specials.hpp +17 -0
  182. netgen/include/meshing/surfacegeom.hpp +73 -0
  183. netgen/include/meshing/topology.hpp +1003 -0
  184. netgen/include/meshing/validate.hpp +21 -0
  185. netgen/include/meshing/visual_interface.hpp +71 -0
  186. netgen/include/mydefs.hpp +70 -0
  187. netgen/include/nginterface.h +474 -0
  188. netgen/include/nginterface_v2.hpp +406 -0
  189. netgen/include/nglib.h +697 -0
  190. netgen/include/nglib_occ.h +50 -0
  191. netgen/include/occ/occ_edge.hpp +47 -0
  192. netgen/include/occ/occ_face.hpp +52 -0
  193. netgen/include/occ/occ_solid.hpp +23 -0
  194. netgen/include/occ/occ_utils.hpp +376 -0
  195. netgen/include/occ/occ_vertex.hpp +30 -0
  196. netgen/include/occ/occgeom.hpp +659 -0
  197. netgen/include/occ/occmeshsurf.hpp +168 -0
  198. netgen/include/occ/vsocc.hpp +33 -0
  199. netgen/include/pybind11/LICENSE +29 -0
  200. netgen/include/pybind11/attr.h +722 -0
  201. netgen/include/pybind11/buffer_info.h +208 -0
  202. netgen/include/pybind11/cast.h +2361 -0
  203. netgen/include/pybind11/chrono.h +228 -0
  204. netgen/include/pybind11/common.h +2 -0
  205. netgen/include/pybind11/complex.h +74 -0
  206. netgen/include/pybind11/conduit/README.txt +15 -0
  207. netgen/include/pybind11/conduit/pybind11_conduit_v1.h +116 -0
  208. netgen/include/pybind11/conduit/pybind11_platform_abi_id.h +87 -0
  209. netgen/include/pybind11/conduit/wrap_include_python_h.h +72 -0
  210. netgen/include/pybind11/critical_section.h +56 -0
  211. netgen/include/pybind11/detail/class.h +823 -0
  212. netgen/include/pybind11/detail/common.h +1348 -0
  213. netgen/include/pybind11/detail/cpp_conduit.h +75 -0
  214. netgen/include/pybind11/detail/descr.h +226 -0
  215. netgen/include/pybind11/detail/dynamic_raw_ptr_cast_if_possible.h +39 -0
  216. netgen/include/pybind11/detail/exception_translation.h +71 -0
  217. netgen/include/pybind11/detail/function_record_pyobject.h +191 -0
  218. netgen/include/pybind11/detail/init.h +538 -0
  219. netgen/include/pybind11/detail/internals.h +799 -0
  220. netgen/include/pybind11/detail/native_enum_data.h +209 -0
  221. netgen/include/pybind11/detail/pybind11_namespace_macros.h +82 -0
  222. netgen/include/pybind11/detail/struct_smart_holder.h +378 -0
  223. netgen/include/pybind11/detail/type_caster_base.h +1591 -0
  224. netgen/include/pybind11/detail/typeid.h +65 -0
  225. netgen/include/pybind11/detail/using_smart_holder.h +22 -0
  226. netgen/include/pybind11/detail/value_and_holder.h +90 -0
  227. netgen/include/pybind11/eigen/common.h +9 -0
  228. netgen/include/pybind11/eigen/matrix.h +723 -0
  229. netgen/include/pybind11/eigen/tensor.h +521 -0
  230. netgen/include/pybind11/eigen.h +12 -0
  231. netgen/include/pybind11/embed.h +320 -0
  232. netgen/include/pybind11/eval.h +161 -0
  233. netgen/include/pybind11/functional.h +147 -0
  234. netgen/include/pybind11/gil.h +199 -0
  235. netgen/include/pybind11/gil_safe_call_once.h +102 -0
  236. netgen/include/pybind11/gil_simple.h +37 -0
  237. netgen/include/pybind11/iostream.h +265 -0
  238. netgen/include/pybind11/native_enum.h +67 -0
  239. netgen/include/pybind11/numpy.h +2312 -0
  240. netgen/include/pybind11/operators.h +202 -0
  241. netgen/include/pybind11/options.h +92 -0
  242. netgen/include/pybind11/pybind11.h +3645 -0
  243. netgen/include/pybind11/pytypes.h +2680 -0
  244. netgen/include/pybind11/stl/filesystem.h +114 -0
  245. netgen/include/pybind11/stl.h +666 -0
  246. netgen/include/pybind11/stl_bind.h +858 -0
  247. netgen/include/pybind11/subinterpreter.h +299 -0
  248. netgen/include/pybind11/trampoline_self_life_support.h +65 -0
  249. netgen/include/pybind11/type_caster_pyobject_ptr.h +61 -0
  250. netgen/include/pybind11/typing.h +298 -0
  251. netgen/include/pybind11/warnings.h +75 -0
  252. netgen/include/stlgeom/meshstlsurface.hpp +67 -0
  253. netgen/include/stlgeom/stlgeom.hpp +491 -0
  254. netgen/include/stlgeom/stlline.hpp +193 -0
  255. netgen/include/stlgeom/stltool.hpp +331 -0
  256. netgen/include/stlgeom/stltopology.hpp +419 -0
  257. netgen/include/stlgeom/vsstl.hpp +58 -0
  258. netgen/include/visualization/meshdoc.hpp +42 -0
  259. netgen/include/visualization/mvdraw.hpp +325 -0
  260. netgen/include/visualization/vispar.hpp +128 -0
  261. netgen/include/visualization/visual.hpp +28 -0
  262. netgen/include/visualization/visual_api.hpp +10 -0
  263. netgen/include/visualization/vssolution.hpp +399 -0
  264. netgen/lib/libnggui.lib +0 -0
  265. netgen/lib/ngcore.lib +0 -0
  266. netgen/lib/nglib.lib +0 -0
  267. netgen/lib/togl.lib +0 -0
  268. netgen/libnggui.dll +0 -0
  269. netgen/libngguipy.lib +0 -0
  270. netgen/libngguipy.pyd +0 -0
  271. netgen/libngpy/_NgOCC.pyi +1545 -0
  272. netgen/libngpy/__init__.pyi +7 -0
  273. netgen/libngpy/_csg.pyi +259 -0
  274. netgen/libngpy/_geom2d.pyi +323 -0
  275. netgen/libngpy/_meshing.pyi +1111 -0
  276. netgen/libngpy/_stl.pyi +131 -0
  277. netgen/libngpy.lib +0 -0
  278. netgen/libngpy.pyd +0 -0
  279. netgen/meshing.py +65 -0
  280. netgen/ngcore.dll +0 -0
  281. netgen/nglib.dll +0 -0
  282. netgen/occ.py +52 -0
  283. netgen/read_gmsh.py +259 -0
  284. netgen/read_meshio.py +22 -0
  285. netgen/stl.py +2 -0
  286. netgen/togl.dll +0 -0
  287. netgen/version.py +2 -0
  288. netgen/webgui.py +529 -0
  289. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boundarycondition.geo +16 -0
  290. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boxcyl.geo +32 -0
  291. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/circle_on_cube.geo +27 -0
  292. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cone.geo +13 -0
  293. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cube.geo +16 -0
  294. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandring.geo +55 -0
  295. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandspheres.geo +21 -0
  296. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemcyl.geo +18 -0
  297. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemsphere.geo +19 -0
  298. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylinder.geo +12 -0
  299. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylsphere.geo +12 -0
  300. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/doc/ng4.pdf +0 -0
  301. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipsoid.geo +8 -0
  302. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipticcyl.geo +10 -0
  303. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/extrusion.geo +99 -0
  304. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/fichera.geo +24 -0
  305. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/frame.step +11683 -0
  306. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/hinge.stl +8486 -0
  307. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/lshape3d.geo +26 -0
  308. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes.geo +26 -0
  309. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes2.geo +26 -0
  310. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/matrix.geo +27 -0
  311. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ortho.geo +11 -0
  312. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/part1.stl +2662 -0
  313. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/period.geo +33 -0
  314. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/exportNeutral.py +26 -0
  315. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/mesh.py +19 -0
  316. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/shaft.geo +65 -0
  317. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/revolution.geo +18 -0
  318. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/screw.step +1694 -0
  319. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sculpture.geo +13 -0
  320. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shaft.geo +65 -0
  321. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shell.geo +10 -0
  322. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphere.geo +8 -0
  323. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphereincube.geo +17 -0
  324. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/square.in2d +35 -0
  325. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarecircle.in2d +48 -0
  326. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarehole.in2d +47 -0
  327. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/torus.geo +8 -0
  328. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/trafo.geo +57 -0
  329. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twobricks.geo +15 -0
  330. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocubes.geo +18 -0
  331. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocyl.geo +16 -0
  332. netgen_mesher-6.2.2506.post35.dev0.dist-info/METADATA +15 -0
  333. netgen_mesher-6.2.2506.post35.dev0.dist-info/RECORD +340 -0
  334. netgen_mesher-6.2.2506.post35.dev0.dist-info/WHEEL +5 -0
  335. netgen_mesher-6.2.2506.post35.dev0.dist-info/entry_points.txt +2 -0
  336. netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/AUTHORS +1 -0
  337. netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/LICENSE +504 -0
  338. netgen_mesher-6.2.2506.post35.dev0.dist-info/top_level.txt +2 -0
  339. pyngcore/__init__.py +1 -0
  340. 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