68 Commits

Author SHA1 Message Date
Daniele Bariletti 3d019e4efd EgtExch3dm 3.1c1 :
- nuova MakeUniform
- cambio versione.
2026-03-06 17:29:23 +01:00
Daniele Bariletti b6d788ea4f EgtExch3dm 3.1b1 :
- correzione all'export delle trimesh.
- cambio versione.
2026-02-17 12:30:21 +01:00
Daniele Bariletti f94cc0d1db EgtExch3dm :
- superfici di estrusione importate come bezier e non come trimesh.
2026-02-05 16:51:12 +01:00
Daniele Bariletti f4471e8c30 EgtExch3dm 3.1a3 :
- corretta importazione di superfici di estrusione.
- cambio versione.
2026-02-05 10:42:48 +01:00
Daniele Bariletti 8f961fcd74 EgtExcha3dm 3.1a2 :
- cambio versione.
2026-01-27 12:43:42 +01:00
Daniele Bariletti 956c7578d1 EgtExch3dm :
- modifica all'esportazione di colori degli oggetti.
2026-01-27 12:30:16 +01:00
Daniele Bariletti b7daadfe1b Merge branch 'master' of https://gitlab.steamware.net/egalware-cadcam/libreriebase/EgtExch3dm 2026-01-27 10:07:02 +01:00
Daniele Bariletti dcd399c379 EgtExch3dm :
- nell'import gestiti i nomi degli oggetti e le loro info( quelle salvate negli attributi)
- aggiunta funzione per la conversione delle stringhe.
2026-01-27 10:06:55 +01:00
Dario Sassi 47856162bf EgtExch3dm :
- ulteriore piccola miglioria in import/export trasparenza di colore per 3dm.
2026-01-26 16:06:38 +01:00
Dario Sassi 74aced79bf EgtExch3dm :
- piccola correzione in export/import 3dm per Alpha di colore.
2026-01-26 15:35:49 +01:00
Dario Sassi 5c3c9863ae EgtExch3dm 3.1a1 :
- ricompilazione con cambio major version.
2026-01-02 18:28:48 +01:00
Daniele Bariletti 43c98f3387 EgtExch3dm :
- modifiche al riconoscimento del trim delle bezier
- aggiunta importaizone visibilità dei layer.
2025-12-22 10:14:45 +01:00
Daniele Bariletti f655b96ad5 Egtxch3dm :
- correzione all'identificazione di superfici trimmate.
2025-12-19 17:15:08 +01:00
Daniele Bariletti fcc1b48196 EgtExch3dm :
- aggiunta correzione alle superfici di bezier importate.
2025-12-19 15:09:49 +01:00
Daniele Bariletti ad52d30e5d Merge branch 'master' of https://gitlab.steamware.net/egalware-cadcam/libreriebase/EgtExch3dm 2025-12-16 12:08:31 +01:00
Daniele Bariletti 27ca1129a7 EgtExch3dm :
- piccola correzione.
2025-12-16 12:08:27 +01:00
Dario Sassi 8dc3b53334 EgtExch3dm 2.7l1 :
- ricompilazione con cambio versione.
2025-12-15 08:16:17 +01:00
Dario Sassi baccbad41b EgtExch3dm 2.7k1 :
- ricompilazione per passaggio a C++ 20
2025-11-01 17:34:49 +01:00
Dario Sassi e1dce523da EgtExch3dm 2.7j3 :
- ricompilazione con cambio versione.
2025-10-20 12:35:10 +02:00
Daniele Bariletti fdc007b0e6 EgtGeomKernel :
- aumentata la precsione di importazione delle curve di trim.
2025-10-16 16:22:38 +02:00
Dario Sassi 386c2e5b46 EgtExch3dm 2.7i1 :
- ricompilazione con cambio versione.
2025-09-05 08:19:36 +02:00
Dario Sassi a167995f4a EgtExch3dm 2.7h1 :
- ricompilazione con cambio versione.
2025-08-22 11:47:53 +02:00
Dario Sassi 5b7ed17241 EgtExch3dm 2.7g1 :
- ricompilazione con cambio versione.
2025-07-02 19:49:29 +02:00
Dario Sassi 206c24c6a4 EgtExch3dm 2.7f2 :
- ricompilazione con cambio versione.
2025-06-26 09:48:19 +02:00
Daniele Bariletti c2728c7cd3 EgtExch3dm :
- piccola correzione al log errori.
2025-04-22 12:03:03 +02:00
Daniele Bariletti dd77203dab Merge branch 'master' of https://gitlab.steamware.net/egalware-cadcam/libreriebase/EgtExch3dm 2025-04-22 12:00:26 +02:00
Daniele Bariletti 38d15bf412 EgtExch3dm :
- piccola correzione al log errori.
2025-04-22 12:00:20 +02:00
Dario Sassi 1396b22802 EgtExch3dm 2.7d2 :
- ricompilazione con cambio versione.
2025-04-21 11:18:22 +02:00
Dario Sassi d26abd8452 EgtExch3dm 2.7c4 :
- ricompilazione con cambio di versione.
2025-03-28 20:18:31 +01:00
Dario Sassi becf06ffed EgtExch3dm 2.7c1 :
- ricompilazione con cambio versione.
2025-03-06 20:11:45 +01:00
Dario Sassi 81ea592001 EgtExch3dm 2.7b1 :
- ricompilazione con cambio versione.
2025-02-28 12:09:52 +01:00
Dario Sassi 8be2ffeb7b EgtExch3dm :
- sistemazione conversione wstring in string
- anche per debug compilazione 32bit senza più limiti per Windows XP.
2025-01-15 15:23:33 +01:00
Dario Sassi abfec33be1 EgtExch3dm 2.7a1 :
- cambio annuale di versione
- compilazione 32bit senza più limiti per Windows XP.
2025-01-09 18:00:04 +01:00
Dario Sassi 34841e4c16 EgtExch3dm 2.6l1 :
- aggiustamenti vari per utilizzo libreria fast_float in FromString.
2025-01-03 12:19:05 +01:00
Dario Sassi 0cd32caf47 EgtExch3dm 2.6i1 :
- ricompilazione con cambio versione.
2024-09-23 13:04:45 +02:00
Dario Sassi 348b01b81b EgtExch3dm 2.6h2 :
- ricompilazione con cambio versione.
2024-08-22 09:11:24 +02:00
Dario Sassi 21ec3f0790 EgtExch3dm 2.6g5 :
- ricompilazione con cambio versione.
2024-07-18 20:19:42 +02:00
Dario Sassi a7b13f78f7 EgtExch3dm 2.6g1 :
- ricompilazione con cambio versione.
2024-07-09 11:15:36 +02:00
Dario Sassi 72351793d5 EgtExch3dm 2.6f4 :
- ricompilazione con cambio versione.
2024-06-26 08:42:46 +02:00
Dario Sassi 40b343207e EgtExch3dm 2.6f3 :
- ricompilazione con cambio versione.
2024-06-13 08:00:03 +02:00
Daniele Bariletti 3dad5fde1e EgtExch3dm :
- correzione di un piccolo bug.
2024-06-12 12:53:54 +02:00
Dario Sassi 595dd560e4 EgtExch3dm 2.6f1 :
- ricompilazione con cambio versione.
2024-06-07 19:00:35 +02:00
Daniele Bariletti 9c1fff1d52 EgtExch3dm :
- piccola correzione.
2024-05-21 10:37:55 +02:00
Daniele Bariletti a523d9ea2b Merge branch 'master' of https://gitlab.steamware.net/egalware-cadcam/libreriebase/EgtExch3dm 2024-05-20 15:09:02 +02:00
Daniele Bariletti 691c3def9e EgtExch3dm :
- reso più robusto il controllo per capire se una superficie è trimmata.
2024-05-20 15:08:57 +02:00
Dario Sassi ecdae1b3c3 EgtExch3dm 2.6e1 :
- ricompilazione per modifiche a gestione chiave di rete.
2024-04-30 16:54:42 +02:00
Daniele Bariletti 74e3e2e4df EgtExch3dm :
- miglioramento nella gestione dei layer importati
- rimozione di memory leaks.
2024-04-29 17:22:25 +02:00
Daniele Bariletti 2f04868dd5 EgtExch3dm :
- non è più necessaria la chiamata della funzione CalcPoles al di fuori della classe SurfBezier.
2024-04-17 15:13:59 +02:00
Daniele Bariletti 8d3cf60fec EgtExch3dm :
- corretto un bug nel trim delle superfici NURBS.
2024-04-17 14:47:45 +02:00
Daniele Bariletti 601c61f930 EgtExch3dm :
- migliorata la gestione dei layer importati.
2024-04-12 11:50:47 +02:00
Dario Sassi 5074b7f119 EgtExch3dm :
- aggiustamenti per modifiche a MakeUniform.
2024-04-11 00:21:51 +02:00
Daniele Bariletti ec085470f8 EgtExch3dm :
- funzione MakeUniform resa un metodo della classe Bezier.
2024-04-10 16:27:39 +02:00
Daniele Bariletti f7a03f6cb4 EgtExch3dm :
- corretta identificazione errori nella conversione di facce di Brep.
2024-04-10 11:51:55 +02:00
Daniele Bariletti 024caa43d5 EgtExch3dm :
- aggiornata la chiamata alla funzione SurfTmSwept (modificata nel GeomKernel).
2024-04-10 10:11:56 +02:00
Daniele Bariletti 109474cb18 EgtExch3dm :
- aggiornata la chiamata alla funzione SurfTmSwept (modificata nel GeomKernel).
2024-04-10 10:00:52 +02:00
Daniele Bariletti c5df52a3ca EgtExch3dm :
- corretto un bug nel conto dei trim non convertiti.
2024-04-10 09:18:19 +02:00
Daniele Bariletti df8cd714b5 EgtExch3dm :
- aggiunta la gestione della dimensione del testo durante l'export.
- aggiornato l'input per una funzione di Swept che è stata modificata nel GeomKernel.
2024-04-09 16:13:54 +02:00
Daniele Bariletti 917832a54a EgtExch3dm :
- cambio versione
- pulizia codice.
2024-04-09 11:46:38 +02:00
Daniele Bariletti 87c082ceab Merge branch 'master' of https://gitlab.steamware.net/egalware-cadcam/libreriebase/EgtExch3dm 2024-04-09 11:43:07 +02:00
Daniele Bariletti df3024f666 EgtExch3dm :
- per l'export delle ExtDim e Text ora vengono usate le classi del 3dm.
2024-04-09 11:43:02 +02:00
Dario Sassi d0f8e3bfc0 EgtExch3dm 2.6d1 :
- ricompilazione con cambio versione.
2024-04-05 16:51:43 +02:00
Dario Sassi 872906778c EgtExch3dm 2.6c3 :
- cambio versione.
2024-03-27 16:42:58 +01:00
Daniele Bariletti 34dae2d429 EgtExch3dm :
- aggiunta la sigla "dim_" di default al nome delle quotature.
2024-03-27 09:45:29 +01:00
Daniele Bariletti 361fe95890 EgtExch3dm :
- aggiunte all'export le classi Text e ExtDim.
2024-03-22 12:32:15 +01:00
Daniele Bariletti f22186f0a2 EgtExch3dm :
- per l'export: aggiunta la transparency al materiale.
2024-03-21 14:52:58 +01:00
Daniele Bariletti 1272a55294 EgtExch3dm :
- commentata una funzione, in attesa che venga aggiunta al master del geom kernel.
2024-03-15 10:51:34 +01:00
Daniele Bariletti b741391ffc Merge remote-tracking branch 'origin/develop' 2024-03-11 10:40:50 +01:00
Dario Sassi 0ad38f9e45 EgtExch3dm 2.6c2 :
- ricompilazione con cambio versione.
2024-03-10 10:24:00 +01:00
6 changed files with 730 additions and 414 deletions
BIN
View File
Binary file not shown.
+7 -7
View File
@@ -23,19 +23,19 @@
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{d1a76918-1e81-4851-9b6f-2b1db0efb2a4}</ProjectGuid>
<RootNamespace>EgtExch3dm</RootNamespace>
<WindowsTargetPlatformVersion>10.0.20348.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141_xp</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141_xp</PlatformToolset>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
@@ -104,7 +104,7 @@
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<OpenMPSupport>false</OpenMPSupport>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -133,7 +133,7 @@ copy $(TargetPath) \EgtProg\DllD32</Command>
<EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
<OpenMPSupport>false</OpenMPSupport>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<WholeProgramOptimization>false</WholeProgramOptimization>
@@ -165,7 +165,7 @@ copy $(TargetPath) \EgtProg\Dll32</Command>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -192,7 +192,7 @@ copy $(TargetPath) \EgtProg\DllD64</Command>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
+214 -35
View File
@@ -15,28 +15,20 @@
#include "stdafx.h"
#include "Export3dm.h"
#include "DllMain.h"
#include "/EgtDev/Include/EE3DllMain.h"
#include "/EgtDev/Include/EGkGeomDB.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
#include "/EgtDev/Include/EGkSurfBezier.h"
#include "/EgtDev/Include/EGkGeoPoint3d.h"
#include "/EgtDev/Include/EGkCurveLine.h"
#include "/EgtDev/Include/EGkCurveArc.h"
#include "/EgtDev/Include/EGkCurveBezier.h"
#include "/EgtDev/Include/EGkCurveComposite.h"
#include "/EgtDev/Include/EGkGdbIterator.h"
#include "/EgtDev/Include/EGkGeoObjType.h"
#include "/EgtDev/Include/EGkGeoPoint3d.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
#include "/EgtDev/Include/EGkSurfBezier.h"
#include "/EgtDev/Include/EGkExtText.h"
#include "/EgtDev/Include/EGkExtDimension.h"
#include "/EgtDev/Include/EGnStringUtils.h"
#include "/EgtDev/Include/SELkKeyProc.h"
#include "/EgtDev/Include/EgtNumUtils.h"
#include "/EgtDev/Include/EgtKeyCodes.h"
#include "/EgtDev/Include/EgtStringConverter.h"
#include "/EgtDev/Include/EgtPointerOwner.h"
#include "/EgtDev/Include/EGnStringUtils.h"
#include "/EgtDev/Extern/opennurbs/Include/opennurbs.h"
#include <fstream>
#include <map>
using namespace std ;
//N.B.:
@@ -210,6 +202,18 @@ Export3dm::ExportObject( const IGdbIterator& iIter, const int& nLayer, bool& bAd
else
bAdded = true ;
break ;
case EXT_TEXT :
if ( ! ExportText( sName, iIter, frFrame, cCol, nLayer))
return false ;
else
bAdded = true ;
break ;
case EXT_DIMENSION :
if ( ! ExportDimension( sName, iIter, frFrame, cCol, nLayer))
return false ;
else
bAdded = true ;
break ;
}
default :
break ;
@@ -278,14 +282,21 @@ bool
Export3dm::AddObjectToModel( const IGdbIterator& iIter, ON_Object* onObject, const int& nLayer, const std::string& sName, const Color& cCol,
ON_3dmObjectAttributes* pOnAttr)
{
if ( onObject == nullptr)
return false ;
if ( pOnAttr == nullptr)
pOnAttr = new ON_3dmObjectAttributes() ;
pOnAttr->m_layer_index = nLayer ;
pOnAttr->m_name = ConvertString( sName).c_str() ;
int nType = iIter.GetGeoType() ;
string sCompleteName = sName ;
if ( nType == EXT_DIMENSION) {
sCompleteName = "dim_" + sCompleteName ;
}
pOnAttr->m_name = ConvertString( sCompleteName).c_str() ;
pOnAttr->SetColorSource( ON::color_from_object) ;
//N.B. RHINO ha i valori di Alpha invertiti rispetto ai nostri, oltre che su una scala diversa! per loro 0 = opaco e 255 = trasparente
// per noi invece 0 = trasparente, 100 = opaco
ON_Color onCol( cCol.GetIntRed(), cCol.GetIntGreen(), cCol.GetIntBlue(), abs( int( cCol.GetIntAlpha() * 2.55) - 255)) ;
ON_Color onCol( cCol.GetIntRed(), cCol.GetIntGreen(), cCol.GetIntBlue(), Clamp( 255 - lround( cCol.GetIntAlpha() * 2.55), 0, 255)) ;
pOnAttr->m_color = onCol ;
// se è una mesh aggiungo il materiale
if ( const ON_Mesh* onMesh = ON_Mesh::Cast( onObject)) {
@@ -299,6 +310,7 @@ Export3dm::AddObjectToModel( const IGdbIterator& iIter, ON_Object* onObject, con
onMat->SetDiffuse( onCol) ;
onMat->SetAmbient( onCAmb) ;
onMat->SetReflectivity( 0) ;
onMat->SetTransparency( Clamp( 255 - lround( cCol.GetIntAlpha() * 2.55), 0, 255)) ;
ON_ModelComponentReference mcr = m_model.AddManagedModelComponent( onMat) ;
int nIndex = mcr.ModelComponentIndex() ;
m_mMaterial.insert( pair< std::string, int>( sCol, nIndex)) ;
@@ -495,16 +507,29 @@ Export3dm::ExportSTM( const string& sName, const IGdbIterator& iIter, const Fram
// lo porto nel frame globale
pSrfTm->ToGlob( frFrame) ;
int nVertices = pSrfTm->GetVertexCount() ;
int nTriangles = pSrfTm->GetTriangleCount() ;
int nVertices = pSrfTm->GetVertexSize() ;
int nTriangles = pSrfTm->GetTriangleSize() ;
ON_Mesh* onMesh = new ON_Mesh ;
bool bOk = true ;
for ( int v = 0 ; v < nVertices ; ++v) {
Point3d pt ; pSrfTm->GetVertex( v, pt) ;
onMesh->SetVertex( v, ConvertPoint( pt)) ;
bOk = onMesh->SetVertex( v, ConvertPoint( pt)) ;
if ( ! bOk) {
LOG_ERROR( GetEE3Logger(), "Export3dm SurfTm: Error adding vertex")
bOk = true ;
}
}
bOk = true ;
for ( int t = 0 ; t < nTriangles ; ++t) {
int nIdVert[3] ; pSrfTm->GetTriangle( t, nIdVert) ;
onMesh->SetTriangle( t, nIdVert[0], nIdVert[1], nIdVert[2]) ;
int nIdVert[3] ;
if ( ! pSrfTm->GetTriangle( t, nIdVert))
continue ;
bOk = onMesh->SetTriangle( t, nIdVert[0], nIdVert[1], nIdVert[2]) ;
if ( ! bOk) {
LOG_ERROR( GetEE3Logger(), "Export3dm SurfTm: Error adding triangle")
bOk = true ;
}
}
ON_MeshVertexFaceMap onMeshVertMap ;
onMeshVertMap.SetFromMesh( onMesh, false) ;
@@ -629,52 +654,62 @@ Export3dm::ExportCrvCompo( const string& sName, const IGdbIterator& iIter, const
return false ;
// verifico oggetto
PtrOwner<ICurveComposite> pCrvCompo( GetCurveComposite( pGeoObj->Clone())) ;
if ( IsNull( pCrvCompo))
if ( IsNull( pCrvCompo) || ! pCrvCompo->IsValid())
return false ;
// lo porto nel riferimento globale
pCrvCompo->ToGlob( frFrame) ;
// converto
ON_PolyCurve* onPolyCrv = ConvertCrvCompo( pCrvCompo) ;
// aggiungo l'oggetto al modello
return AddObjectToModel( iIter, onPolyCrv, nLayer, sName, cCol) ;
}
//----------------------------------------------------------------------------
ON_PolyCurve*
Export3dm::ConvertCrvCompo( const ICurveComposite* pCrvCompo)
{
ON_PolyCurve* onPolyCrv = new ON_PolyCurve ;
for ( const ICurve* pCrv = pCrvCompo->GetFirstCurve() ; pCrv != nullptr ; pCrv = pCrvCompo->GetNextCurve()) {
GeoObjType type = pCrv->GetType() ;
switch ( type) {
case CRV_LINE : {
PtrOwner<ICurveLine> pCrvL( GetCurveLine( pCrv->Clone())) ;
if ( IsNull( pCrvL)) {
if ( IsNull( pCrvL) || ! pCrvL->IsValid()) {
delete onPolyCrv ;
return false ;
return nullptr ;
}
ON_LineCurve* onLine = ConvertCrvLine( pCrvL) ;
if ( onLine == nullptr) {
delete onPolyCrv ;
return false ;
return nullptr ;
}
onPolyCrv->Append( onLine) ;
break ;
}
case CRV_ARC : {
PtrOwner<ICurveArc> pCrvArc( GetCurveArc( pCrv->Clone())) ;
if ( IsNull( pCrvArc)) {
if ( IsNull( pCrvArc) || ! pCrvArc->IsValid()) {
delete onPolyCrv ;
return false ;
return nullptr ;
}
ON_ArcCurve* onArcCrv = ConvertCrvArc( pCrvArc) ;
if ( onArcCrv == nullptr) {
delete onPolyCrv ;
return false ;
return nullptr ;
}
onPolyCrv->Append( onArcCrv) ;
break ;
}
case CRV_BEZIER : {
PtrOwner<ICurveBezier> pCrvBz( GetCurveBezier( pCrv->Clone())) ;
if ( IsNull( pCrvBz)) {
if ( IsNull( pCrvBz) || ! pCrvBz->IsValid()) {
delete onPolyCrv ;
return false ;
return nullptr ;
}
ON_NurbsCurve* onNurbsCrv = ConvertCrvBezier( pCrvBz) ;
if ( onNurbsCrv == nullptr) {
delete onPolyCrv ;
return false ;
return nullptr ;
}
onPolyCrv->Append( onNurbsCrv) ;
break ;
@@ -682,8 +717,7 @@ Export3dm::ExportCrvCompo( const string& sName, const IGdbIterator& iIter, const
default : break ;
}
}
// aggiungo l'oggetto al modello
return AddObjectToModel( iIter, onPolyCrv, nLayer, sName, cCol) ;
return onPolyCrv ;
}
//----------------------------------------------------------------------------
@@ -707,7 +741,7 @@ Export3dm::ExportCrvLine( const string& sName, const IGdbIterator& iIter, const
return false ;
// verifico oggetto
PtrOwner<ICurveLine> pCrvL( GetCurveLine( pGeoObj->Clone())) ;
if ( IsNull( pCrvL))
if ( IsNull( pCrvL) || ! pCrvL->IsValid())
return false ;
// lo porto nel frame globale
pCrvL->ToGlob( frFrame) ;
@@ -716,6 +750,151 @@ Export3dm::ExportCrvLine( const string& sName, const IGdbIterator& iIter, const
return AddObjectToModel( iIter, onCrvLine, nLayer, sName, cCol) ;
}
//----------------------------------------------------------------------------
ON_Text*
Export3dm::ConvertText( const IExtText* pText, const Frame3d& frDim)
{
string sText = pText->GetText() ;
wstring wText = wstring(sText.begin(), sText.end());
const wchar_t* wcText = wText.c_str();
ON_Text* ontText = new ON_Text() ;
double dHeight = pText->GetHeight() ;
// controllo se esiste già un dim style con quell'altezza sennò lo creo
ON_DimStyle onDimStyle = ON_DimStyle::SystemDimstyleFromIndex( -1) ; // default
const ON_DimStyle* onDimStyleNew = nullptr ;
ONX_ModelComponentIterator component_iterator_ds( m_model, ON_ModelComponent::Type::DimStyle) ;
bool bFound = false ;
for ( const ON_ModelComponent* mc = component_iterator_ds.FirstComponent() ; mc != nullptr ; mc = component_iterator_ds.NextComponent()) {
const ON_DimStyle* onDim = ON_DimStyle::Cast( mc) ;
double dTextHeight = onDim->TextHeight() ;
if ( abs( dHeight - dTextHeight) < 0.1 ) {
onDimStyle = *onDim ;
bFound = true ;
break ;
}
}
if ( ! bFound) {
ON_DimStyle onDimStyleOver = onDimStyle.CreateOverrideCandidate() ;
onDimStyleOver.SetFieldOverride( ON_DimStyle::field::TextHeight, true) ;
onDimStyleOver.SetTextHeight( dHeight) ;
ON_ModelComponentReference mcr = m_model.AddModelComponent( onDimStyleOver, true) ;
onDimStyleNew = ON_DimStyle::FromModelComponentRef( mcr, nullptr) ;
}
// il punto di riferimento di rhino è in alto a sinistra, mentre il nostro è in basso a sinistra
Point3d pt ; pText->GetOverStartPoint( pt) ;
ON_Plane onPlane( ConvertPoint( pt), ConvertVector(frDim.VersX()), ConvertVector(frDim.VersY())) ;
BBox3d bbox3d ; pText->GetBBox( GLOB_FRM, bbox3d, 0) ;
if ( onDimStyleNew != nullptr)
ontText->Create( wcText, onDimStyleNew, onPlane, true, bbox3d.GetDimX() * 10, 0.) ;
else
ontText->Create( wcText, &onDimStyle, onPlane, true, bbox3d.GetDimX() * 10, 0.) ;
return ontText ;
}
//----------------------------------------------------------------------------
bool
Export3dm::ExportText( const string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer)
{
// recupero l'oggetto geometrico
const IGeoObj* pGeoObj = iIter.GetGeoObj() ;
if ( pGeoObj == nullptr)
return false ;
// verifico oggetto
PtrOwner<IExtText> pText( GetExtText( pGeoObj->Clone())) ;
if ( IsNull( pText) || ! pText->IsValid())
return false ;
// lo porto nel frame globale
pText->ToGlob( frFrame) ;
ON_Text* onText = ConvertText( pText, frFrame) ;
return AddObjectToModel( iIter, onText, nLayer, sName, cCol) ;
}
//----------------------------------------------------------------------------
ON_Dimension*
Export3dm::ConvertExtDimension( const IExtDimension* pExtDim, const Frame3d& frDim)
{
const ON_DimStyle onDimStyle = ON_DimStyle::DimStyleOrDefault( nullptr) ;
ON_UUID onIdDim = onDimStyle.Id() ;
// versione con le classi di Rhino
string sSubType = pExtDim->GetSubType() ;
if ( sSubType == "Linear") {
ON_Plane onPlane(ConvertPoint( frDim.Orig()), ConvertVector( frDim.VersX()), ConvertVector( frDim.VersY())) ;
ON_DimLinear* onDimLinear( new ON_DimLinear()) ;
ON_3dPoint onPt1 = ConvertPoint( pExtDim->GetStart()) ;
ON_3dPoint onPt2 = ConvertPoint( pExtDim->GetEnd()) ;
ON_3dPoint onPtDim = ConvertPoint( pExtDim->GetPosition()) ;
Vector3d vtDir = pExtDim->GetDirVersor() ;
// aligned
if ( ! AreSameVectorApprox( vtDir, X_AX) && ! AreSameVectorApprox( vtDir, Y_AX))
ON_DimLinear::CreateAligned( onPt1, onPt2, onPtDim, ConvertVector( frDim.VersZ()), onIdDim, onDimLinear) ;
//horizontal o vertical
else {
ON_3dPoint onPtDim2 = onPtDim + ConvertVector( vtDir) ;
ON_DimLinear::CreateRotated( onPt1, onPt2, ON_Line( onPtDim, onPtDim2), ConvertVector( frDim.VersZ()), onIdDim, onDimLinear) ;
}
return onDimLinear ;
}
else if ( sSubType == "Radial" || sSubType == "Diametral") {
ON_Plane onPlane(ConvertPoint( frDim.Orig()), ConvertVector( frDim.VersX()), ConvertVector( frDim.VersY())) ;
ON_DimRadial* onDimRadial( new ON_DimRadial()) ;
ON_3dPoint onPtV = ConvertPoint( pExtDim->GetStart()) ;
ON_3dPoint onPtPos = ConvertPoint( pExtDim->GetEnd()) ;
//ON_3dPoint onPtDim = ConvertPoint( pExtDim->GetPosition()) ;
Vector3d vtDir = pExtDim->GetDirVersor() ;
ON_3dPoint onPtDim = onPtPos + ConvertVector( vtDir) * ( onPtPos - onPtV).Length() / 10. ; // allontano la misura dall'arco di un decimo del raggio
double dRot = 0 ;
if ( ! AreSameVectorApprox( vtDir, X_AX))
X_AX.GetAngleXY(vtDir, dRot) ;
if ( sSubType == "Radial")
onDimRadial->Create( ON::AnnotationType::Radius, onIdDim, onPlane, onPtV, onPtPos, onPtDim) ;
else if ( sSubType == "Diametral")
onDimRadial->Create( ON::AnnotationType::Diameter, onIdDim, onPlane, onPtV, onPtPos, onPtDim) ;
return onDimRadial ;
}
else if ( sSubType == "Angular") {
ON_Plane onPlane(ConvertPoint( frDim.Orig()), ConvertVector( frDim.VersX()), ConvertVector( frDim.VersY())) ;
ON_DimAngular* onDimAngular( new ON_DimAngular()) ;
ON_3dPoint onPtV = ConvertPoint( pExtDim->GetStart()) ;
ON_3dPoint onPt1 = ConvertPoint( pExtDim->GetOverStart()) ;
ON_3dPoint onPt2 = ConvertPoint( pExtDim->GetOverEnd()) ;
ON_3dPoint onPtDim = ConvertPoint( pExtDim->GetPosition()) ;
Vector3d vtDir = pExtDim->GetDirVersor() ;
double dRot = 0 ;
if ( ! AreSameVectorApprox( vtDir, X_AX))
X_AX.GetAngleXY(vtDir, dRot) ;
// per arco
//onDimAngular->Create( onIdDim, onPlane, ConvertVector( frDim.VersX()), onPtV, onPt1, onPt2, onPtDim) ;
// con linee prolungate fino al vertice
onDimAngular->Create( onIdDim, onPlane, ConvertVector( frDim.VersX()), onPtV, onPtV, onPt1, onPt2, onPtDim) ;
return onDimAngular ;
}
return nullptr ;
}
//----------------------------------------------------------------------------
bool
Export3dm::ExportDimension( const string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer)
{
// recupero l'oggetto geometrico
const IGeoObj* pGeoObj = iIter.GetGeoObj() ;
if ( pGeoObj == nullptr)
return false ;
// verifico oggetto
PtrOwner<IExtDimension> pExtDim( GetExtDimension( pGeoObj->Clone())) ;
if ( IsNull( pExtDim) || ! pExtDim->IsValid())
return false ;
// lo porto nel frame globale
pExtDim->ToGlob( frFrame) ;
return AddObjectToModel( iIter, ConvertExtDimension( pExtDim, frFrame), nLayer, sName, cCol) ;
}
//----------------------------------------------------------------------------
bool
Export3dm::ScanGroup( const IGdbIterator& iIter, const int& nLayer, bool& bEmpty)
+9 -2
View File
@@ -16,7 +16,6 @@
#define NOMINMAX
#include "/EgtDev/Include/EE3Export3dm.h"
#include "/EgtDev/Include/EGnWriter.h"
#include "/EgtDev/Include/EGkGeoObj.h"
#include "/EgtDev/Include/EGkGdbIterator.h"
#include "/EgtDev/Include/EGkFrame3d.h"
@@ -25,9 +24,13 @@
#include "/EgtDev/Include/EGkCurveArc.h"
#include "/EgtDev/Include/EGkCurveLine.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
#include "/EgtDev/Include/EGkExtText.h"
#include "/EgtDev/Include/EGkExtDimension.h"
#include "/EgtDev/Extern/opennurbs/Include/opennurbs.h"
#include <map>
typedef std::vector<ON_PolyCurve*> VONPOLYCRV ;
//----------------------------------------------------------------------------
class Export3dm : public IExport3dm
{
@@ -53,6 +56,9 @@ class Export3dm : public IExport3dm
ON_NurbsCurve* ConvertCrvBezier( const ICurveBezier* pCrvBz) ;
ON_ArcCurve* ConvertCrvArc( const ICurveArc* pCrvArc) ;
ON_LineCurve* ConvertCrvLine( const ICurveLine* pCrvL) ;
ON_PolyCurve* ConvertCrvCompo( const ICurveComposite* pCC) ;
ON_Text* ConvertText( const IExtText* pText, const Frame3d& frDim) ;
ON_Dimension* ConvertExtDimension( const IExtDimension* pExtDim, const Frame3d& frDim) ;
bool ExportPnt( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
bool ExportSrfBz( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
bool ExportSTM( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
@@ -60,12 +66,13 @@ class Export3dm : public IExport3dm
bool ExportCrvBezier( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
bool ExportCrvCompo( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
bool ExportCrvLine( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
bool ExportText( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
bool ExportDimension( const std::string& sName, const IGdbIterator& iIter, const Frame3d& frFrame, const Color& cCol, const int& nLayer) ;
bool CalcGroupFilter( void) ;
private :
int m_nFilter ; // filtro su livello, modo e stato, se l'oggeto da valutare è un oggetto geometrico
int m_nGroupFilter ; // filtro su livello, modo e stato, se l'oggetto da valutare è un gruppo
Writer m_Writer ; // scrittore di file di testo
ONX_Model m_model ; // modello opennurbs
std::map<int,int> m_mLayer ; // mappa dei layer <indice layer nge, indice del componente layer nel modello 3dm>
std::map<std::string,int> m_mMaterial ; // mappa dei materiali <stringa del colore ( R,G,B), indice del componente material nel modello 3dm>
+494 -366
View File
File diff suppressed because it is too large Load Diff
+6 -4
View File
@@ -13,6 +13,8 @@
#pragma once
#define NOMINMAX
#include "/EgtDev/Include/EE3Import3dm.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
@@ -45,20 +47,20 @@ class Import3dm : public IImport3dm
Vector3d ConvertVector( const ON_2dVector& onVector)
{ return Vector3d( onVector.x, onVector.y, 0) ; } ;
ICurve* ConvertCurve( const ON_Curve* onCurve) ;
ISurf* ConvertSurface( const ON_Surface* onSurf) ;
ISurfTriMesh* ConvertExtrusion( const ON_Extrusion* onExtrusion) ;
ISurf* ConvertSurface( const ON_Surface* onSurf, DBLVECTOR* vU = nullptr, DBLVECTOR* vV = nullptr) ;
ISURFPOVECTOR ConvertExtrusion( const ON_Extrusion* onExtrusion) ;
ISurfTriMesh* ConvertMesh( const ON_Mesh* onMesh) ;
std::vector<PtrOwner<IGeoObj>> ConvertAnnotation( const ON_Annotation* onAnnot, const ON_DimStyle* onDimStyle, double dTextHeight, double dExtLine, double dArrLen, double dTextDist,
bool bLenIsMM, int nDecDig, std::string sFont) ;
ISURFPOVECTOR ConvertBrep( const ON_Brep* onBrep, const bool bForceTriMesh) ;
ICurve* ConvertBrepLoop( const ON_BrepLoop* onBrepLoop) ;
ICurveComposite* ApproxTrim( ICurve* pCrv) ;
bool MakeUniform( ISurfFlatRegion** sfr, ON_NurbsSurface onNurbsSurface, double dScaleU, double dScaleV, bool& bRescaled, bool bRetry = false) ;
bool ConvertCurveParam( const ON_RevSurface* onRevSurf, ICurve** pCrv) ;
std::string ConvertONwStringToString( ON_wString ON_wString) ;
private :
IGeomDB* m_pGDB ;
int m_nIdGroup ;
std::map< int, std::tuple<const ON_Layer*, ON_UUID, int, bool>> m_mLayer ; // mappa dei layer con id nel GDB e l'uuid nel modello 3dm, un int per l'indice del layer nel model e un bool che indica la presenza di sottolayer
std::map< int, std::tuple<const ON_Layer*, ON_UUID, int, int, int>> m_mLayer ; // mappa dei layer con id nel GDB e l'uuid nel modello 3dm, un int per l'indice del layer nel model, un int che indica la profondità del layer ( Root = 0, Part = 1, layer = 2), un int che è l'indice del layer ausiliario se avevo un Part senza layer ( lo aggiungo io e finché non l'ho aggiunto questo int è settato a -1)
std::map< std::string, int> m_mError_count ;
} ;