From 2b56cf87a863f9317ca8a3522aeb57ad15fa6741 Mon Sep 17 00:00:00 2001
From: ninja <914440382@qq.com>
Date: Mon, 15 Dec 2025 22:06:49 +0800
Subject: [PATCH] Init
---
.gitignore | 451 ++
HOOPSExchangePublishSample.props | 42 +
exchange.sln | 303 ++
.../BrepAdaptor/BrepAdaptor.cpp | 194 +
.../BrepAdaptor/BrepAdaptor.vcxproj | 165 +
.../BrepAdaptor/BrepAdaptor.vcxproj.filters | 22 +
.../CascadedAttributes/CascadedAttributes.cpp | 462 ++
.../CascadedAttributes.vcxproj | 195 +
.../CascadedAttributes.vcxproj.filters | 22 +
.../exchangesource/Collision/Collision.cpp | 425 ++
.../Collision/Collision.vcxproj | 199 +
.../Collision/Collision.vcxproj.filters | 126 +
.../Collision/createtessellatedbox.cpp | 175 +
.../Collision/visitor/A3DVector.h | 121 +
.../Collision/visitor/BrepTraverse.cpp | 312 ++
.../Collision/visitor/BrepTraverse.h | 146 +
.../visitor/CascadedAttributeConnector.cpp | 213 +
.../visitor/CascadedAttributeConnector.h | 59 +
.../Collision/visitor/Connector.h | 35 +
.../Collision/visitor/MarkupTessConnector.cpp | 653 +++
.../Collision/visitor/MarkupTessConnector.h | 216 +
.../Collision/visitor/MarkupTraverse.cpp | 228 +
.../Collision/visitor/MarkupTraverse.h | 198 +
.../Collision/visitor/Matrix.cpp | 688 +++
.../exchangesource/Collision/visitor/Matrix.h | 105 +
.../Collision/visitor/TessConnector.cpp | 1431 ++++++
.../Collision/visitor/TessConnector.h | 147 +
.../Collision/visitor/TransfoConnector.cpp | 117 +
.../Collision/visitor/TransfoConnector.h | 44 +
.../Collision/visitor/TreeTraverse.cpp | 701 +++
.../Collision/visitor/TreeTraverse.h | 318 ++
.../Collision/visitor/ViewTraverse.cpp | 38 +
.../Collision/visitor/ViewTraverse.h | 45 +
.../Collision/visitor/VisitorBrep.h | 65 +
.../visitor/VisitorCascadedAttribute.cpp | 286 ++
.../visitor/VisitorCascadedAttribute.h | 76 +
.../Collision/visitor/VisitorContainer.cpp | 631 +++
.../Collision/visitor/VisitorContainer.h | 236 +
.../Collision/visitor/VisitorTessellation.cpp | 90 +
.../Collision/visitor/VisitorTessellation.h | 45 +
.../Collision/visitor/VisitorTransfo.cpp | 324 ++
.../Collision/visitor/VisitorTransfo.h | 83 +
.../Collision/visitor/VisitorTree.cpp | 97 +
.../Collision/visitor/VisitorTree.h | 73 +
.../Collision/visitor/Visitors.h | 183 +
.../CreatePRCBrepWithGeometry.cpp | 478 +++
.../CreatePRCBrepWithGeometry.vcxproj | 180 +
.../CreatePRCBrepWithGeometry.vcxproj.filters | 22 +
.../CreatePRCCubes/CreateModelFile.cpp | 651 +++
.../CreatePRCCubes/CreateModelFile.h | 28 +
.../CreatePRCCubes/CreatePRCCubes.cpp | 126 +
.../CreatePRCCubes/CreatePRCCubes.vcxproj | 207 +
.../CreatePRCCubes.vcxproj.filters | 98 +
.../CreatePRCCubes/CreatePRCCubesDef.cpp | 75 +
.../CreatePRCCubes/CreatePRCCubesDef.h | 43 +
.../CreatePRCCubes/CreateTessellatedCubes.cpp | 188 +
.../CreatePRCCubes/CreateTessellatedCubes.h | 113 +
.../exchangesource/CreatePRCCubes/Logo.jpg | Bin 0 -> 14069 bytes
.../CreatePRCCubes/modules/CreateGraphics.cpp | 144 +
.../CreatePRCCubes/modules/CreateGraphics.h | 45 +
.../modules/CreateLinkedItem.cpp | 117 +
.../CreatePRCCubes/modules/CreateLinkedItem.h | 40 +
.../CreatePRCCubes/modules/CreateMarkups.cpp | 444 ++
.../CreatePRCCubes/modules/CreateMarkups.h | 69 +
.../CreatePRCCubes/modules/CreateTextures.cpp | 161 +
.../CreatePRCCubes/modules/CreateTextures.h | 30 +
.../CreatePRCCubes/modules/CreateViews.cpp | 275 ++
.../CreatePRCCubes/modules/CreateViews.h | 74 +
.../HXWBasicTessellation.cpp | 112 +
.../HXWBasicTessellation.h | 58 +
.../tessellation_wrapper/HXWEntity.cpp | 29 +
.../tessellation_wrapper/HXWEntity.h | 53 +
.../HXWMarkupTessellation.cpp | 556 +++
.../HXWMarkupTessellation.h | 161 +
.../DrawingViewer/DrawingViewer.vcxproj | 214 +
.../DrawingViewer.vcxproj.filters | 57 +
.../DrawingViewer/callback_opengl.cpp | 1260 ++++++
.../DrawingViewer/callback_opengl.h | 190 +
.../DrawingViewer/drawing_collect.cpp | 138 +
.../DrawingViewer/drawing_draw.cpp | 481 +++
.../DrawingViewer/drawing_main.cpp | 868 ++++
.../DrawingViewer/drawing_main.h | 51 +
.../DrawingViewer/drawing_parse.cpp | 431 ++
.../DrawingViewer/drawing_parse.h | 67 +
.../DumpFeatureTree/DumpFeatureTree.cpp | 127 +
.../DumpFeatureTree/DumpFeatureTree.h | 35 +
.../DumpFeatureTree/DumpFeatureTree.vcxproj | 173 +
.../DumpFeatureTree.vcxproj.filters | 99 +
.../DumpFeatureTree/FeatureHTML.xsl | 353 ++
.../DumpFeatureTree/HXFeatureTreeReport.cpp | 819 ++++
.../DumpFeatureTree/HXFeatureTreeReport.h | 70 +
.../DumpFeatureTree/HXmlElement.cpp | 164 +
.../DumpFeatureTree/HXmlElement.h | 54 +
.../DumpFeatureTree/HXmlReport.cpp | 84 +
.../DumpFeatureTree/HXmlReport.h | 44 +
.../DumpFeatureTree/TinyXML/tinystr.cpp | 111 +
.../DumpFeatureTree/TinyXML/tinystr.h | 305 ++
.../DumpFeatureTree/TinyXML/tinyxml.cpp | 1886 ++++++++
.../DumpFeatureTree/TinyXML/tinyxml.h | 1805 ++++++++
.../DumpFeatureTree/TinyXML/tinyxmlerror.cpp | 52 +
.../DumpFeatureTree/TinyXML/tinyxmlparser.cpp | 1638 +++++++
.../DumpFeatureTree/Visitor/Connector.h | 37 +
.../DumpFeatureTree/Visitor/TreeTraverse.cpp | 576 +++
.../DumpFeatureTree/Visitor/TreeTraverse.h | 364 ++
.../Visitor/VisitorContainer.cpp | 586 +++
.../Visitor/VisitorContainer.h | 239 ++
.../DumpFeatureTree/Visitor/VisitorTree.cpp | 87 +
.../DumpFeatureTree/Visitor/VisitorTree.h | 57 +
.../DumpFeatureTree/Visitor/Visitors.h | 206 +
.../ImportExport/ImportExport.cpp | 82 +
.../ImportExport/ImportExport.vcxproj | 165 +
.../ImportExport/ImportExport.vcxproj.filters | 22 +
.../IncrementalLoad/IncrementalLoad.cpp | 166 +
.../IncrementalLoad/IncrementalLoad.vcxproj | 180 +
.../IncrementalLoad.vcxproj.filters | 22 +
.../LoadMultiConfigCADFile.cpp | 170 +
.../LoadMultiConfigCADFile.vcxproj | 180 +
.../LoadMultiConfigCADFile.vcxproj.filters | 22 +
.../MultiplePRCFiles/MultiplePRC.cpp | 403 ++
.../MultiplePRCFiles/MultiplePRCFiles.vcxproj | 167 +
.../MultiplePRCFiles.vcxproj.filters | 22 +
.../MultiplePRCFiles/MultiplePRCRecurs.cpp | 476 ++
.../NetWrapper/AssemblyInfo.cpp | 49 +
.../NetWrapper/ConsoleApplication.csproj | 138 +
.../NetWrapper/ConsoleApplication/Program.cs | 196 +
.../Properties/AssemblyInfo.cs | 48 +
.../TechSoft3D.Exchange.NetWrapper.vcxproj | 167 +
...Soft3D.Exchange.NetWrapper.vcxproj.filters | 30 +
.../exchangesource/NetWrapper/Translation.cpp | 583 +++
.../exchangesource/NetWrapper/Translation.h | 154 +
.../exchangesource/PRC2IFCXML/PRC2IFCXML.cpp | 91 +
.../PRC2IFCXML/PRC2IFCXML.vcxproj | 176 +
.../PRC2IFCXML/PRC2IFCXML.vcxproj.filters | 22 +
.../PRC2XML/ExchangeManagement.cpp | 46 +
.../PRC2XML/ExchangeManagement.h | 23 +
exchange/exchangesource/PRC2XML/PRC2XML.cpp | 212 +
exchange/exchangesource/PRC2XML/PRC2XML.h | 219 +
.../exchangesource/PRC2XML/PRC2XML.vcxproj | 199 +
.../PRC2XML/PRC2XML.vcxproj.filters | 111 +
.../PRC2XML/PRC2XMLConstraint.cpp | 172 +
.../exchangesource/PRC2XML/PRC2XMLFeature.cpp | 256 ++
.../PRC2XML/PRC2XMLGeometryCrv.cpp | 353 ++
.../PRC2XML/PRC2XMLGeometrySrf.cpp | 142 +
.../exchangesource/PRC2XML/PRC2XMLGlobal.cpp | 407 ++
.../PRC2XML/PRC2XMLIfcRelationships.cpp | 215 +
.../exchangesource/PRC2XML/PRC2XMLMarkup.cpp | 928 ++++
.../PRC2XML/PRC2XMLMarkupDefinition.cpp | 93 +
.../PRC2XML/PRC2XMLMarkupDimension.cpp | 593 +++
.../PRC2XML/PRC2XMLMarkupGDT.cpp | 658 +++
.../PRC2XML/PRC2XMLMarkupText.cpp | 262 ++
.../PRC2XML/PRC2XMLRepItems.cpp | 478 +++
.../PRC2XML/PRC2XMLRootEntities.cpp | 197 +
.../PRC2XML/PRC2XMLStructure.cpp | 614 +++
.../PRC2XML/PRC2XMLTessellation.cpp | 316 ++
.../exchangesource/PRC2XML/PRC2XMLTexture.cpp | 94 +
.../exchangesource/PRC2XML/PRC2XMLTools.cpp | 450 ++
.../PRC2XML/PRC2XMLTopology.cpp | 417 ++
.../PRC2XML/TinyXML/tinystr.cpp | 111 +
.../exchangesource/PRC2XML/TinyXML/tinystr.h | 305 ++
.../PRC2XML/TinyXML/tinyxml.cpp | 1886 ++++++++
.../exchangesource/PRC2XML/TinyXML/tinyxml.h | 1805 ++++++++
.../PRC2XML/TinyXML/tinyxmlerror.cpp | 52 +
.../PRC2XML/TinyXML/tinyxmlparser.cpp | 1638 +++++++
exchange/exchangesource/PRC2XML/main.cpp | 82 +
exchange/exchangesource/PRC2XML/read_me.txt | 9 +
exchange/exchangesource/SewBrep/SewBrep.cpp | 104 +
.../exchangesource/SewBrep/SewBrep.vcxproj | 164 +
.../SewBrep/SewBrep.vcxproj.filters | 22 +
.../exchangesource/Shattered/Shattered.cpp | 272 ++
.../Shattered/Shattered.vcxproj | 164 +
.../Shattered/Shattered.vcxproj.filters | 22 +
.../TranslateToPkParts/PARA.props | 24 +
.../TranslateToPkParts/TranslateToPkParts.cpp | 481 +++
.../TranslateToPkParts.vcxproj | 182 +
.../TranslateToPkParts.vcxproj.filters | 31 +
.../exchangesource/TranslateToPkParts/fg.c | 8 +
.../TranslateToPkParts/frustrum.c | 15 +
.../TranslateToPkParts/frustrum_delta.c | 5 +
exchange/exchangesource/Viewer/A3DVector.h | 211 +
exchange/exchangesource/Viewer/BrepTraverse.h | 146 +
.../Viewer/CascadedAttributeConnector.h | 59 +
exchange/exchangesource/Viewer/ComputeHLR.cpp | 299 ++
.../exchangesource/Viewer/ComputeSection.cpp | 133 +
exchange/exchangesource/Viewer/Connector.h | 39 +
exchange/exchangesource/Viewer/Draw.cpp | 3819 +++++++++++++++++
.../Viewer/MarkupTessConnector.h | 224 +
.../exchangesource/Viewer/MarkupTraverse.h | 202 +
exchange/exchangesource/Viewer/Matrix.h | 738 ++++
.../exchangesource/Viewer/TessConnector.h | 145 +
.../exchangesource/Viewer/TransfoConnector.h | 44 +
exchange/exchangesource/Viewer/TreeTraverse.h | 263 ++
exchange/exchangesource/Viewer/ViewTraverse.h | 45 +
exchange/exchangesource/Viewer/Viewer.cpp | 1414 ++++++
exchange/exchangesource/Viewer/Viewer.h | 61 +
exchange/exchangesource/Viewer/Viewer.vcxproj | 240 ++
.../Viewer/Viewer.vcxproj.filters | 141 +
exchange/exchangesource/Viewer/VisitorBrep.h | 73 +
.../Viewer/VisitorCascadedAttribute.h | 76 +
.../exchangesource/Viewer/VisitorContainer.h | 227 +
.../Viewer/VisitorTessellation.h | 49 +
.../exchangesource/Viewer/VisitorTransfo.h | 83 +
exchange/exchangesource/Viewer/VisitorTree.h | 73 +
exchange/exchangesource/Viewer/Visitors.h | 192 +
.../exchangesource/Viewer/callback_opengl.cpp | 448 ++
.../exchangesource/Viewer/callback_opengl.h | 125 +
.../Viewer/glut/include/GL/glut.h | 716 +++
exchange/exchangesource/Viewer/trackball.cpp | 243 ++
exchange/exchangesource/Viewer/trackball.h | 100 +
.../Viewer/traverse/BrepTraverse.cpp | 312 ++
.../traverse/CascadedAttributeConnector.cpp | 213 +
.../Viewer/traverse/MarkupTessConnector.cpp | 644 +++
.../Viewer/traverse/MarkupTraverse.cpp | 255 ++
.../Viewer/traverse/TessConnector.cpp | 1234 ++++++
.../Viewer/traverse/TransfoConnector.cpp | 117 +
.../Viewer/traverse/TreeTraverse.cpp | 507 +++
.../Viewer/traverse/ViewTraverse.cpp | 38 +
.../traverse/VisitorCascadedAttribute.cpp | 289 ++
.../Viewer/traverse/VisitorContainer.cpp | 610 +++
.../Viewer/traverse/VisitorTessellation.cpp | 321 ++
.../Viewer/traverse/VisitorTransfo.cpp | 321 ++
.../Viewer/traverse/VisitorTree.cpp | 97 +
.../Viewer/traverse/visitor.cpp | 11 +
exchange/exchangesource/common.hpp | 268 ++
publishadvanced.sln | 107 +
publishstandard.sln | 81 +
225 files changed, 63711 insertions(+)
create mode 100644 .gitignore
create mode 100644 HOOPSExchangePublishSample.props
create mode 100644 exchange.sln
create mode 100644 exchange/exchangesource/BrepAdaptor/BrepAdaptor.cpp
create mode 100644 exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj
create mode 100644 exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj.filters
create mode 100644 exchange/exchangesource/CascadedAttributes/CascadedAttributes.cpp
create mode 100644 exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj
create mode 100644 exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj.filters
create mode 100644 exchange/exchangesource/Collision/Collision.cpp
create mode 100644 exchange/exchangesource/Collision/Collision.vcxproj
create mode 100644 exchange/exchangesource/Collision/Collision.vcxproj.filters
create mode 100644 exchange/exchangesource/Collision/createtessellatedbox.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/A3DVector.h
create mode 100644 exchange/exchangesource/Collision/visitor/BrepTraverse.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/BrepTraverse.h
create mode 100644 exchange/exchangesource/Collision/visitor/CascadedAttributeConnector.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/CascadedAttributeConnector.h
create mode 100644 exchange/exchangesource/Collision/visitor/Connector.h
create mode 100644 exchange/exchangesource/Collision/visitor/MarkupTessConnector.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/MarkupTessConnector.h
create mode 100644 exchange/exchangesource/Collision/visitor/MarkupTraverse.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/MarkupTraverse.h
create mode 100644 exchange/exchangesource/Collision/visitor/Matrix.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/Matrix.h
create mode 100644 exchange/exchangesource/Collision/visitor/TessConnector.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/TessConnector.h
create mode 100644 exchange/exchangesource/Collision/visitor/TransfoConnector.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/TransfoConnector.h
create mode 100644 exchange/exchangesource/Collision/visitor/TreeTraverse.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/TreeTraverse.h
create mode 100644 exchange/exchangesource/Collision/visitor/ViewTraverse.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/ViewTraverse.h
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorBrep.h
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorCascadedAttribute.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorCascadedAttribute.h
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorContainer.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorContainer.h
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorTessellation.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorTessellation.h
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorTransfo.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorTransfo.h
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorTree.cpp
create mode 100644 exchange/exchangesource/Collision/visitor/VisitorTree.h
create mode 100644 exchange/exchangesource/Collision/visitor/Visitors.h
create mode 100644 exchange/exchangesource/CreatePRCBrepWithGeometry/CreatePRCBrepWithGeometry.cpp
create mode 100644 exchange/exchangesource/CreatePRCBrepWithGeometry/CreatePRCBrepWithGeometry.vcxproj
create mode 100644 exchange/exchangesource/CreatePRCBrepWithGeometry/CreatePRCBrepWithGeometry.vcxproj.filters
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreateModelFile.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreateModelFile.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreatePRCCubes.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreatePRCCubes.vcxproj
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreatePRCCubes.vcxproj.filters
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreatePRCCubesDef.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreatePRCCubesDef.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreateTessellatedCubes.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/CreateTessellatedCubes.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/Logo.jpg
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateGraphics.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateGraphics.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateLinkedItem.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateLinkedItem.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateMarkups.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateMarkups.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateTextures.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateTextures.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateViews.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/modules/CreateViews.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/tessellation_wrapper/HXWBasicTessellation.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/tessellation_wrapper/HXWBasicTessellation.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/tessellation_wrapper/HXWEntity.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/tessellation_wrapper/HXWEntity.h
create mode 100644 exchange/exchangesource/CreatePRCCubes/tessellation_wrapper/HXWMarkupTessellation.cpp
create mode 100644 exchange/exchangesource/CreatePRCCubes/tessellation_wrapper/HXWMarkupTessellation.h
create mode 100644 exchange/exchangesource/DrawingViewer/DrawingViewer.vcxproj
create mode 100644 exchange/exchangesource/DrawingViewer/DrawingViewer.vcxproj.filters
create mode 100644 exchange/exchangesource/DrawingViewer/callback_opengl.cpp
create mode 100644 exchange/exchangesource/DrawingViewer/callback_opengl.h
create mode 100644 exchange/exchangesource/DrawingViewer/drawing_collect.cpp
create mode 100644 exchange/exchangesource/DrawingViewer/drawing_draw.cpp
create mode 100644 exchange/exchangesource/DrawingViewer/drawing_main.cpp
create mode 100644 exchange/exchangesource/DrawingViewer/drawing_main.h
create mode 100644 exchange/exchangesource/DrawingViewer/drawing_parse.cpp
create mode 100644 exchange/exchangesource/DrawingViewer/drawing_parse.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/DumpFeatureTree.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/DumpFeatureTree.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/DumpFeatureTree.vcxproj
create mode 100644 exchange/exchangesource/DumpFeatureTree/DumpFeatureTree.vcxproj.filters
create mode 100644 exchange/exchangesource/DumpFeatureTree/FeatureHTML.xsl
create mode 100644 exchange/exchangesource/DumpFeatureTree/HXFeatureTreeReport.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/HXFeatureTreeReport.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/HXmlElement.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/HXmlElement.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/HXmlReport.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/HXmlReport.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/TinyXML/tinystr.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/TinyXML/tinystr.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/TinyXML/tinyxml.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/TinyXML/tinyxml.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/TinyXML/tinyxmlerror.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/TinyXML/tinyxmlparser.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/Connector.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/TreeTraverse.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/TreeTraverse.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/VisitorContainer.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/VisitorContainer.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/VisitorTree.cpp
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/VisitorTree.h
create mode 100644 exchange/exchangesource/DumpFeatureTree/Visitor/Visitors.h
create mode 100644 exchange/exchangesource/ImportExport/ImportExport.cpp
create mode 100644 exchange/exchangesource/ImportExport/ImportExport.vcxproj
create mode 100644 exchange/exchangesource/ImportExport/ImportExport.vcxproj.filters
create mode 100644 exchange/exchangesource/IncrementalLoad/IncrementalLoad.cpp
create mode 100644 exchange/exchangesource/IncrementalLoad/IncrementalLoad.vcxproj
create mode 100644 exchange/exchangesource/IncrementalLoad/IncrementalLoad.vcxproj.filters
create mode 100644 exchange/exchangesource/LoadMultiConfigCADFile/LoadMultiConfigCADFile.cpp
create mode 100644 exchange/exchangesource/LoadMultiConfigCADFile/LoadMultiConfigCADFile.vcxproj
create mode 100644 exchange/exchangesource/LoadMultiConfigCADFile/LoadMultiConfigCADFile.vcxproj.filters
create mode 100644 exchange/exchangesource/MultiplePRCFiles/MultiplePRC.cpp
create mode 100644 exchange/exchangesource/MultiplePRCFiles/MultiplePRCFiles.vcxproj
create mode 100644 exchange/exchangesource/MultiplePRCFiles/MultiplePRCFiles.vcxproj.filters
create mode 100644 exchange/exchangesource/MultiplePRCFiles/MultiplePRCRecurs.cpp
create mode 100644 exchange/exchangesource/NetWrapper/AssemblyInfo.cpp
create mode 100644 exchange/exchangesource/NetWrapper/ConsoleApplication.csproj
create mode 100644 exchange/exchangesource/NetWrapper/ConsoleApplication/Program.cs
create mode 100644 exchange/exchangesource/NetWrapper/ConsoleApplication/Properties/AssemblyInfo.cs
create mode 100644 exchange/exchangesource/NetWrapper/TechSoft3D.Exchange.NetWrapper.vcxproj
create mode 100644 exchange/exchangesource/NetWrapper/TechSoft3D.Exchange.NetWrapper.vcxproj.filters
create mode 100644 exchange/exchangesource/NetWrapper/Translation.cpp
create mode 100644 exchange/exchangesource/NetWrapper/Translation.h
create mode 100644 exchange/exchangesource/PRC2IFCXML/PRC2IFCXML.cpp
create mode 100644 exchange/exchangesource/PRC2IFCXML/PRC2IFCXML.vcxproj
create mode 100644 exchange/exchangesource/PRC2IFCXML/PRC2IFCXML.vcxproj.filters
create mode 100644 exchange/exchangesource/PRC2XML/ExchangeManagement.cpp
create mode 100644 exchange/exchangesource/PRC2XML/ExchangeManagement.h
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XML.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XML.h
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XML.vcxproj
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XML.vcxproj.filters
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLConstraint.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLFeature.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLGeometryCrv.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLGeometrySrf.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLGlobal.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLIfcRelationships.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLMarkup.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLMarkupDefinition.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLMarkupDimension.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLMarkupGDT.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLMarkupText.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLRepItems.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLRootEntities.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLStructure.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLTessellation.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLTexture.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLTools.cpp
create mode 100644 exchange/exchangesource/PRC2XML/PRC2XMLTopology.cpp
create mode 100644 exchange/exchangesource/PRC2XML/TinyXML/tinystr.cpp
create mode 100644 exchange/exchangesource/PRC2XML/TinyXML/tinystr.h
create mode 100644 exchange/exchangesource/PRC2XML/TinyXML/tinyxml.cpp
create mode 100644 exchange/exchangesource/PRC2XML/TinyXML/tinyxml.h
create mode 100644 exchange/exchangesource/PRC2XML/TinyXML/tinyxmlerror.cpp
create mode 100644 exchange/exchangesource/PRC2XML/TinyXML/tinyxmlparser.cpp
create mode 100644 exchange/exchangesource/PRC2XML/main.cpp
create mode 100644 exchange/exchangesource/PRC2XML/read_me.txt
create mode 100644 exchange/exchangesource/SewBrep/SewBrep.cpp
create mode 100644 exchange/exchangesource/SewBrep/SewBrep.vcxproj
create mode 100644 exchange/exchangesource/SewBrep/SewBrep.vcxproj.filters
create mode 100644 exchange/exchangesource/Shattered/Shattered.cpp
create mode 100644 exchange/exchangesource/Shattered/Shattered.vcxproj
create mode 100644 exchange/exchangesource/Shattered/Shattered.vcxproj.filters
create mode 100644 exchange/exchangesource/TranslateToPkParts/PARA.props
create mode 100644 exchange/exchangesource/TranslateToPkParts/TranslateToPkParts.cpp
create mode 100644 exchange/exchangesource/TranslateToPkParts/TranslateToPkParts.vcxproj
create mode 100644 exchange/exchangesource/TranslateToPkParts/TranslateToPkParts.vcxproj.filters
create mode 100644 exchange/exchangesource/TranslateToPkParts/fg.c
create mode 100644 exchange/exchangesource/TranslateToPkParts/frustrum.c
create mode 100644 exchange/exchangesource/TranslateToPkParts/frustrum_delta.c
create mode 100644 exchange/exchangesource/Viewer/A3DVector.h
create mode 100644 exchange/exchangesource/Viewer/BrepTraverse.h
create mode 100644 exchange/exchangesource/Viewer/CascadedAttributeConnector.h
create mode 100644 exchange/exchangesource/Viewer/ComputeHLR.cpp
create mode 100644 exchange/exchangesource/Viewer/ComputeSection.cpp
create mode 100644 exchange/exchangesource/Viewer/Connector.h
create mode 100644 exchange/exchangesource/Viewer/Draw.cpp
create mode 100644 exchange/exchangesource/Viewer/MarkupTessConnector.h
create mode 100644 exchange/exchangesource/Viewer/MarkupTraverse.h
create mode 100644 exchange/exchangesource/Viewer/Matrix.h
create mode 100644 exchange/exchangesource/Viewer/TessConnector.h
create mode 100644 exchange/exchangesource/Viewer/TransfoConnector.h
create mode 100644 exchange/exchangesource/Viewer/TreeTraverse.h
create mode 100644 exchange/exchangesource/Viewer/ViewTraverse.h
create mode 100644 exchange/exchangesource/Viewer/Viewer.cpp
create mode 100644 exchange/exchangesource/Viewer/Viewer.h
create mode 100644 exchange/exchangesource/Viewer/Viewer.vcxproj
create mode 100644 exchange/exchangesource/Viewer/Viewer.vcxproj.filters
create mode 100644 exchange/exchangesource/Viewer/VisitorBrep.h
create mode 100644 exchange/exchangesource/Viewer/VisitorCascadedAttribute.h
create mode 100644 exchange/exchangesource/Viewer/VisitorContainer.h
create mode 100644 exchange/exchangesource/Viewer/VisitorTessellation.h
create mode 100644 exchange/exchangesource/Viewer/VisitorTransfo.h
create mode 100644 exchange/exchangesource/Viewer/VisitorTree.h
create mode 100644 exchange/exchangesource/Viewer/Visitors.h
create mode 100644 exchange/exchangesource/Viewer/callback_opengl.cpp
create mode 100644 exchange/exchangesource/Viewer/callback_opengl.h
create mode 100644 exchange/exchangesource/Viewer/glut/include/GL/glut.h
create mode 100644 exchange/exchangesource/Viewer/trackball.cpp
create mode 100644 exchange/exchangesource/Viewer/trackball.h
create mode 100644 exchange/exchangesource/Viewer/traverse/BrepTraverse.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/CascadedAttributeConnector.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/MarkupTessConnector.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/MarkupTraverse.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/TessConnector.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/TransfoConnector.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/TreeTraverse.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/ViewTraverse.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/VisitorCascadedAttribute.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/VisitorContainer.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/VisitorTessellation.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/VisitorTransfo.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/VisitorTree.cpp
create mode 100644 exchange/exchangesource/Viewer/traverse/visitor.cpp
create mode 100644 exchange/exchangesource/common.hpp
create mode 100644 publishadvanced.sln
create mode 100644 publishstandard.sln
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..853fb39
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,451 @@
+# ---> VisualStudio
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
+
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Mono auto generated files
+mono_crash.*
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Ii][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
+
+# Visual Studio 2015/2017 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# Visual Studio 2017 auto generated files
+Generated\ Files/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-*.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# Benchmark Results
+BenchmarkDotNet.Artifacts/
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# ASP.NET Scaffolding
+ScaffoldingReadMe.txt
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+# but not Directory.Build.rsp, as it configures directory-level build defaults
+!Directory.Build.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.tlog
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# Visual Studio Trace Files
+*.e2e
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# AxoCover is a Code Coverage Tool
+.axoCover/*
+!.axoCover/settings.json
+
+# Coverlet is a free, cross platform Code Coverage Tool
+coverage*.json
+coverage*.xml
+coverage*.info
+
+# Visual Studio code coverage results
+*.coverage
+*.coveragexml
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# Note: Comment the next line if you want to checkin your web deploy settings,
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# NuGet Symbol Packages
+*.snupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/[Pp]ackages/repositories.config
+# NuGet v3's project.json files produces more ignorable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+*.appx
+*.appxbundle
+*.appxupload
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!?*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+orleans.codegen.cs
+
+# Including strong name files can present a security risk
+# (https://github.com/github/gitignore/pull/2483#issue-259490424)
+#*.snk
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+ServiceFabricBackup/
+*.rptproj.bak
+
+# SQL Server files
+*.mdf
+*.ldf
+*.ndf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+*.rptproj.rsuser
+*- [Bb]ackup.rdl
+*- [Bb]ackup ([0-9]).rdl
+*- [Bb]ackup ([0-9][0-9]).rdl
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+node_modules/
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
+*.vbw
+
+# Visual Studio 6 auto-generated project file (contains which files were open etc.)
+*.vbp
+
+# Visual Studio 6 workspace and project file (working project files containing files to include in project)
+*.dsw
+*.dsp
+
+# Visual Studio 6 technical files
+*.ncb
+*.aps
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# CodeRush personal settings
+.cr/personal
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
+
+# Cake - Uncomment if you are using it
+# tools/**
+# !tools/packages.config
+
+# Tabs Studio
+*.tss
+
+# Telerik's JustMock configuration file
+*.jmconfig
+
+# BizTalk build output
+*.btp.cs
+*.btm.cs
+*.odx.cs
+*.xsd.cs
+
+# OpenCover UI analysis results
+OpenCover/
+
+# Azure Stream Analytics local run output
+ASALocalRun/
+
+# MSBuild Binary and Structured Log
+*.binlog
+
+# NVidia Nsight GPU debugger configuration file
+*.nvuser
+
+# MFractors (Xamarin productivity tool) working folder
+.mfractor/
+
+# Local History for Visual Studio
+.localhistory/
+
+# Visual Studio History (VSHistory) files
+.vshistory/
+
+# BeatPulse healthcheck temp database
+healthchecksdb
+
+# Backup folder for Package Reference Convert tool in Visual Studio 2017
+MigrationBackup/
+
+# Ionide (cross platform F# VS Code tools) working folder
+.ionide/
+
+# Fody - auto-generated XML schema
+FodyWeavers.xsd
+
+# VS Code files for those working on multiple tools
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+*.code-workspace
+
+# Local History for Visual Studio Code
+.history/
+
+# Windows Installer files from build outputs
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# JetBrains Rider
+*.sln.iml
+
+# ---> VisualStudioCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+!.vscode/*.code-snippets
+
+# Local History for Visual Studio Code
+.history/
+
+# Built Visual Studio Code Extensions
+*.vsix
+
+# ---> C++
+# Prerequisites
+*.d
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+*.smod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.out
+*.app
+
+data/
diff --git a/HOOPSExchangePublishSample.props b/HOOPSExchangePublishSample.props
new file mode 100644
index 0000000..9fc9f8d
--- /dev/null
+++ b/HOOPSExchangePublishSample.props
@@ -0,0 +1,42 @@
+
+
+
+
+ $(ProjectDir)\$(Platform)\$(Configuration)\
+ $(ProjectDir)\$(Platform)\$(Configuration)\
+
+
+
+ $(SolutionDir)..\include;%(AdditionalIncludeDirectories)
+ UNICODE;_UNICODE;%(PreprocessorDefinitions)
+
+
+ SAMPLES_DATA_DIRECTORY=R"(..\..\..\..\..\data)";%(PreprocessorDefinitions)
+ SAMPLES_DEFAULT_OUTPUT_PATH=R"(.\)";%(PreprocessorDefinitions)
+ SAMPLES_PUBLISH_GALLERY_DIRECTORY=R"(..\..\..\..\..\publish\publishgallery)";%(PreprocessorDefinitions)
+ SAMPLES_PUBLISH_QUICKSTARTS_DIRECTORY=R"(..\..\..\..\..\publish\publishquickstarts)";%(PreprocessorDefinitions)
+ SAMPLES_PUBLISH_HTML_DIRECTORY=R"(..\..\..\..\..\publish\publishhtml)";%(PreprocessorDefinitions)
+ SAMPLES_ADOBE_RESOURCE_DIRECTORY=R"(..\resource)";%(PreprocessorDefinitions)
+
+
+
+
+ HOOPS_BINARY_DIRECTORY=R"(..\..\..\..\..\..\bin\win32_v142)";%(PreprocessorDefinitions)
+
+
+
+
+ HOOPS_BINARY_DIRECTORY=R"(..\..\..\..\..\..\bin\win64_v142)";%(PreprocessorDefinitions)
+
+
+
+
+ HOOPS_BINARY_DIRECTORY=R"(..\..\..\..\..\..\bin\win32_v142)";%(PreprocessorDefinitions)
+
+
+
+
+ HOOPS_BINARY_DIRECTORY=R"(..\..\..\..\..\..\bin\win64_v142)";%(PreprocessorDefinitions)
+
+
+
\ No newline at end of file
diff --git a/exchange.sln b/exchange.sln
new file mode 100644
index 0000000..606f25f
--- /dev/null
+++ b/exchange.sln
@@ -0,0 +1,303 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32901.82
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Net Wrapper", ".Net Wrapper", "{3EDA093F-F647-4857-BDBD-0E2DEF0E9A5D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BrepAdaptor", "exchange\exchangesource\BrepAdaptor\BrepAdaptor.vcxproj", "{7CD4F74A-2286-4744-BF8C-C8B55E76730B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CascadedAttributes", "exchange\exchangesource\CascadedAttributes\CascadedAttributes.vcxproj", "{C7C85E0A-87B5-4E20-9F62-7C16802ABA00}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CreatePRCBrepWithGeometry", "exchange\exchangesource\CreatePRCBrepWithGeometry\CreatePRCBrepWithGeometry.vcxproj", "{B0AA5CD9-263E-45CE-AE76-C53AA7307249}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CreatePRCCubes", "exchange\exchangesource\CreatePRCCubes\CreatePRCCubes.vcxproj", "{BC7D4477-04C9-426D-93A1-3401DFD12A0F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IncrementalLoad", "exchange\exchangesource\IncrementalLoad\IncrementalLoad.vcxproj", "{6A9058C6-06BD-4213-8F50-BC7DF8305EC0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "LoadMultiConfigCADFile", "exchange\exchangesource\LoadMultiConfigCADFile\LoadMultiConfigCADFile.vcxproj", "{88467A66-9EF5-43F4-AD35-DB2C530E2374}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MultiplePRCFiles", "exchange\exchangesource\MultiplePRCFiles\MultiplePRCFiles.vcxproj", "{8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PRC2XML", "exchange\exchangesource\PRC2XML\PRC2XML.vcxproj", "{C3C57200-3B1F-465F-8631-E948A935D645}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Viewer", "exchange\exchangesource\Viewer\Viewer.vcxproj", "{D8B6598C-913F-4507-AE93-518F7C76EBDA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TechSoft3D.Exchange.NetWrapper", "exchange\exchangesource\NetWrapper\TechSoft3D.Exchange.NetWrapper.vcxproj", "{2E7E13B4-0AC4-480F-901F-024CF1938308}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApplication", "exchange\exchangesource\NetWrapper\ConsoleApplication.csproj", "{765D5D20-2470-4597-93CD-25A7E118814D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {2E7E13B4-0AC4-480F-901F-024CF1938308} = {2E7E13B4-0AC4-480F-901F-024CF1938308}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DrawingViewer", "exchange\exchangesource\DrawingViewer\DrawingViewer.vcxproj", "{0C9C33A6-D497-45A8-A74D-95E794C3AF78}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ImportExport", "exchange\exchangesource\ImportExport\ImportExport.vcxproj", "{58B52422-7322-40C5-BFF7-8E575B7AB63C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SewBrep", "exchange\exchangesource\SewBrep\SewBrep.vcxproj", "{8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TranslateToPkParts", "exchange\exchangesource\TranslateToPkParts\TranslateToPkParts.vcxproj", "{D77B7B37-01D4-463A-B24F-4EDF3D5B979B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Shattered", "exchange\exchangesource\Shattered\Shattered.vcxproj", "{ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2FD95A9C-266F-4920-BAE3-19165785561D}"
+ ProjectSection(SolutionItems) = preProject
+ exchange\exchangesource\common.hpp = exchange\exchangesource\common.hpp
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DumpFeatureTree", "exchange\exchangesource\DumpFeatureTree\DumpFeatureTree.vcxproj", "{693094D2-1470-4AB4-977E-8D82E5985618}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Collision", "exchange\exchangesource\Collision\Collision.vcxproj", "{EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PRC2IFCXML", "exchange\exchangesource\PRC2IFCXML\PRC2IFCXML.vcxproj", "{236BB296-3A6D-4CBF-B8C2-4370790211F0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Debug|Win32.Build.0 = Debug|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Debug|x64.ActiveCfg = Debug|x64
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Debug|x64.Build.0 = Debug|x64
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Release|Win32.ActiveCfg = Release|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Release|Win32.Build.0 = Release|Win32
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Release|x64.ActiveCfg = Release|x64
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}.Release|x64.Build.0 = Release|x64
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Debug|Win32.Build.0 = Debug|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Debug|x64.ActiveCfg = Debug|x64
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Debug|x64.Build.0 = Debug|x64
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Release|Win32.ActiveCfg = Release|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Release|Win32.Build.0 = Release|Win32
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Release|x64.ActiveCfg = Release|x64
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}.Release|x64.Build.0 = Release|x64
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Debug|Win32.ActiveCfg = Debug|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Debug|Win32.Build.0 = Debug|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Debug|x64.ActiveCfg = Debug|x64
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Debug|x64.Build.0 = Debug|x64
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Release|Win32.ActiveCfg = Release|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Release|Win32.Build.0 = Release|Win32
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Release|x64.ActiveCfg = Release|x64
+ {B0AA5CD9-263E-45CE-AE76-C53AA7307249}.Release|x64.Build.0 = Release|x64
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Debug|Win32.Build.0 = Debug|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Debug|x64.ActiveCfg = Debug|x64
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Debug|x64.Build.0 = Debug|x64
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Release|Win32.ActiveCfg = Release|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Release|Win32.Build.0 = Release|Win32
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Release|x64.ActiveCfg = Release|x64
+ {BC7D4477-04C9-426D-93A1-3401DFD12A0F}.Release|x64.Build.0 = Release|x64
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Debug|Win32.Build.0 = Debug|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Debug|x64.ActiveCfg = Debug|x64
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Debug|x64.Build.0 = Debug|x64
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Release|Win32.ActiveCfg = Release|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Release|Win32.Build.0 = Release|Win32
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Release|x64.ActiveCfg = Release|x64
+ {6A9058C6-06BD-4213-8F50-BC7DF8305EC0}.Release|x64.Build.0 = Release|x64
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Debug|Win32.ActiveCfg = Debug|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Debug|Win32.Build.0 = Debug|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Debug|x64.ActiveCfg = Debug|x64
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Debug|x64.Build.0 = Debug|x64
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Release|Win32.ActiveCfg = Release|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Release|Win32.Build.0 = Release|Win32
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Release|x64.ActiveCfg = Release|x64
+ {88467A66-9EF5-43F4-AD35-DB2C530E2374}.Release|x64.Build.0 = Release|x64
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Debug|Win32.Build.0 = Debug|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Debug|x64.ActiveCfg = Debug|x64
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Debug|x64.Build.0 = Debug|x64
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Release|Win32.ActiveCfg = Release|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Release|Win32.Build.0 = Release|Win32
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Release|x64.ActiveCfg = Release|x64
+ {8B90DC19-E9AC-4D8C-A8E5-5190A986F9A0}.Release|x64.Build.0 = Release|x64
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Debug|Win32.Build.0 = Debug|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Debug|x64.ActiveCfg = Debug|x64
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Debug|x64.Build.0 = Debug|x64
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Release|Win32.ActiveCfg = Release|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Release|Win32.Build.0 = Release|Win32
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Release|x64.ActiveCfg = Release|x64
+ {C3C57200-3B1F-465F-8631-E948A935D645}.Release|x64.Build.0 = Release|x64
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Debug|Win32.Build.0 = Debug|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Debug|x64.ActiveCfg = Debug|x64
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Debug|x64.Build.0 = Debug|x64
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Release|Win32.ActiveCfg = Release|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Release|Win32.Build.0 = Release|Win32
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Release|x64.ActiveCfg = Release|x64
+ {D8B6598C-913F-4507-AE93-518F7C76EBDA}.Release|x64.Build.0 = Release|x64
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Debug|Win32.Build.0 = Debug|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Debug|x64.ActiveCfg = Debug|x64
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Debug|x64.Build.0 = Debug|x64
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Release|Win32.ActiveCfg = Release|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Release|Win32.Build.0 = Release|Win32
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Release|x64.ActiveCfg = Release|x64
+ {2E7E13B4-0AC4-480F-901F-024CF1938308}.Release|x64.Build.0 = Release|x64
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Debug|Mixed Platforms.Build.0 = Debug|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Debug|Win32.ActiveCfg = Debug|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Debug|Win32.Build.0 = Debug|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Debug|x64.ActiveCfg = Debug|x64
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Debug|x64.Build.0 = Debug|x64
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Release|Mixed Platforms.Build.0 = Release|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Release|Win32.ActiveCfg = Release|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Release|Win32.Build.0 = Release|x86
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Release|x64.ActiveCfg = Release|x64
+ {765D5D20-2470-4597-93CD-25A7E118814D}.Release|x64.Build.0 = Release|x64
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Debug|Win32.ActiveCfg = Debug|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Debug|Win32.Build.0 = Debug|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Debug|x64.ActiveCfg = Debug|x64
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Debug|x64.Build.0 = Debug|x64
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Release|Win32.ActiveCfg = Release|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Release|Win32.Build.0 = Release|Win32
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Release|x64.ActiveCfg = Release|x64
+ {0C9C33A6-D497-45A8-A74D-95E794C3AF78}.Release|x64.Build.0 = Release|x64
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Debug|Win32.Build.0 = Debug|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Debug|x64.ActiveCfg = Debug|x64
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Debug|x64.Build.0 = Debug|x64
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Release|Win32.ActiveCfg = Release|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Release|Win32.Build.0 = Release|Win32
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Release|x64.ActiveCfg = Release|x64
+ {58B52422-7322-40C5-BFF7-8E575B7AB63C}.Release|x64.Build.0 = Release|x64
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Debug|Win32.Build.0 = Debug|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Debug|x64.ActiveCfg = Debug|x64
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Debug|x64.Build.0 = Debug|x64
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Release|Win32.ActiveCfg = Release|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Release|Win32.Build.0 = Release|Win32
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Release|x64.ActiveCfg = Release|x64
+ {8BCFAE5D-00F9-41A6-9A15-A1A5AE1EFAEA}.Release|x64.Build.0 = Release|x64
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Debug|Win32.Build.0 = Debug|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Debug|x64.ActiveCfg = Debug|x64
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Debug|x64.Build.0 = Debug|x64
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Release|Win32.ActiveCfg = Release|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Release|Win32.Build.0 = Release|Win32
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Release|x64.ActiveCfg = Release|x64
+ {D77B7B37-01D4-463A-B24F-4EDF3D5B979B}.Release|x64.Build.0 = Release|x64
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Debug|Win32.Build.0 = Debug|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Debug|x64.ActiveCfg = Debug|x64
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Debug|x64.Build.0 = Debug|x64
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Release|Win32.ActiveCfg = Release|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Release|Win32.Build.0 = Release|Win32
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Release|x64.ActiveCfg = Release|x64
+ {ACEC4E45-AA20-4C1F-94FB-034459E3ABC7}.Release|x64.Build.0 = Release|x64
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Debug|Win32.ActiveCfg = Debug|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Debug|Win32.Build.0 = Debug|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Debug|x64.ActiveCfg = Debug|x64
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Debug|x64.Build.0 = Debug|x64
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Release|Win32.ActiveCfg = Release|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Release|Win32.Build.0 = Release|Win32
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Release|x64.ActiveCfg = Release|x64
+ {693094D2-1470-4AB4-977E-8D82E5985618}.Release|x64.Build.0 = Release|x64
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Debug|Win32.Build.0 = Debug|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Debug|x64.ActiveCfg = Debug|x64
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Debug|x64.Build.0 = Debug|x64
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Release|Win32.ActiveCfg = Release|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Release|Win32.Build.0 = Release|Win32
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Release|x64.ActiveCfg = Release|x64
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}.Release|x64.Build.0 = Release|x64
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Debug|Win32.ActiveCfg = Debug|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Debug|Win32.Build.0 = Debug|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Debug|x64.ActiveCfg = Debug|x64
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Debug|x64.Build.0 = Debug|x64
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Release|Win32.ActiveCfg = Release|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Release|Win32.Build.0 = Release|Win32
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Release|x64.ActiveCfg = Release|x64
+ {236BB296-3A6D-4CBF-B8C2-4370790211F0}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {2E7E13B4-0AC4-480F-901F-024CF1938308} = {3EDA093F-F647-4857-BDBD-0E2DEF0E9A5D}
+ {765D5D20-2470-4597-93CD-25A7E118814D} = {3EDA093F-F647-4857-BDBD-0E2DEF0E9A5D}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {75852D3C-614B-4B3A-B2E5-36CF6671243E}
+ EndGlobalSection
+EndGlobal
diff --git a/exchange/exchangesource/BrepAdaptor/BrepAdaptor.cpp b/exchange/exchangesource/BrepAdaptor/BrepAdaptor.cpp
new file mode 100644
index 0000000..60c6f6a
--- /dev/null
+++ b/exchange/exchangesource/BrepAdaptor/BrepAdaptor.cpp
@@ -0,0 +1,194 @@
+/***********************************************************************************************************************
+*
+* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
+* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
+* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
+* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
+* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
+* scope and manner of such use.
+*
+***********************************************************************************************************************/
+/**
+\file BrepAdaptor.cpp
+
+The B-rep used by HOOPS Exchange may not be completely compatible with modeling systems that do not support the full range of B-rep as employed by PRC. A3DCopyAndAdaptBrepModel attempts to convert PRC B-rep into a format that is compatible with your system.
+
+This program demonstrates how to programmatically adapt B-rep models to your particular needs using HOOPS Exchange. B-rep
+is always found in this hierarchy:
+
+Model file > Product occurrence > Part definition > B-rep
+
+The functions below attempt to find the B-rep entities by traversing the model tree.
+
+This program reads a model file and outputs a PRC file. Specify these files on the command line (see 'Usage').
+
+- Load a CAD file
+- Traverse the entire data structure
+- Call A3DCopyAndAdaptBrepModel for each BrepModels.
+- Copy inputs BrepModels.
+- Selected Geometricals surfaces are converted to nurbs.
+- Faces are split.
+- UV Curves are computed.
+- New modified data are populated
+- PRC is exported from the modified data
+
+***********************************************************************************************************************/
+
+#define INITIALIZE_A3D_API
+#include
+
+#include "../common.hpp"
+
+static MY_CHAR acSrcFileName[_MAX_PATH * 2];
+static MY_CHAR acDstFileName[_MAX_PATH * 2];
+static MY_CHAR acLogFileName[_MAX_PATH * 2];
+
+//######################################################################################################################
+#ifdef _MSC_VER
+int wmain(A3DInt32 iArgc, A3DUniChar** ppcArgv)
+#else
+int main(A3DInt32 iArgc, A3DUTF8Char** ppcArgv)
+#endif
+{
+ //
+ // ### COMMAND LINE ARGUMENTS
+ //
+
+ if (iArgc > 4)
+ {
+ MY_PRINTF2("Usage:\n %s [input CAD file] [output CAD file] [output LOG file]\n", ppcArgv[0]);
+ MY_PRINTF(" Default output CAD file is [input CAD file].prc\n");
+ MY_PRINTF(" Default output LOG file is [output CAD file]_Log.txt\n\n");
+ return A3D_ERROR;
+ }
+
+ if (iArgc > 1) MY_STRCPY(acSrcFileName, ppcArgv[1]);
+ else MY_STRCPY(acSrcFileName, DEFAULT_INPUT_CAD);
+ if (iArgc > 2) MY_STRCPY(acDstFileName, ppcArgv[2]);
+ else MY_SPRINTF(acDstFileName, "%s.prc", acSrcFileName);
+ if (iArgc > 3) MY_STRCPY(acLogFileName, ppcArgv[3]);
+ else MY_SPRINTF(acLogFileName, "%s_Log.txt", acDstFileName);
+ GetLogFile(acLogFileName); // Initialize log file
+
+ //
+ // ### INITIALIZE HOOPS EXCHANGE
+ //
+
+ A3DSDKHOOPSExchangeLoader sHoopsExchangeLoader(_T(HOOPS_BINARY_DIRECTORY));
+ CHECK_RET(sHoopsExchangeLoader.m_eSDKStatus);
+
+ CHECK_RET(A3DDllSetCallbacksMemory(CheckMalloc, CheckFree));
+ CHECK_RET(A3DDllSetCallbacksReport(PrintLogMessage, PrintLogWarning, PrintLogError));
+
+ //
+ // ### PROCESS SAMPLE CODE
+ //
+
+ // specify input file
+ A3DImport sImport(acSrcFileName); // see A3DSDKInternalConvert.hxx for import and export detailed parameters
+
+ A3DStatus iRet = sHoopsExchangeLoader.Import(sImport);
+ if (iRet != A3D_SUCCESS && iRet != A3D_LOAD_MISSING_COMPONENTS)
+ CHECK_RET(iRet);
+
+ const A3DUns32 NUM_VALID_SURFACES = 11;
+ A3DUns32 ACCEPTED_SURFACES[NUM_VALID_SURFACES] = {
+ kA3DTypeSurfBlend01,
+ //kA3DTypeSurfBlend02,
+ //kA3DTypeSurfBlend03,
+ kA3DTypeSurfNurbs,
+ kA3DTypeSurfCone,
+ kA3DTypeSurfCylinder,
+ kA3DTypeSurfCylindrical,
+ //kA3DTypeSurfOffset,
+ //kA3DTypeSurfPipe,
+ kA3DTypeSurfPlane,
+ kA3DTypeSurfRuled,
+ kA3DTypeSurfSphere,
+ //kA3DTypeSurfRevolution,
+ kA3DTypeSurfExtrusion,
+ //kA3DTypeSurfFromCurves,
+ kA3DTypeSurfTorus,
+ kA3DTypeSurfTransform,
+ //kA3DTypeSurfBlend04,
+ };
+
+ const A3DUns32 NUM_VALID_CURVES = 13;
+ A3DUns32 ACCEPTED_CURVES[NUM_VALID_CURVES] = {
+ //kA3DTypeCrvBase,
+ //kA3DTypeCrvBlend02Boundary,
+ kA3DTypeCrvNurbs,
+ kA3DTypeCrvCircle,
+ kA3DTypeCrvComposite,
+ kA3DTypeCrvOnSurf,
+ kA3DTypeCrvEllipse,
+ kA3DTypeCrvEquation,
+ kA3DTypeCrvHelix,
+ kA3DTypeCrvHyperbola,
+ //kA3DTypeCrvIntersection,
+ kA3DTypeCrvLine,
+ kA3DTypeCrvOffset,
+ kA3DTypeCrvParabola,
+ kA3DTypeCrvPolyLine,
+ kA3DTypeCrvTransform,
+ };
+
+ A3DCopyAndAdaptBrepModelData sCopyAndAdaptBrepModelData;
+ A3D_INITIALIZE_DATA(A3DCopyAndAdaptBrepModelData, sCopyAndAdaptBrepModelData);
+
+ sCopyAndAdaptBrepModelData.m_bUseSameParam = false;
+ sCopyAndAdaptBrepModelData.m_dTol = 1e-3;
+ sCopyAndAdaptBrepModelData.m_bDeleteCrossingUV = false;
+ sCopyAndAdaptBrepModelData.m_bAllowUVCrossingSeams = false;
+ sCopyAndAdaptBrepModelData.m_bSplitFaces = false;
+ sCopyAndAdaptBrepModelData.m_bSplitClosedFaces = false;
+ sCopyAndAdaptBrepModelData.m_bForceComputeUV = true;
+ sCopyAndAdaptBrepModelData.m_bForceCompute3D = false;
+ sCopyAndAdaptBrepModelData.m_uiAcceptableSurfacesSize = NUM_VALID_SURFACES;
+ sCopyAndAdaptBrepModelData.m_puiAcceptableSurfaces = &ACCEPTED_SURFACES[0];
+ sCopyAndAdaptBrepModelData.m_uiAcceptableCurvesSize = NUM_VALID_CURVES;
+ sCopyAndAdaptBrepModelData.m_puiAcceptableCurves = &ACCEPTED_CURVES[0];
+ sCopyAndAdaptBrepModelData.m_bContinueOnError = true;
+
+ A3DUns32 uiNbErrors = 0;
+ A3DCopyAndAdaptBrepModelErrorData *pErrors;
+ iRet = A3DAdaptAndReplaceAllBrepInModelFileAdvanced(sHoopsExchangeLoader.m_psModelFile, &sCopyAndAdaptBrepModelData, &uiNbErrors, &pErrors);
+ if ((iRet == A3D_SUCCESS || iRet == A3D_TOOLS_CONTINUE_ON_ERROR) && uiNbErrors > 0)
+ {
+ for (A3DUns32 i = 0; i < uiNbErrors; i++)
+ {
+ A3DCopyAndAdaptBrepModelErrorData* pCurrentError = &pErrors[i];
+
+ fprintf(GetLogFile(), "----------\n");
+
+ //see A3DSDKTypes.h for entity type
+ A3DEEntityType entityType;
+ CHECK_RET(A3DEntityGetType(pCurrentError->m_pEntity, &entityType));
+ fprintf(GetLogFile(), "Error on entity type........: %s(%d)\n", A3DMiscGetEntityTypeMsg(entityType), entityType);
+ fprintf(GetLogFile(), "Error on topological type...: %s(%d)\n", A3DMiscGetEntityTypeMsg((A3DEEntityType)pCurrentError->m_paiErrors[0]), pCurrentError->m_paiErrors[0]);
+ fprintf(GetLogFile(), "Status......................: %s(%d)\n", A3DMiscGetErrorMsg((A3DStatus)pCurrentError->m_paiErrors[1]), pCurrentError->m_paiErrors[1]);
+
+ fprintf(GetLogFile(), "The error is on the ");
+ A3DUns32 numIndex = pCurrentError->m_paiErrors[2];
+ if (numIndex == 0) fprintf(GetLogFile(), "BREP");
+ if (numIndex >= 1) fprintf(GetLogFile(), "Connex: %d", pCurrentError->m_paiErrors[3]);
+ if (numIndex >= 2) fprintf(GetLogFile(), ", Shell: %d", pCurrentError->m_paiErrors[4]);
+ if (numIndex >= 3) fprintf(GetLogFile(), ", Face: %d", pCurrentError->m_paiErrors[5]);
+ if (numIndex >= 4) fprintf(GetLogFile(), ", Loop: %d", pCurrentError->m_paiErrors[6]);
+ if (numIndex >= 5) fprintf(GetLogFile(), ", CoEdge/Edge: %d", pCurrentError->m_paiErrors[7]);
+ fprintf(GetLogFile(), ".\n\n");
+ }
+ }
+
+ // specify output file
+ A3DExport sExport(acDstFileName); // see A3DSDKInternalConvert.hxx for import and export detailed parameters
+ iRet = sHoopsExchangeLoader.Export(sExport);
+ if (!iRet)
+ return iRet;
+ //
+ // ### TERMINATE HOOPS EXCHANGE
+ //
+
+ // Check memory allocations
+ return (int)ListLeaks();
+}
diff --git a/exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj b/exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj
new file mode 100644
index 0000000..199b3d5
--- /dev/null
+++ b/exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj
@@ -0,0 +1,165 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {7CD4F74A-2286-4744-BF8C-C8B55E76730B}
+ BrepAdaptor
+ Win32Proj
+ 10.0
+
+
+
+ Application
+ v145
+ true
+
+
+ Application
+ v145
+
+
+ Application
+ v145
+ true
+
+
+ Application
+ v145
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+
+
+
+ Disabled
+ %(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ false
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ MachineX86
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+ X64
+
+
+ Disabled
+ %(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ false
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ MachineX64
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+ MaxSpeed
+ true
+ %(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+ X64
+
+
+ MaxSpeed
+ true
+ %(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ true
+ true
+ MachineX64
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj.filters b/exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj.filters
new file mode 100644
index 0000000..98df221
--- /dev/null
+++ b/exchange/exchangesource/BrepAdaptor/BrepAdaptor.vcxproj.filters
@@ -0,0 +1,22 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/exchange/exchangesource/CascadedAttributes/CascadedAttributes.cpp b/exchange/exchangesource/CascadedAttributes/CascadedAttributes.cpp
new file mode 100644
index 0000000..1c028d7
--- /dev/null
+++ b/exchange/exchangesource/CascadedAttributes/CascadedAttributes.cpp
@@ -0,0 +1,462 @@
+/***********************************************************************************************************************
+*
+* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
+* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
+* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
+* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
+* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
+* scope and manner of such use.
+*
+***********************************************************************************************************************/
+/**
+\file CascadedAttributes.cpp
+
+This file demonstrates how to programmatically set the mechanism of the cascaded attributes using HOOPS Exchange.
+
+***********************************************************************************************************************/
+
+#define INITIALIZE_A3D_API
+#include
+
+#include "../common.hpp"
+
+//######################################################################################################################
+struct MiscCascadedAttributesGuard
+{
+ A3DMiscCascadedAttributes* ptr_;
+
+ MiscCascadedAttributesGuard(A3DMiscCascadedAttributes* ptr): ptr_(ptr)
+ {}
+
+ ~MiscCascadedAttributesGuard()
+ {
+ TEST_RET(A3DMiscCascadedAttributesDelete(ptr_))
+ ptr_ = NULL;
+ }
+};
+
+//######################################################################################################################
+static A3DUTF8Char stpcWinTitle[_MAX_PATH];
+
+//######################################################################################################################
+/*! Given an A3DRootBaseWithGraphics*, will return the name of that entity in the out parameter m_ppcName.
+ */
+A3DStatus stGetName(
+ const A3DRootBaseWithGraphics* pPartOrProduct,
+ A3DUTF8Char** m_ppcName)
+{
+ A3DRootBaseData sRootBaseData;
+ A3D_INITIALIZE_DATA(A3DRootBaseData, sRootBaseData);
+ CHECK_RET(A3DRootBaseGet(pPartOrProduct, &sRootBaseData));
+ const DATAGUARD(A3DRootBase) sGuard(sRootBaseData, A3DRootBaseGet);
+
+ if (sRootBaseData.m_pcName != NULL)
+ {
+ *m_ppcName = static_cast(malloc(strlen(sRootBaseData.m_pcName) + 1));
+ strncpy(*m_ppcName, sRootBaseData.m_pcName, strlen(sRootBaseData.m_pcName));
+ (*m_ppcName)[strlen(sRootBaseData.m_pcName)] = '\0';
+ }
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Gets the color values for a A3DRootBaseWithGraphics, then prints it to the console.
+ */
+A3DStatus stExtractColorFromGraphicData(
+ const A3DRootBaseWithGraphics* pRootBaseWithGraphics,
+ const A3DGraphStyleData& sGraphStyleData)
+{
+ // Get its name
+ A3DUTF8Char* pcName = NULL;
+ const A3DStatus iRet = stGetName(pRootBaseWithGraphics, &pcName);
+ const MemoryGuard sGuard(pcName);
+ CHECK_RET(iRet);
+
+ // First get non-inherited color information
+ A3DRootBaseWithGraphicsData rbwgData;
+ A3D_INITIALIZE_DATA(A3DRootBaseWithGraphicsData, rbwgData);
+ A3DRootBaseWithGraphicsGet(pRootBaseWithGraphics, &rbwgData);
+ if (rbwgData.m_pGraphics != NULL)
+ {
+ // this entity has an attached graphics object
+ A3DGraphicsData graphicsData;
+ A3D_INITIALIZE_DATA(A3DGraphicsData, graphicsData);
+ A3DGraphicsGet(rbwgData.m_pGraphics, &graphicsData);
+
+ A3DGraphStyleData styleData;
+ A3D_INITIALIZE_DATA(A3DGraphStyleData, styleData);
+ A3DGlobalGetGraphStyleData(graphicsData.m_uiStyleIndex, &styleData);
+
+ A3DGraphRgbColorData sColorData;
+ A3D_INITIALIZE_DATA(A3DGraphRgbColorData, sColorData);
+
+ if (!sGraphStyleData.m_bMaterial)
+ {
+ if (A3DGlobalGetGraphRgbColorData(styleData.m_uiRgbColorIndex, &sColorData) == A3D_SUCCESS)
+ {
+ fprintf(
+ GetLogFile(),
+ "\tcolor without inheritance of %s: %f %f %f\n",
+ pcName,
+ sColorData.m_dRed,
+ sColorData.m_dGreen,
+ sColorData.m_dBlue);
+ }
+
+ A3DGlobalGetGraphRgbColorData(A3D_DEFAULT_COLOR_INDEX, &sColorData);
+
+ }
+ else
+ {
+ fprintf(
+ GetLogFile(),
+ "\t local material of %s: %u\n",
+ pcName,
+ sGraphStyleData.m_uiRgbColorIndex
+ );
+ }
+
+ A3DGlobalGetGraphStyleData(A3D_DEFAULT_STYLE_INDEX, &styleData);
+ A3DGraphicsGet(NULL, &graphicsData);
+ }
+
+ // Then get inherited color information
+ if (!sGraphStyleData.m_bMaterial)
+ {
+ A3DGraphRgbColorData sColorData;
+ A3D_INITIALIZE_DATA(A3DGraphRgbColorData, sColorData);
+
+
+ if (A3DGlobalGetGraphRgbColorData(sGraphStyleData.m_uiRgbColorIndex, &sColorData) == A3D_SUCCESS)
+ {
+ fprintf(
+ GetLogFile(),
+ "\tcolor with inheritance of %s: %f %f %f\n",
+ pcName,
+ sColorData.m_dRed,
+ sColorData.m_dGreen,
+ sColorData.m_dBlue);
+ }
+
+ A3DGlobalGetGraphRgbColorData(A3D_DEFAULT_COLOR_INDEX, &sColorData);
+ }
+ else
+ {
+ fprintf(
+ GetLogFile(),
+ "\t inheritance material of %s: %u\n",
+ pcName,
+ sGraphStyleData.m_uiRgbColorIndex
+ );
+ }
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Creates an A3DMiscCascadedAttributes structure and computes the attributes
+ * based on the input A3DRootBaseWithGraphics structure pBase.
+ */
+static A3DStatus stCreateAndPushCascadedAttributes(
+ const A3DRootBaseWithGraphics* pBase,
+ const A3DMiscCascadedAttributes* pFatherAttr,
+ A3DMiscCascadedAttributes** ppAttr,
+ A3DMiscCascadedAttributesData* psAttrData)
+{
+ CHECK_RET(A3DMiscCascadedAttributesCreate(ppAttr));
+ CHECK_RET(A3DMiscCascadedAttributesPush(*ppAttr, pBase, pFatherAttr));
+
+ A3D_INITIALIZE_DATA(A3DMiscCascadedAttributesData, (*psAttrData));
+ CHECK_RET(A3DMiscCascadedAttributesGet(*ppAttr, psAttrData));
+ CHECK_RET(stExtractColorFromGraphicData(pBase, psAttrData->m_sStyle));
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Parses a face, then computes cascaded attributes for that face.
+ */
+static A3DStatus stParseFace(
+ const A3DTopoFace* pFace,
+ const A3DMiscCascadedAttributes* pFatherAttr)
+{
+ PrintLogMessage("Face level\n");
+
+ A3DMiscCascadedAttributes* pAttr;
+ A3DMiscCascadedAttributesData sAttrData;
+ CHECK_RET(stCreateAndPushCascadedAttributes(pFace, pFatherAttr, &pAttr, &sAttrData));
+ const MiscCascadedAttributesGuard sMCAttrGuard(pAttr);
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Parses a shell, then calls stParseFace for each face found in the shell.
+ */
+static A3DStatus stParseShell(const A3DTopoShell* pShell, const A3DMiscCascadedAttributes* pFatherAttr)
+{
+ PrintLogMessage("Shell level\n");
+
+ A3DMiscCascadedAttributes* pAttr;
+ A3DMiscCascadedAttributesData sAttrData;
+ CHECK_RET(stCreateAndPushCascadedAttributes(pShell, pFatherAttr, &pAttr, &sAttrData));
+ const MiscCascadedAttributesGuard sMCAttrGuard(pAttr);
+
+ A3DTopoShellData sTopoShellData;
+ A3D_INITIALIZE_DATA(A3DTopoShellData, sTopoShellData);
+ CHECK_RET(A3DTopoShellGet(pShell, &sTopoShellData));
+ const DATAGUARD(A3DTopoShell) sGuard(sTopoShellData, A3DTopoShellGet);
+
+ for (unsigned int ui = 0; ui < sTopoShellData.m_uiFaceSize; ++ui)
+ CHECK_RET(stParseFace(sTopoShellData.m_ppFaces[ui], pAttr));
+
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Parses a connex, then calls stParseShell for each shell found in the connex.
+ */
+static A3DStatus stParseConnex(
+ const A3DTopoConnex* pConnex,
+ const A3DMiscCascadedAttributes* pFatherAttr)
+{
+ PrintLogMessage("Connex level\n");
+
+ A3DMiscCascadedAttributes* pAttr;
+ A3DMiscCascadedAttributesData sAttrData;
+ CHECK_RET(stCreateAndPushCascadedAttributes(pConnex, pFatherAttr, &pAttr, &sAttrData));
+ const MiscCascadedAttributesGuard sMCAttrGuard(pAttr);
+
+ A3DTopoConnexData sTopoConnexData;
+ A3D_INITIALIZE_DATA(A3DTopoConnexData, sTopoConnexData);
+ CHECK_RET(A3DTopoConnexGet(pConnex, &sTopoConnexData));
+ const DATAGUARD(A3DTopoConnex) sGuard(sTopoConnexData, A3DTopoConnexGet);
+
+ for (unsigned int ui = 0; ui < sTopoConnexData.m_uiShellSize; ++ui)
+ CHECK_RET(stParseShell(sTopoConnexData.m_ppShells[ui], pAttr));
+
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Parses a representation item and computes cascaded attributes for it.
+ * Calls stParseConnex for each connex in this representation item.
+ */
+static A3DStatus stParseRepresentationItem(
+ const A3DRiRepresentationItem* pRepItem,
+ const A3DMiscCascadedAttributes* pFatherAttr)
+{
+ PrintLogMessage("Representation item level\n");
+
+ A3DMiscCascadedAttributes* pAttr;
+ A3DMiscCascadedAttributesData sAttrData;
+
+ // Compute the cascaded attributes for this representation item
+ CHECK_RET(stCreateAndPushCascadedAttributes(pRepItem, pFatherAttr, &pAttr, &sAttrData));
+ const MiscCascadedAttributesGuard sMCAttrGuard(pAttr);
+
+ A3DEEntityType eType = kA3DTypeUnknown;
+ CHECK_RET(A3DEntityGetType(pRepItem, &eType));
+
+ if(eType == kA3DTypeRiBrepModel)
+ {
+ const A3DRiBrepModel* pBrepModel = static_cast(pRepItem);
+
+ A3DRiBrepModelData sBrepModelData;
+ A3D_INITIALIZE_DATA(A3DRiBrepModelData, sBrepModelData);
+ CHECK_RET(A3DRiBrepModelGet(pBrepModel, &sBrepModelData));
+ const DATAGUARD(A3DRiBrepModel) sGuard1(sBrepModelData, A3DRiBrepModelGet);
+
+ A3DTopoBrepDataData sTopoBrepDataData;
+ A3D_INITIALIZE_DATA(A3DTopoBrepDataData, sTopoBrepDataData);
+ CHECK_RET(A3DTopoBrepDataGet(sBrepModelData.m_pBrepData, &sTopoBrepDataData));
+ const DATAGUARD(A3DTopoBrepData) sGuard2(sTopoBrepDataData, A3DTopoBrepDataGet);
+
+ for (unsigned int ui = 0; ui < sTopoBrepDataData.m_uiConnexSize; ++ui)
+ CHECK_RET(stParseConnex(sTopoBrepDataData.m_ppConnexes[ui], pAttr));
+ }
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Iterates over all the representation items in the part pPart, and calls
+ * stParseRepresentationItem on each one.
+ */
+static A3DStatus stParsePartDefinition(
+ const A3DAsmPartDefinition* pPart,
+ const A3DMiscCascadedAttributes* pFatherAttr)
+{
+ PrintLogMessage("Part definition level\n");
+
+ A3DMiscCascadedAttributes* pAttr;
+ A3DMiscCascadedAttributesData sAttrData;
+ CHECK_RET(stCreateAndPushCascadedAttributes(pPart, pFatherAttr, &pAttr, &sAttrData));
+ const MiscCascadedAttributesGuard sMCAttrGuard(pAttr);
+
+ A3DAsmPartDefinitionData sPartData;
+ A3D_INITIALIZE_DATA(A3DAsmPartDefinitionData, sPartData);
+ CHECK_RET(A3DAsmPartDefinitionGet(pPart, &sPartData));
+ const DATAGUARD(A3DAsmPartDefinition) sGuard(sPartData, A3DAsmPartDefinitionGet);
+
+ for (unsigned int ui = 0; ui < sPartData.m_uiRepItemsSize; ++ui)
+ CHECK_RET(stParseRepresentationItem(sPartData.m_ppRepItems[ui], pAttr));
+
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Returns a part definition from a product occurrence. Part definition is returned as
+ * the out parameter ppPart.
+ */
+static A3DStatus stProductOccurrenceGetPart(
+ const A3DAsmProductOccurrenceData* psPOccData,
+ A3DAsmPartDefinition** ppPart)
+{
+ if(psPOccData == NULL)
+ return A3D_ERROR;
+
+ *ppPart = NULL;
+ if(psPOccData->m_pPart != NULL)
+ {
+ *ppPart = psPOccData->m_pPart;
+ return A3D_SUCCESS;
+ }
+
+ A3DAsmProductOccurrence* pProductPrototype = psPOccData->m_pPrototype;
+ while(pProductPrototype != NULL)
+ {
+ A3DAsmProductOccurrenceData sProductPrototypeData;
+ A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sProductPrototypeData);
+ CHECK_RET(A3DAsmProductOccurrenceGet(pProductPrototype, &sProductPrototypeData));
+ const DATAGUARD(A3DAsmProductOccurrence) sGuard(sProductPrototypeData, A3DAsmProductOccurrenceGet);
+
+ if(sProductPrototypeData.m_pPart != NULL)
+ {
+ *ppPart = sProductPrototypeData.m_pPart;
+ return A3D_SUCCESS;
+ }
+ else
+ pProductPrototype = sProductPrototypeData.m_pPrototype;
+ }
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Parses a product occurrence recursively. When a part
+ * definition is found, it is then passed to stParsePartDefinition.
+ */
+static A3DStatus stParseProductOccurrence(
+ const A3DAsmProductOccurrence* pOccurrence,
+ const A3DMiscCascadedAttributes* pFatherAttr)
+{
+ PrintLogMessage("Product Occurrence level\n");
+
+ A3DMiscCascadedAttributes* pAttr;
+ A3DMiscCascadedAttributesData sAttrData;
+ CHECK_RET(stCreateAndPushCascadedAttributes(pOccurrence, pFatherAttr, &pAttr, &sAttrData));
+ const MiscCascadedAttributesGuard sMCAttrGuard(pAttr);
+
+ A3DAsmProductOccurrenceData sData;
+ A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sData);
+ CHECK_RET(A3DAsmProductOccurrenceGet(pOccurrence, &sData));
+ const DATAGUARD(A3DAsmProductOccurrence) sGuard(sData, A3DAsmProductOccurrenceGet);
+
+
+ A3DAsmPartDefinition* pPart = NULL;
+ TEST_RET(stProductOccurrenceGetPart(&sData, &pPart));
+
+ if (pPart)
+ CHECK_RET(stParsePartDefinition(pPart, pAttr));
+
+ if (sData.m_uiPOccurrencesSize > 0)
+ {
+ for (unsigned int ui = 0; ui < sData.m_uiPOccurrencesSize; ui++)
+ {
+ CHECK_RET(stParseProductOccurrence(sData.m_ppPOccurrences[ui], pAttr));
+ }
+ }
+
+ return A3D_SUCCESS;
+}
+
+//######################################################################################################################
+/*! Calls stParseProductOccurrence for each product occurrence in the input parameter pModelFile.
+ */
+A3DStatus stParseCascadedAttributes(const A3DAsmModelFile* pModelFile)
+{
+ // allocate model file structure
+ A3DAsmModelFileData sData;
+ A3D_INITIALIZE_DATA(A3DAsmModelFileData, sData);
+ CHECK_RET(A3DAsmModelFileGet(pModelFile, &sData));
+ const DATAGUARD(A3DAsmModelFile) sGuard(sData, A3DAsmModelFileGet);
+
+ // allocate cascaded attributes
+ A3DMiscCascadedAttributes* pAttr;
+ CHECK_RET(A3DMiscCascadedAttributesCreate(&pAttr));
+ const MiscCascadedAttributesGuard sMCAttrGuard(pAttr);
+
+ for (A3DUns32 ui = 0; ui < sData.m_uiPOccurrencesSize; ++ui)
+ // traverse the model tree
+ CHECK_RET(stParseProductOccurrence(sData.m_ppPOccurrences[ui], pAttr));
+
+ return A3D_SUCCESS;
+}
+
+static MY_CHAR acSrcFileName[_MAX_PATH * 2];
+static MY_CHAR acLogFileName[_MAX_PATH * 2];
+
+//######################################################################################################################
+// Main function
+#ifdef _MSC_VER
+int wmain(A3DInt32 iArgc, A3DUniChar** ppcArgv)
+#else
+int main(A3DInt32 iArgc, A3DUTF8Char** ppcArgv)
+#endif
+{
+
+ //
+ // ### COMMAND LINE ARGUMENTS
+ //
+
+ if (iArgc > 3)
+ {
+ MY_PRINTF2("Usage:\n %s [input CAD file] [output LOG file]\n", ppcArgv[0]);
+ MY_PRINTF(" Default output LOG file is [input CAD file]_Log.txt\n\n");
+ return A3D_ERROR;
+ }
+
+ if (iArgc > 1) MY_STRCPY(acSrcFileName, ppcArgv[1]);
+ else MY_STRCPY(acSrcFileName, DEFAULT_INPUT_CAD);
+ if (iArgc > 2) MY_STRCPY(acLogFileName, ppcArgv[2]);
+ else MY_SPRINTF(acLogFileName, "%s_Log.txt", acSrcFileName);
+ GetLogFile(acLogFileName); // Initialize log file
+
+ //
+ // ### INITIALIZE HOOPS EXCHANGE
+ //
+
+ A3DSDKHOOPSExchangeLoader sHoopsExchangeLoader(_T(HOOPS_BINARY_DIRECTORY));
+ CHECK_RET(sHoopsExchangeLoader.m_eSDKStatus);
+
+ CHECK_RET(A3DDllSetCallbacksMemory(CheckMalloc, CheckFree));
+ CHECK_RET(A3DDllSetCallbacksReport(PrintLogMessage, PrintLogWarning, PrintLogError));
+
+ //
+ // ### PROCESS SAMPLE CODE
+ //
+
+ // Initialize importer
+ A3DImport sImport(acSrcFileName); // see A3DSDKInternalConvert.hxx for import and export detailed parameters
+
+ A3DStatus iRet = sHoopsExchangeLoader.Import(sImport);
+ if (iRet != A3D_SUCCESS && iRet != A3D_LOAD_MISSING_COMPONENTS)
+ CHECK_RET(iRet);
+
+ // Parse model for cascaded attributes
+ CHECK_RET(stParseCascadedAttributes(sHoopsExchangeLoader.m_psModelFile));
+
+ //
+ // ### TERMINATE HOOPS EXCHANGE
+ //
+
+ // Check memory allocations
+ // Check memory allocations
+ return (int)ListLeaks();
+}
diff --git a/exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj b/exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj
new file mode 100644
index 0000000..7464b30
--- /dev/null
+++ b/exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj
@@ -0,0 +1,195 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {C7C85E0A-87B5-4E20-9F62-7C16802ABA00}
+ CascadedAttributes
+ Win32Proj
+ 10.0
+
+
+
+ Application
+ v145
+ false
+ true
+
+
+ Application
+ v145
+ false
+
+
+ Application
+ v145
+ false
+ true
+
+
+ Application
+ v145
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+
+
+
+ Disabled
+ %(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ false
+ Sync
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ LinkVerboseLib
+ $(OutDir)$(ProjectName).exe
+ true
+ Console
+ false
+
+ MachineX86
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+
+
+
+ X64
+
+
+ Disabled
+ %(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ false
+ Sync
+ EnableFastChecks
+ MultiThreadedDebugDLL
+ true
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ LinkVerboseLib
+ $(OutDir)$(ProjectName).exe
+ true
+ Console
+ false
+
+ MachineX64
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+
+
+
+ %(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ $(OutDir)$(ProjectName).exe
+ .\glut\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ false
+
+ MachineX86
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+
+
+
+ X64
+
+
+ %(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ $(OutDir)$(ProjectName).exe
+ .\glut\lib;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+ false
+
+ MachineX64
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj.filters b/exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj.filters
new file mode 100644
index 0000000..074ea19
--- /dev/null
+++ b/exchange/exchangesource/CascadedAttributes/CascadedAttributes.vcxproj.filters
@@ -0,0 +1,22 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+
+
+ Source Files
+
+
+
\ No newline at end of file
diff --git a/exchange/exchangesource/Collision/Collision.cpp b/exchange/exchangesource/Collision/Collision.cpp
new file mode 100644
index 0000000..e20c21b
--- /dev/null
+++ b/exchange/exchangesource/Collision/Collision.cpp
@@ -0,0 +1,425 @@
+/***********************************************************************************************************************
+*
+* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
+* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
+* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
+* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
+* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
+* scope and manner of such use.
+*
+***********************************************************************************************************************/
+/**
+\file Collision.cpp
+
+This program demonstrates how to programmatically use the A3DCollisionCompute function.
+
+This program reads a model file and outputs a text file. Specify these files on the command line (see 'Usage').
+
+A sample file can be find in data directory : data\inventor\collision.iam
+
+Usage:
+Collision [INPUT] [OUTPUT] [UUIDs...]
+INPUT The input CAD file. Default is '00242AC8'
+OUTPUT The output result file. Default is 'CURRENT_DIR/Collision.txt'
+UUID1 UUID2... Any number of space separated UUIDs of representation items to be checked to each other. If not set, two relevant UUIDs from the CAD file will be picked
+
+***********************************************************************************************************************/
+
+#ifdef _MSC_VER
+# define SAMPLE_DEFAULT_CAD_FILE _T(SAMPLES_DATA_DIRECTORY"\\inventor\\collision.iam")
+# define SAMPLE_DEFAULT_RESULT_FILE _T("Collision.txt")
+#else
+# define SAMPLE_DEFAULT_CAD_FILE SAMPLES_DATA_DIRECTORY"/inventor/collision.iam"
+# define SAMPLE_DEFAULT_RESULT_FILE "Collision.txt"
+#endif
+
+#define INITIALIZE_A3D_API
+#include
+
+#include "../common.hpp"
+
+#include "visitor/VisitorContainer.h"
+#include "visitor/VisitorCascadedAttribute.h"
+#include "visitor/VisitorTree.h"
+#include "visitor/VisitorTransfo.h"
+#include "visitor/CascadedAttributeConnector.h"
+#include "visitor/TransfoConnector.h"
+#include
+#ifdef _MSC_VER
+# include
+#endif
+#include
+#include
+#include
+#include
+
+using string_t = std::basic_string;
+
+// function declared in createssellatedbox.cpp
+A3DStatus CreatePolyBrepModelFromABBox(A3DBoundingBoxData const & sABBox, A3DRiPolyBrepModel ** pRiPolyBrepModel);
+
+//######################################################################################################################
+struct A3DFlattenVisitor : public A3DTreeVisitor
+{
+ std::vector m_vA3DRiBrepModel;
+ std::vector m_vA3DMatrix4x4;
+ std::vector m_vProductIdentifier;
+
+ A3DUTF8Char * m_pcProductIdentifier = nullptr;
+
+ double m_dScaleToMm = 1.;
+
+ A3DFlattenVisitor(A3DVisitorContainer* psContainer = NULL) : A3DTreeVisitor(psContainer) { psContainer->SetTraverseInstance(true); }
+
+ ~A3DFlattenVisitor()
+ {
+ for (A3DUTF8Char* p: m_vProductIdentifier)
+ free(p);
+ }
+
+ A3DStatus visitEnter(const A3DPartConnector& sConnector) override
+ {
+ A3DStatus iRet = A3DTreeVisitor::visitEnter(sConnector);
+ if (iRet == A3D_SUCCESS)
+ {
+ A3DAsmProductOccurrenceGetIdentifier(sConnector.GetProductOccurrenceFather(), &m_pcProductIdentifier);
+ }
+
+ return iRet;
+ }
+
+ A3DStatus visitLeave(const A3DPartConnector& sConnector) override
+ {
+ A3DStatus iRet = A3DTreeVisitor::visitLeave(sConnector);
+ if (m_pcProductIdentifier)
+ {
+ A3DAsmProductOccurrenceGetIdentifier(nullptr, &m_pcProductIdentifier);
+ }
+
+ return iRet;
+ }
+
+ virtual A3DStatus visitEnter(const A3DRiConnector& sConnector) override
+ {
+ A3DStatus iRet = A3DTreeVisitor::visitEnter(sConnector);
+
+ const A3DEntity* pRi = sConnector.GetA3DEntity();
+ A3DEEntityType eType = kA3DTypeUnknown;
+ iRet = A3DEntityGetType(pRi, &eType);
+ if ((iRet == A3D_SUCCESS) && (eType == kA3DTypeRiBrepModel || eType == kA3DTypeRiPolyBrepModel))
+ {
+ A3DVisitorColorMaterials *pA3DCascadedVisitor = static_cast(m_psContainer->GetVisitorByName("CascadedAttribute"));
+ if (pA3DCascadedVisitor)
+ {
+ ColorMaterialsConnector sColorConnector(nullptr);
+ pA3DCascadedVisitor->GetColorMaterialConnector(sColorConnector);
+
+ if (!sColorConnector.IsShow())
+ return A3D_SUCCESS;
+ }
+
+ m_vA3DRiBrepModel.push_back((A3DRiRepresentationItem*)sConnector.GetA3DEntity());
+
+ A3DVisitorTransfo* psVisitorTransfo = static_cast(m_psContainer->GetVisitorByName("Transformation"));
+ A3DTransfoConnector* pConnector = psVisitorTransfo->GetTransfoConnector();
+ A3DMatrix4x4 sTransfo;
+ pConnector->GetGlobalTransfo(sTransfo);
+ delete pConnector;
+
+ // Get global transfo
+ if (m_dScaleToMm != 1.)
+ {
+ A3DMatrix4x4 sScale;
+ sScale.ResetToIdentity();
+ sScale.m_adM[0] = m_dScaleToMm;
+ sScale.m_adM[5] = m_dScaleToMm;
+ sScale.m_adM[10] = m_dScaleToMm;
+ sScale.m_adM[15] = m_dScaleToMm;
+
+ A3DMatrix4x4 sScaledTransfo;
+ sScaledTransfo = sTransfo * sScale;
+ sScaledTransfo.m_adM[15] = 1.;
+ m_vA3DMatrix4x4.push_back(sScaledTransfo);
+ }
+ else
+ m_vA3DMatrix4x4.push_back(sTransfo);
+
+ // Get product occurence identifier ... assuming that there only on rep item by part
+ A3DUTF8Char * pcProductID = nullptr;
+ if (m_pcProductIdentifier != nullptr)
+ {
+ size_t iLen = strlen(m_pcProductIdentifier);
+ pcProductID = static_cast(malloc(sizeof(A3DUTF8Char)*(iLen + 1)));
+ strcpy(pcProductID, m_pcProductIdentifier);
+ }
+ m_vProductIdentifier.push_back(pcProductID);
+
+ }
+ return iRet;
+ }
+};
+
+//#####################################################################################################################
+A3DStatus stGetFlattenRepItemInMmFromModelFile( A3DAsmModelFile * pModelFile,
+ std::vector & apRepItem,
+ std::vector & asIdentifiers)
+{
+ A3DAsmModelFileData sMFData;
+ A3D_INITIALIZE_DATA(A3DAsmModelFileData, sMFData);
+ A3DAsmModelFileGet(pModelFile, &sMFData);
+ double dUnitInMm = sMFData.m_dUnit;
+ A3DAsmModelFileGet(NULL, &sMFData);
+
+ A3DVisitorContainer sA3DVisitorContainer(CONNECT_TRANSFO);
+ sA3DVisitorContainer.SetTraverseInstance(true);
+
+ A3DVisitorColorMaterials *pA3DCascadedVisitor = new A3DVisitorColorMaterials(&sA3DVisitorContainer);
+ sA3DVisitorContainer.push(pA3DCascadedVisitor);
+
+ A3DFlattenVisitor *pA3DFlattenVisitor = new A3DFlattenVisitor(&sA3DVisitorContainer);
+ sA3DVisitorContainer.push(pA3DFlattenVisitor);
+ pA3DFlattenVisitor->m_dScaleToMm = dUnitInMm;
+
+ A3DModelFileConnector sModelFileConnector(pModelFile);
+ A3DStatus sStatus = sModelFileConnector.Traverse(&sA3DVisitorContainer);
+ if (sStatus != A3D_SUCCESS)
+ return A3D_ERROR;
+
+ size_t uiRI, uiNbRepItem = pA3DFlattenVisitor->m_vA3DRiBrepModel.size();
+ if (uiNbRepItem == 0)
+ return A3D_MODELFILE_INCONSISTENT_EMPTY;
+
+ apRepItem.resize(uiNbRepItem);
+ asIdentifiers.resize(uiNbRepItem);
+ for (uiRI = 0; uiRI < uiNbRepItem; uiRI++)
+ {
+ A3DTransfoRepresentationItemData & sTransfRI = apRepItem[uiRI];
+ A3D_INITIALIZE_DATA(A3DTransfoRepresentationItemData, sTransfRI);
+
+ sTransfRI.m_pRepItem = pA3DFlattenVisitor->m_vA3DRiBrepModel[uiRI];
+
+ sTransfRI.m_pOptPlacement = new double[16];
+ memcpy( const_cast(sTransfRI.m_pOptPlacement), pA3DFlattenVisitor->m_vA3DMatrix4x4[uiRI].m_adM, 16 * sizeof(double));
+
+ if (A3DUTF8Char* psId = pA3DFlattenVisitor->m_vProductIdentifier[uiRI])
+ {
+ std::basic_ostringstream stream;
+ stream << psId;
+ asIdentifiers[uiRI] = stream.str();
+ }
+ }
+
+ return A3D_SUCCESS;
+}
+
+void PrintUsage()
+{
+ std::cout << "Usage:" << std::endl
+ << "Collision [INPUT] [OUTPUT] [UUIDs...]" << std::endl
+ << "\tINPUT The input CAD file. Default is '" << SAMPLE_DEFAULT_CAD_FILE << "'" << std::endl
+ << "\tOUTPUT The output result file. Default is 'CURRENT_DIR/Collision.txt'" << std::endl
+ << "\tUUID1 UUID2... Any number of space separated UUIDs of representation items to be checked to each other. If not set, two relevant UUIDs from the CAD file will be picked" << std::endl;
+}
+
+//######################################################################################################################
+#ifdef _MSC_VER
+int wmain(A3DInt32 iArgc, A3DUniChar** ppcArgv)
+#else
+int main(A3DInt32 iArgc, A3DUTF8Char** ppcArgv)
+#endif
+{
+ PrintUsage();
+
+ // INITIALIZE HOOPS EXCHANGE
+ A3DSDKHOOPSExchangeLoader sHoopsExchangeLoader(_T(HOOPS_BINARY_DIRECTORY));
+ CHECK_RET(sHoopsExchangeLoader.m_eSDKStatus);
+ CHECK_RET(A3DDllSetCallbacksMemory(CheckMalloc, CheckFree));
+ CHECK_RET(A3DDllSetCallbacksReport(PrintLogMessage, PrintLogWarning, PrintLogError));
+
+ // Parsing arguments
+ string_t acInputCADFile = SAMPLE_DEFAULT_CAD_FILE;
+ string_t acResultFile = SAMPLE_DEFAULT_RESULT_FILE;
+ std::vector asInputUUID;
+
+ // Default Input CAD overridden by first argument
+ if (iArgc > 1)
+ {
+ acInputCADFile = ppcArgv[1];
+ }
+
+ // Default result file overridden by second argument
+ if (iArgc > 2)
+ {
+ acResultFile = ppcArgv[2];
+ }
+
+ // Get all UUIDs
+ for (A3DInt32 i = 3; i < iArgc; ++i)
+ {
+ asInputUUID.emplace_back(ppcArgv[i]);
+ }
+
+ //#####################################
+ // ### Import input XML file
+ //#####################################
+ A3DImport sImport(acInputCADFile.c_str());
+
+ A3DStatus iRet = A3D_ERROR;
+ const size_t uiSize = acInputCADFile.size();
+ if (uiSize >= 4)
+ {
+ const string_t sExtension = acInputCADFile.substr(uiSize - 4, 4);
+#ifdef _MSC_VER
+ if (sExtension == _T(".xml") || sExtension == _T(".XML") || sExtension == _T(".Xml"))
+ {
+ std::wstring_convert> converter;
+ const std::string aScrFileNameUTF8 = converter.to_bytes(acInputCADFile);
+ iRet = A3DAsmModelFileLoadFromXMLFile(aScrFileNameUTF8.c_str(), &sImport.m_sLoadData, &sHoopsExchangeLoader.m_psModelFile);
+ }
+#else
+ if (sExtension == ".xml" || sExtension == ".XML" || sExtension == ".Xml")
+ iRet = A3DAsmModelFileLoadFromXMLFile(acInputCADFile.c_str(), &sImport.m_sLoadData, &sHoopsExchangeLoader.m_psModelFile);
+#endif
+ else
+ iRet = sHoopsExchangeLoader.Import(sImport);
+ }
+ else
+ iRet = sHoopsExchangeLoader.Import(sImport);
+
+ if (iRet != A3D_SUCCESS && iRet != A3D_LOAD_MISSING_COMPONENTS)
+ CHECK_RET(iRet);
+
+ //#####################################
+ // ### Flatten Representation Items
+ //#####################################
+ std::vector apRepItem;
+ std::vector asIdentifier;
+ iRet = stGetFlattenRepItemInMmFromModelFile(sHoopsExchangeLoader.m_psModelFile, apRepItem, asIdentifier);
+ CHECK_RET(iRet);
+
+ //#####################################
+ // ### Some Checks
+ //#####################################
+ if (apRepItem.size() < 2)
+ {
+ std::cout << "Collision sample needs at least 2 representation items in the model file to process." << std::endl;
+ return A3D_ERROR;
+ }
+ assert(apRepItem.size() == asIdentifier.size());
+
+ // If no UUID given by the user, take the first available
+ if (asInputUUID.empty())
+ {
+ asInputUUID.push_back(asIdentifier.front());
+ }
+
+ ////#####################################
+ //// ### Build collision group
+ ////#####################################
+ std::vector asGroup1, asGroup2;
+ std::vector auiGroupIndex1, auiGroupIndex2;
+ for (size_t iIndex = 0; iIndex < apRepItem.size(); iIndex++)
+ {
+ bool bInSecondGroup = true;
+ string_t const & sCurID = asIdentifier[iIndex];
+ for (auto const & sInputID : asInputUUID)
+ {
+ if (sCurID.compare(sInputID) == 0)
+ {
+ asGroup1.push_back(apRepItem[iIndex]);
+ auiGroupIndex1.push_back(iIndex);
+ bInSecondGroup = false;
+ break;
+ }
+ }
+ if (bInSecondGroup)
+ {
+ asGroup2.push_back(apRepItem[iIndex]);
+ auiGroupIndex2.push_back(iIndex);
+ }
+ }
+
+ // fill first group structure
+ A3DCollisionGroupData sGroup1;
+ A3D_INITIALIZE_DATA(A3DCollisionGroupData, sGroup1);
+ sGroup1.m_uRepItemSize = (A3DUns32)asGroup1.size();
+ if (sGroup1.m_uRepItemSize)
+ sGroup1.m_apRepItems = &asGroup1[0];
+ else
+ {
+ printf("Invalid first group\n");
+ return -1;
+ }
+
+ // fill second group structure
+ A3DCollisionGroupData sGroup2;
+ A3D_INITIALIZE_DATA(A3DCollisionGroupData, sGroup2);
+ sGroup2.m_uRepItemSize = (A3DUns32)asGroup2.size();
+ if (sGroup2.m_uRepItemSize)
+ sGroup2.m_apRepItems = &asGroup2[0];
+
+
+ //#####################################
+ // ### Specify collision parameters
+ //#####################################
+
+ A3DCollisionParameterData sCollisionParameter;
+ A3D_INITIALIZE_DATA(A3DCollisionParameterData, sCollisionParameter);
+ sCollisionParameter.m_dContactLimit = 0.1;
+ sCollisionParameter.m_dSafetyDistance = 1.;
+ sCollisionParameter.m_dTessellationTolerance = 0.01;
+
+ //#####################################
+ // ### Compute
+ //#####################################
+
+ A3DUns32 uCollisionResultsSize = 0;
+ A3DCollisionResultData * apCollisionResults = nullptr;
+ iRet = A3DCollisionCompute(&sGroup1, sGroup2.m_uRepItemSize?&sGroup2:nullptr,
+ &sCollisionParameter,
+ &uCollisionResultsSize, &apCollisionResults);
+ CHECK_RET(iRet);
+
+ std::basic_ofstream sOutput;
+ sOutput.open(acResultFile);
+ if (sOutput.is_open())
+ {
+ for (A3DUns32 uiRes = 0; uiRes < uCollisionResultsSize; uiRes++)
+ {
+ A3DCollisionResultData const & sCurResult = apCollisionResults[uiRes];
+
+ size_t iGlobalIndex1 = auiGroupIndex1[sCurResult.m_iRepItemIndex1];
+ size_t iGlobalIndex2 = (sGroup2.m_uRepItemSize != 0) ? auiGroupIndex2[sCurResult.m_iRepItemIndex2] : auiGroupIndex1[sCurResult.m_iRepItemIndex2];
+
+ sOutput << "Check " << asIdentifier[iGlobalIndex1] << " with " << asIdentifier[iGlobalIndex2] << " : ";
+
+ switch (sCurResult.m_eStatus)
+ {
+ case A3DCollision_Unknown: sOutput << "Unknown"; break;
+ case A3DCollision_NoCollision: sOutput << "No Collision"; break;
+ case A3DCollision_Clearance: sOutput << "Clearance"; break;
+ case A3DCollision_Contact: sOutput << "Contact"; break;
+ case A3DCollision_Collision: sOutput << "Collision"; break;
+ case A3DCollision_FirstInside: sOutput << "First is Inside"; break;
+ case A3DCollision_SecondInside: sOutput << "Second is Inside"; break;
+ }
+
+ sOutput << std::endl;
+ }
+
+ sOutput.close();
+ }
+
+ // Free memory
+ iRet = A3DCollisionCompute(nullptr, nullptr, nullptr, &uCollisionResultsSize, &apCollisionResults);
+ CHECK_RET(iRet);
+
+ for (auto & sTransfoRep : apRepItem)
+ {
+ delete [] sTransfoRep.m_pOptPlacement;
+ }
+
+ // Check memory allocations
+ return (int)ListLeaks();
+}
+
diff --git a/exchange/exchangesource/Collision/Collision.vcxproj b/exchange/exchangesource/Collision/Collision.vcxproj
new file mode 100644
index 0000000..ae59062
--- /dev/null
+++ b/exchange/exchangesource/Collision/Collision.vcxproj
@@ -0,0 +1,199 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {EC2593D7-2AB1-4EFC-B412-9C5A70939DF9}
+ Collisision
+ Win32Proj
+ 10.0
+
+
+
+ Application
+ v145
+ true
+
+
+ Application
+ v145
+
+
+ Application
+ v145
+ true
+
+
+ Application
+ v145
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>12.0.30501.0
+
+
+
+ Disabled
+ %(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ false
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ MachineX86
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+ X64
+
+
+ Disabled
+ %(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ false
+ EnableFastChecks
+ MultiThreadedDebugDLL
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ MachineX64
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+ MaxSpeed
+ true
+ %(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ true
+ true
+ MachineX86
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+ X64
+
+
+ MaxSpeed
+ true
+ %(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ MultiThreadedDLL
+ true
+
+ Level4
+ ProgramDatabase
+ false
+
+
+ true
+ Console
+ true
+ true
+ MachineX64
+ legacy_stdio_float_rounding.obj;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/exchange/exchangesource/Collision/Collision.vcxproj.filters b/exchange/exchangesource/Collision/Collision.vcxproj.filters
new file mode 100644
index 0000000..bd7d379
--- /dev/null
+++ b/exchange/exchangesource/Collision/Collision.vcxproj.filters
@@ -0,0 +1,126 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav
+
+
+ {7d804a86-38ae-4203-91de-03178fd72c1b}
+
+
+ {9fc7e631-8e85-48c8-bf89-40c346f0dc9d}
+
+
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files\Visitor
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+ Header Files\Visitors Headers
+
+
+
\ No newline at end of file
diff --git a/exchange/exchangesource/Collision/createtessellatedbox.cpp b/exchange/exchangesource/Collision/createtessellatedbox.cpp
new file mode 100644
index 0000000..1ebde31
--- /dev/null
+++ b/exchange/exchangesource/Collision/createtessellatedbox.cpp
@@ -0,0 +1,175 @@
+/***********************************************************************************************************************
+*
+* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
+* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
+* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
+* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
+* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
+* scope and manner of such use.
+*
+***********************************************************************************************************************/
+/**
+\file createtessellatedbox.cpp
+
+This file demonstrates how to create a simple A3DPolyBrepModel with triangle only from a A3DBoundingBoxData.
+It's based on the CreatePRCCubes samples
+
+***********************************************************************************************************************/
+#include
+#include "../common.hpp"
+
+static A3DDouble stCubeNormals[18] = {
+ 1., 0., 0.,
+ -1., 0., 0.,
+ 0., 1., 0.,
+ 0., -1., 0.,
+ 0., 0., 1.,
+ 0., 0., -1.
+};
+
+static A3DUns32 stCubeFacesNormalPTriangles[48] =
+{
+// N, P, P, P, N, P, P, P
+ 12, 0, 3, 6, 12, 6, 3, 9, // Face 0
+ 6, 6, 9, 12, 6, 12, 9, 15, // Face 1
+ 15, 12, 15, 18, 15, 18, 15, 21, // Face 2
+ 9, 18, 21, 0, 9, 0, 21, 3, // Face 3
+ 0, 3, 21, 9, 0, 9, 21, 15, // Face 4
+ 3, 18, 0, 12, 3, 12, 0, 6, // Face 5
+};
+
+//#####################################################################################################################
+static void freeTess3DData(A3DTess3DData& sTess3DData)
+{
+ free(sTess3DData.m_pdNormals);
+ free(sTess3DData.m_puiTriangulatedIndexes);
+ for (A3DUns32 ui = 0; ui < sTess3DData.m_uiFaceTessSize; ++ui)
+ {
+ free(sTess3DData.m_psFaceTessData[ui].m_puiSizesTriangulated);
+ }
+ free(sTess3DData.m_psFaceTessData);
+
+}
+
+//#####################################################################################################################
+// Create a A3DTess3D from a A3DBoundingBoxData with only triangles
+static A3DStatus CreateA3DTess3DFromABBox(A3DBoundingBoxData const & sABBox, A3DTess3D ** ppTess3D)
+{
+ A3DStatus iRet = A3D_SUCCESS;
+
+ A3DTess3DData sTess3DData;
+ A3D_INITIALIZE_DATA(A3DTess3DData, sTess3DData);
+
+ // Normal coordinates
+ sTess3DData.m_uiNormalSize = 18;
+ sTess3DData.m_pdNormals = static_cast(malloc((size_t)sTess3DData.m_uiNormalSize * sizeof(A3DDouble)));
+ for (A3DUns32 ui = 0; ui < sTess3DData.m_uiNormalSize; ++ui)
+ sTess3DData.m_pdNormals[ui] = stCubeNormals[ui];
+
+ sTess3DData.m_uiTriangulatedIndexSize = 8 * 6;
+ sTess3DData.m_puiTriangulatedIndexes = (A3DUns32*)malloc((size_t)sTess3DData.m_uiTriangulatedIndexSize * sizeof(A3DUns32));
+ for (A3DUns32 ui = 0; ui < sTess3DData.m_uiTriangulatedIndexSize; ++ui)
+ {
+ sTess3DData.m_puiTriangulatedIndexes[ui] = stCubeFacesNormalPTriangles[ui];
+ }
+
+ // Faces
+ sTess3DData.m_bHasFaces = true;
+ sTess3DData.m_uiFaceTessSize = 6;
+ sTess3DData.m_psFaceTessData = static_cast(malloc((size_t)sTess3DData.m_uiFaceTessSize * sizeof(A3DTessFaceData)));
+ for (A3DUns32 ui = 0; ui < sTess3DData.m_uiFaceTessSize; ++ui)
+ {
+ A3DTessFaceData& sFace = sTess3DData.m_psFaceTessData[ui];
+ A3D_INITIALIZE_DATA(A3DTessFaceData, sFace);
+
+ sFace.m_usUsedEntitiesFlags = kA3DTessFaceDataTriangleOneNormal;
+ sFace.m_uiStartTriangulated = ui * 8;
+
+ sFace.m_uiSizesTriangulatedSize = 1; // size of the next array
+ sFace.m_puiSizesTriangulated = (A3DUns32*)malloc(sFace.m_uiSizesTriangulatedSize * A3DUns32(sizeof(A3DUns32)));
+ sFace.m_puiSizesTriangulated[0] = 2; // number of triangles for this face
+ }
+
+ iRet = A3DTess3DCreate(&sTess3DData, ppTess3D);
+ freeTess3DData(sTess3DData);
+ CHECK_RET(iRet);
+
+ A3DTessBaseData sTessBaseData;
+ A3D_INITIALIZE_DATA(A3DTessBaseData, sTessBaseData);
+
+ sTessBaseData.m_bIsCalculated = false;
+
+ // Point coordinates
+ sTessBaseData.m_uiCoordSize = 8 * 3;
+ sTessBaseData.m_pdCoords = static_cast(malloc((size_t)sTessBaseData.m_uiCoordSize * sizeof(A3DDouble)));
+
+ sTessBaseData.m_pdCoords[0] = sABBox.m_sMin.m_dX;
+ sTessBaseData.m_pdCoords[1] = sABBox.m_sMin.m_dY;
+ sTessBaseData.m_pdCoords[2] = sABBox.m_sMax.m_dZ;
+
+ sTessBaseData.m_pdCoords[3] = sABBox.m_sMax.m_dX;
+ sTessBaseData.m_pdCoords[4] = sABBox.m_sMin.m_dY;
+ sTessBaseData.m_pdCoords[5] = sABBox.m_sMax.m_dZ;
+
+ sTessBaseData.m_pdCoords[6] = sABBox.m_sMin.m_dX;
+ sTessBaseData.m_pdCoords[7] = sABBox.m_sMax.m_dY;
+ sTessBaseData.m_pdCoords[8] = sABBox.m_sMax.m_dZ;
+
+ sTessBaseData.m_pdCoords[9] = sABBox.m_sMax.m_dX;
+ sTessBaseData.m_pdCoords[10] = sABBox.m_sMax.m_dY;
+ sTessBaseData.m_pdCoords[11] = sABBox.m_sMax.m_dZ;
+
+ sTessBaseData.m_pdCoords[12] = sABBox.m_sMin.m_dX;
+ sTessBaseData.m_pdCoords[13] = sABBox.m_sMax.m_dY;
+ sTessBaseData.m_pdCoords[14] = sABBox.m_sMin.m_dZ;
+
+
+ sTessBaseData.m_pdCoords[15] = sABBox.m_sMax.m_dX;
+ sTessBaseData.m_pdCoords[16] = sABBox.m_sMax.m_dY;
+ sTessBaseData.m_pdCoords[17] = sABBox.m_sMin.m_dZ;
+
+ sTessBaseData.m_pdCoords[18] = sABBox.m_sMin.m_dX;
+ sTessBaseData.m_pdCoords[19] = sABBox.m_sMin.m_dY;
+ sTessBaseData.m_pdCoords[20] = sABBox.m_sMin.m_dZ;
+
+ sTessBaseData.m_pdCoords[21] = sABBox.m_sMax.m_dX;
+ sTessBaseData.m_pdCoords[22] = sABBox.m_sMin.m_dY;
+ sTessBaseData.m_pdCoords[23] = sABBox.m_sMin.m_dZ;
+
+ iRet = A3DTessBaseSet(*ppTess3D, &sTessBaseData);
+ free(sTessBaseData.m_pdCoords);
+
+ return iRet;
+}
+
+//######################################################################################################################
+static A3DStatus createPolyBrepModelFromA3DTess3D(A3DRiPolyBrepModel** ppPolyBREP, A3DTess3D* pTess3D)
+{
+ A3DStatus iRet = A3D_SUCCESS;
+
+ A3DRiPolyBrepModelData sPolyBrepModelData;
+ A3D_INITIALIZE_DATA(A3DRiPolyBrepModelData, sPolyBrepModelData);
+ sPolyBrepModelData.m_bIsClosed = TRUE;
+ CHECK_RET(A3DRiPolyBrepModelCreate(&sPolyBrepModelData, ppPolyBREP));
+
+ // assign the cube tessellation to the PolyBrepModel
+ A3DRiRepresentationItemData sRiData;
+ A3D_INITIALIZE_DATA(A3DRiRepresentationItemData, sRiData);
+ sRiData.m_pTessBase = pTess3D;
+ sRiData.m_pCoordinateSystem = NULL;
+ CHECK_RET(A3DRiRepresentationItemSet(*ppPolyBREP, &sRiData));
+
+ return iRet;
+}
+
+//#####################################################################################################################
+// Create a A3DRiPolyBrepModel from a A3DBoundingBoxData with only triangles
+A3DStatus CreatePolyBrepModelFromABBox(A3DBoundingBoxData const & sABBox, A3DRiPolyBrepModel ** pRiPolyBrepModel)
+{
+ A3DTess3D * pTess3D = nullptr;
+ CHECK_RET(CreateA3DTess3DFromABBox(sABBox, &pTess3D));
+
+ CHECK_RET(createPolyBrepModelFromA3DTess3D(pRiPolyBrepModel, pTess3D));
+
+ return A3D_SUCCESS;
+}
diff --git a/exchange/exchangesource/Collision/visitor/A3DVector.h b/exchange/exchangesource/Collision/visitor/A3DVector.h
new file mode 100644
index 0000000..64028f8
--- /dev/null
+++ b/exchange/exchangesource/Collision/visitor/A3DVector.h
@@ -0,0 +1,121 @@
+#ifndef A3DVECTOR_H
+#define A3DVECTOR_H
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+class A3DVector3d
+{
+public:
+ double x;
+ double y;
+ double z;
+
+ A3DVector3d() {}
+ A3DVector3d(double dX, double dY, double dZ) : x(dX), y(dY), z(dZ) {}
+ A3DVector3d(const A3DVector3dData& sV) : x(sV.m_dX), y(sV.m_dY), z(sV.m_dZ) {}
+ inline void set(double dX, double dY, double dZ)
+ { x = dX; y = dY; z = dZ; }
+
+ A3DVector3d(const A3DVector3d& toCopy) : x(toCopy.x), y(toCopy.y), z(toCopy.z) {}
+
+ inline double Length() const { return sqrt(x*x + y*y + z*z); }
+
+ inline double LenghtSquared() const{ return x*x + y*y + z*z; }
+
+ inline A3DStatus normalize()
+ {
+ double d = this->Length();
+ if(d == 0)
+ return A3D_ERROR;
+ x/=d;
+ y/=d;
+ z/=d;
+ return A3D_SUCCESS;
+ }
+
+ inline double Distance(const A3DVector3d& sOther) const
+ {
+ return sqrt(this->SquareDistance(sOther));
+ }
+
+ inline double SquareDistance(const A3DVector3d& sOther) const
+ {
+ double d=0,dd;
+ dd = x; dd -= sOther.x; dd *= dd; d += dd;
+ dd = y; dd -= sOther.y; dd *= dd; d += dd;
+ dd = z; dd -= sOther.z; dd *= dd; d += dd;
+ return d;
+ }
+
+ inline double Dot(const A3DVector3d& sOther) const
+ {
+ return x*sOther.x + y*sOther.y + z*sOther.z;
+ }
+
+ inline A3DVector3d Cross(const A3DVector3d& sOther)
+ {
+ return A3DVector3d(y*sOther.z - z*sOther.y, z*sOther.x - x*sOther.z, x*sOther.y - y*sOther.x);
+ }
+
+
+ // in-place vector algebra
+ inline A3DVector3d& operator += ( const A3DVector3d& sOther )
+ {
+ x+=sOther.x;
+ y+=sOther.y;
+ z+=sOther.z;
+ return *this;
+ }
+
+ inline A3DVector3d& operator -= ( const A3DVector3d& sOther )
+ {
+ x-=sOther.x;
+ y-=sOther.y;
+ z-=sOther.z;
+ return *this;
+ }
+
+ inline A3DVector3d operator + ( const A3DVector3d& sOther ) const
+ {
+ return A3DVector3d(x+sOther.x, y+sOther.y, z+sOther.z);
+ }
+
+ inline A3DVector3d operator - ( const A3DVector3d& sOther ) const
+ {
+ return A3DVector3d(x-sOther.x, y-sOther.y, z-sOther.z);
+ }
+
+ inline A3DVector3d& operator *= ( double dValue )
+ {
+ x*=dValue;
+ y*=dValue;
+ z*=dValue;
+ return *this;
+ }
+
+ inline A3DVector3d& operator /= ( double dValue )
+ {
+ x/=dValue;
+ y/=dValue;
+ z/=dValue;
+ return *this;
+ }
+
+ inline A3DVector3d operator * ( double dValue ) const
+ {
+ return A3DVector3d(x*dValue, y*dValue, z*dValue);
+ }
+
+ inline A3DVector3d operator / ( double dValue ) const
+ {
+ return A3DVector3d(x/dValue, y/dValue, z/dValue);
+ }
+};
+
+#endif
diff --git a/exchange/exchangesource/Collision/visitor/BrepTraverse.cpp b/exchange/exchangesource/Collision/visitor/BrepTraverse.cpp
new file mode 100644
index 0000000..4ddb05e
--- /dev/null
+++ b/exchange/exchangesource/Collision/visitor/BrepTraverse.cpp
@@ -0,0 +1,312 @@
+/***********************************************************************************************************************
+*
+* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
+* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
+* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
+* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
+* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
+* scope and manner of such use.
+*
+***********************************************************************************************************************/
+/**
+\file BrepTraverse.cpp
+This file demonstrates how to programmatically traverse the Brep structure
+
+***********************************************************************************************************************/
+
+#include "VisitorContainer.h"
+#include "BrepTraverse.h"
+#include