EgtExecutor 1.6h3 :
- rettangoli sempre disegnati CCW - aggiunta creazione di Regioni rettangolo, stadium e disco - correzioni a ExeSplitCurveAtSel - aggiunta ExeProjectCurveOnPlane - aggiunte funzioni per normale a regione piana e numero di chunk - sostituzione di Num o Nbr con Count.
This commit is contained in:
+204
-43
@@ -20,6 +20,7 @@
|
||||
#include "/EgtDev/Include/EXeExecutor.h"
|
||||
#include "/EgtDev/Include/EXeConst.h"
|
||||
#include "/EgtDev/Include/EGkSurfFlatRegion.h"
|
||||
#include "/EgtDev/Include/EGkSfrCreate.h"
|
||||
#include "/EgtDev/Include/EGkStmStandard.h"
|
||||
#include "/EgtDev/Include/EGkStmFromCurves.h"
|
||||
#include "/EgtDev/Include/EGkStmFromTriangleSoup.h"
|
||||
@@ -32,18 +33,152 @@ using namespace std ;
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
ExeCreateSurfFlatRegion( int nParentId, INTVECTOR& vCrvIds)
|
||||
ExeCreateSurfFrRectangle( int nParentId, const Point3d& ptIni, const Point3d& ptCross, int nRefType)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
nParentId = AdjustId( nParentId) ;
|
||||
bool bOk = true ;
|
||||
// recupero il riferimento locale
|
||||
Frame3d frLoc ;
|
||||
bOk = bOk && pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ;
|
||||
// creo la regione piana
|
||||
PtrOwner<ISurfFlatRegion> pSFR( CreateSurfFlatRegion()) ;
|
||||
bOk = bOk && ( ! IsNull( pSFR)) ;
|
||||
bool bOk = pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ;
|
||||
// porto in locale il punto e calcolo la normale in locale
|
||||
Point3d ptIniL = GetPointLocal( pGeomDB, ptIni, nRefType, frLoc) ;
|
||||
Point3d ptCrossL = GetPointLocal( pGeomDB, ptCross, nRefType, frLoc) ;
|
||||
Point3d ptDirL = GetPointLocal( pGeomDB, ptIni + 100 * X_AX, nRefType, frLoc) ;
|
||||
Vector3d vtZL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ;
|
||||
// ne ricavo un riferimento intrinseco
|
||||
Frame3d frEnt ;
|
||||
bOk = bOk && frEnt.Set( ptIniL, ptDirL, ptCrossL) ;
|
||||
if ( ( frEnt.VersZ() * vtZL) < 0)
|
||||
frEnt.PseudoMirror( frEnt.Orig(), frEnt.VersZ()) ;
|
||||
// ricavo le dimensioni della base
|
||||
Point3d ptCrossI = ptCrossL ;
|
||||
ptCrossI.ToLoc( frEnt) ;
|
||||
double dWidth = ptCrossI.x ;
|
||||
double dLen = ptCrossI.y ;
|
||||
// creo il rettangolo nel suo riferimento intrinseco
|
||||
PtrOwner<ISurfFlatRegion> pSfr( GetSurfFlatRegionRectangle( fabs( dWidth), dLen)) ;
|
||||
bOk = bOk && ! IsNull( pSfr) ;
|
||||
// eventuale traslazione per larghezza negativa
|
||||
if ( bOk && dWidth < 0)
|
||||
pSfr->Translate( Vector3d( dWidth, 0, 0)) ;
|
||||
// porto il rettangolo nel riferimento locale
|
||||
bOk = bOk && pSfr->ToGlob( frEnt) ;
|
||||
// inserisco la superficie nel DB
|
||||
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pSfr)) : GDB_ID_NULL) ;
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtSurfFrRectangle(" + IdToString( nParentId) + ",{" +
|
||||
ToString( ptIni) + "}," +
|
||||
ToString( ptCross) + "," +
|
||||
RefTypeToString( nRefType) + ")" +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
// restituisco l'identificativo della nuova entità
|
||||
return nNewId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
ExeCreateSurfFrStadium( int nParentId, const Point3d& ptIni, const Point3d& ptCross, int nRefType)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
nParentId = AdjustId( nParentId) ;
|
||||
// recupero il riferimento locale
|
||||
Frame3d frLoc ;
|
||||
bool bOk = pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ;
|
||||
// porto in locale il punto e calcolo la normale in locale
|
||||
Point3d ptIniL = GetPointLocal( pGeomDB, ptIni, nRefType, frLoc) ;
|
||||
Point3d ptCrossL = GetPointLocal( pGeomDB, ptCross, nRefType, frLoc) ;
|
||||
Point3d ptDirL = GetPointLocal( pGeomDB, ptIni + 100 * X_AX, nRefType, frLoc) ;
|
||||
Vector3d vtZL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ;
|
||||
// ne ricavo un riferimento intrinseco
|
||||
Frame3d frEnt ;
|
||||
bOk = bOk && frEnt.Set( ptIniL, ptDirL, ptCrossL) ;
|
||||
if ( ( frEnt.VersZ() * vtZL) < 0)
|
||||
frEnt.PseudoMirror( frEnt.Orig(), frEnt.VersZ()) ;
|
||||
// ricavo le dimensioni della base
|
||||
Point3d ptCrossI = ptCrossL ;
|
||||
ptCrossI.ToLoc( frEnt) ;
|
||||
double dWidth = ptCrossI.x ;
|
||||
double dLen = ptCrossI.y ;
|
||||
// creo lo stadium nel suo riferimento intrinseco
|
||||
PtrOwner<ISurfFlatRegion> pSfr( GetSurfFlatRegionStadium( fabs( dWidth), dLen)) ;
|
||||
bOk = bOk && ! IsNull( pSfr) ;
|
||||
// eventuale traslazione per larghezza negativa
|
||||
if ( bOk && dWidth < 0)
|
||||
pSfr->Translate( Vector3d( dWidth, 0, 0)) ;
|
||||
// porto lo stadium nel riferimento locale
|
||||
bOk = bOk && pSfr->ToGlob( frEnt) ;
|
||||
// inserisco la superficie nel DB
|
||||
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pSfr)) : GDB_ID_NULL) ;
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtSurfFrStadium(" + IdToString( nParentId) + ",{" +
|
||||
ToString( ptIni) + "}," +
|
||||
ToString( ptCross) + "," +
|
||||
RefTypeToString( nRefType) + ")" +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
// restituisco l'identificativo della nuova entità
|
||||
return nNewId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
ExeCreateSurfFrDisk( int nParentId, const Point3d& ptOrig, double dRad, int nRefType)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
nParentId = AdjustId( nParentId) ;
|
||||
// recupero il riferimento locale
|
||||
Frame3d frLoc ;
|
||||
bool bOk = pGeomDB->GetGroupGlobFrame( nParentId, frLoc) ;
|
||||
// porto in locale il punto e calcolo la normale in locale
|
||||
Point3d ptOrigL = GetPointLocal( pGeomDB, ptOrig, nRefType, frLoc) ;
|
||||
Vector3d vtNL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ;
|
||||
// calcolo riferimento per l'entità
|
||||
Frame3d frEnt ;
|
||||
bOk = bOk && frEnt.Set( ptOrigL, vtNL) ;
|
||||
// creo il disco nel suo riferimento intrinseco
|
||||
PtrOwner<ISurfFlatRegion> pSfr( GetSurfFlatRegionDisk( dRad)) ;
|
||||
bOk = bOk && ! IsNull( pSfr) ;
|
||||
// porto il disco nel riferimento locale
|
||||
bOk = bOk && pSfr->ToGlob( frEnt) ;
|
||||
// inserisco la superficie nel DB
|
||||
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pSfr)) : GDB_ID_NULL) ;
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sLua = "EgtSurfFrDisk(" + IdToString( nParentId) + ",{" +
|
||||
ToString( ptOrig) + "}," +
|
||||
ToString( dRad) + "," +
|
||||
RefTypeToString( nRefType) + ")" +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
// restituisco l'identificativo della nuova entità
|
||||
return nNewId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
static int
|
||||
MyCreateSurfFlatRegion( int nParentId, INTVECTOR& vCrvIds, int* pnCount)
|
||||
{
|
||||
IGeomDB* pGeomDB = GetCurrGeomDB() ;
|
||||
VERIFY_GEOMDB( pGeomDB, GDB_ID_NULL)
|
||||
nParentId = AdjustId( nParentId) ;
|
||||
// recupero il riferimento locale
|
||||
Frame3d frLoc ;
|
||||
if ( ! pGeomDB->GetGroupGlobFrame( nParentId, frLoc))
|
||||
return GDB_ID_NULL ;
|
||||
// costruisco la regione piana
|
||||
SurfFlatRegionByContours SfrCntr ;
|
||||
// creo le copie locali delle curve
|
||||
bool bFirst = true ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i) {
|
||||
@@ -51,43 +186,65 @@ ExeCreateSurfFlatRegion( int nParentId, INTVECTOR& vCrvIds)
|
||||
while ( nId != GDB_ID_NULL) {
|
||||
// recupero riferimento della curva
|
||||
Frame3d frCrv ;
|
||||
bOk = bOk && pGeomDB->GetGlobFrame( nId, frCrv) ;
|
||||
if ( ! pGeomDB->GetGlobFrame( nId, frCrv))
|
||||
return GDB_ID_NULL ;
|
||||
// recupero la curva
|
||||
ICurve* pCrv = GetCurve( pGeomDB->GetGeoObj( nId)) ;
|
||||
bOk = bOk && pCrv != nullptr ;
|
||||
if ( pCrv == nullptr)
|
||||
return GDB_ID_NULL ;
|
||||
// ne faccio una copia
|
||||
PtrOwner<ICurve> pCopCrv( ( bOk ? pCrv->Clone() : nullptr)) ;
|
||||
bOk = bOk && ! IsNull( pCopCrv) ;
|
||||
PtrOwner<ICurve> pCopCrv( pCrv->Clone()) ;
|
||||
if ( IsNull( pCopCrv))
|
||||
return GDB_ID_NULL ;
|
||||
// se i riferimenti sono diversi, eseguo la trasformazione
|
||||
if ( ! AreSameFrame( frCrv, frLoc))
|
||||
bOk = bOk && pCopCrv->LocToLoc( frCrv, frLoc) ;
|
||||
// la assegno alla regione
|
||||
if ( bFirst) {
|
||||
bOk = bOk && pSFR->SetExtLoop( Release( pCopCrv)) ;
|
||||
bFirst = false ;
|
||||
}
|
||||
else
|
||||
bOk = bOk && pSFR->AddIntLoop( Release( pCopCrv)) ;
|
||||
pCopCrv->LocToLoc( frCrv, frLoc) ;
|
||||
// la assegno al costruttore della regione
|
||||
SfrCntr.AddCurve( Release( pCopCrv)) ;
|
||||
// passo al successivo
|
||||
nId = (( vCrvIds[i] != GDB_ID_SEL) ? GDB_ID_NULL : pGeomDB->GetNextSelectedObj()) ;
|
||||
}
|
||||
}
|
||||
// inserisco la superficie nel DB
|
||||
int nNewId = ( bOk ? pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, Release( pSFR)) : GDB_ID_NULL) ;
|
||||
// recupero le regioni
|
||||
int nFirstId = GDB_ID_NULL ;
|
||||
int nCount = 0 ;
|
||||
ISurfFlatRegion* pSfr = SfrCntr.GetSurf() ;
|
||||
while ( pSfr != nullptr) {
|
||||
// inserisco la superficie nel DB
|
||||
int nNewId = pGeomDB->AddGeoObj( GDB_ID_NULL, nParentId, pSfr) ;
|
||||
if ( nNewId == GDB_ID_NULL)
|
||||
return GDB_ID_NULL ;
|
||||
if ( nFirstId == GDB_ID_NULL)
|
||||
nFirstId = nNewId ;
|
||||
++ nCount ;
|
||||
// recupero la prossima superficie
|
||||
pSfr = SfrCntr.GetSurf() ;
|
||||
}
|
||||
// restituisco l'identificativo della prima nuova entità
|
||||
if ( pnCount != nullptr)
|
||||
*pnCount = nCount ;
|
||||
return nFirstId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
int
|
||||
ExeCreateSurfFlatRegion( int nParentId, INTVECTOR& vCrvIds, int* pnCount)
|
||||
{
|
||||
// eseguo
|
||||
int nCount = 0 ;
|
||||
int nFirstId = MyCreateSurfFlatRegion( nParentId, vCrvIds, &nCount) ;
|
||||
if ( pnCount != nullptr)
|
||||
*pnCount = nCount ;
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sIds ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i)
|
||||
sIds += ToString( vCrvIds[i]) + "," ;
|
||||
sIds.pop_back() ;
|
||||
string sLua = "EgtSurfFlatRegion(" + IdToString( nParentId) + ",{" +
|
||||
sIds + "}," +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
IdListToString( vCrvIds) + "}," +
|
||||
" -- Id=" + ToString( nFirstId) + ",Nbr=" + ToString( nCount) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
}
|
||||
// restituisco l'identificativo della nuova entità
|
||||
return nNewId ;
|
||||
return nFirstId ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------
|
||||
@@ -153,9 +310,15 @@ ExeCreateSurfTmBox( int nParentId, const Point3d& ptIni, const Point3d& ptCross,
|
||||
Point3d ptIniL = GetPointLocal( pGeomDB, ptIni, nRefType, frLoc) ;
|
||||
Point3d ptCrossL = GetPointLocal( pGeomDB, ptCross, nRefType, frLoc) ;
|
||||
Point3d ptDirL = GetPointLocal( pGeomDB, ptDir, nRefType, frLoc) ;
|
||||
Vector3d vtZL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ;
|
||||
// vettore Cross e Dir non possono formare una angolo superiore o uguale al retto
|
||||
if ( ( ptCrossL - ptIniL) * ( ptDirL - ptIniL) < 0)
|
||||
ptDirL = ptIniL -( ptDirL - ptIniL) ;
|
||||
// ne ricavo un riferimento intrinseco
|
||||
Frame3d frBox ;
|
||||
bOk = bOk && frBox.Set( ptIniL, ptDirL, ptCrossL) ;
|
||||
if ( ( frBox.VersZ() * vtZL) < - EPS_SMALL)
|
||||
frBox.PseudoMirror( frBox.Orig(), frBox.VersZ()) ;
|
||||
// ricavo le dimensioni della base
|
||||
Point3d ptCrossI = ptCrossL ;
|
||||
ptCrossI.ToLoc( frBox) ;
|
||||
@@ -165,7 +328,7 @@ ExeCreateSurfTmBox( int nParentId, const Point3d& ptIni, const Point3d& ptCross,
|
||||
PtrOwner<ISurfTriMesh> pSTM( GetSurfTriMeshBox( fabs( dWidth), dLen, dHeight)) ;
|
||||
bOk = bOk && ! IsNull( pSTM) ;
|
||||
// eventuale traslazione per larghezza negativa
|
||||
if ( dWidth < 0)
|
||||
if ( bOk && dWidth < 0)
|
||||
pSTM->Translate( Vector3d( dWidth, 0, 0)) ;
|
||||
// porto il box nel riferimento locale
|
||||
bOk = bOk && pSTM->ToGlob( frBox) ;
|
||||
@@ -204,9 +367,15 @@ ExeCreateSurfTmPyramid( int nParentId, const Point3d& ptIni, const Point3d& ptCr
|
||||
Point3d ptIniL = GetPointLocal( pGeomDB, ptIni, nRefType, frLoc) ;
|
||||
Point3d ptCrossL = GetPointLocal( pGeomDB, ptCross, nRefType, frLoc) ;
|
||||
Point3d ptDirL = GetPointLocal( pGeomDB, ptDir, nRefType, frLoc) ;
|
||||
Vector3d vtZL = GetVectorLocal( pGeomDB, Z_AX, nRefType, frLoc) ;
|
||||
// vettore Cross e Dir non possono formare una angolo superiore o uguale al retto
|
||||
if ( ( ptCrossL - ptIniL) * ( ptDirL - ptIniL) < 0)
|
||||
ptDirL = ptIniL -( ptDirL - ptIniL) ;
|
||||
// ne ricavo un riferimento intrinseco
|
||||
Frame3d frBox ;
|
||||
bOk = bOk && frBox.Set( ptIniL, ptDirL, ptCrossL) ;
|
||||
if ( ( frBox.VersZ() * vtZL) < - EPS_SMALL)
|
||||
frBox.PseudoMirror( frBox.Orig(), frBox.VersZ()) ;
|
||||
// ricavo le dimensioni della base
|
||||
Point3d ptCrossI = ptCrossL ;
|
||||
ptCrossI.ToLoc( frBox) ;
|
||||
@@ -216,7 +385,7 @@ ExeCreateSurfTmPyramid( int nParentId, const Point3d& ptIni, const Point3d& ptCr
|
||||
PtrOwner<ISurfTriMesh> pSTM( GetSurfTriMeshPyramid( fabs( dWidth), dLen, dHeight)) ;
|
||||
bOk = bOk && ! IsNull( pSTM) ;
|
||||
// eventuale traslazione per larghezza negativa
|
||||
if ( dWidth < 0)
|
||||
if ( bOk && dWidth < 0)
|
||||
pSTM->Translate( Vector3d( dWidth, 0, 0)) ;
|
||||
// porto la piramide nel riferimento locale
|
||||
bOk = bOk && pSTM->ToGlob( frBox) ;
|
||||
@@ -403,13 +572,13 @@ ExeCreateSurfTmByRegion( int nParentId, INTVECTOR& vCrvIds, double dLinTol)
|
||||
// recupero le curve in locale
|
||||
CURVELOCALVECTOR vCrvLoc ;
|
||||
vCrvLoc.reserve( vCrvIds.size()) ;
|
||||
ICURVEPVECTOR vCrvP ;
|
||||
CICURVEPVECTOR vCrvP ;
|
||||
vCrvP.reserve( vCrvIds.size()) ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i) {
|
||||
int nId = (( vCrvIds[i] != GDB_ID_SEL) ? vCrvIds[i] : pGeomDB->GetFirstSelectedObj()) ;
|
||||
while ( nId != GDB_ID_NULL) {
|
||||
vCrvLoc.emplace_back( pGeomDB, nId, frLoc) ;
|
||||
vCrvP.push_back( const_cast<ICurve*>( vCrvLoc.back().Get())) ;
|
||||
vCrvP.push_back( vCrvLoc.back().Get()) ;
|
||||
bOk = bOk && ( vCrvLoc[i].Get() != nullptr) ;
|
||||
// passo al successivo
|
||||
nId = (( vCrvIds[i] != GDB_ID_SEL) ? GDB_ID_NULL : pGeomDB->GetNextSelectedObj()) ;
|
||||
@@ -425,12 +594,8 @@ ExeCreateSurfTmByRegion( int nParentId, INTVECTOR& vCrvIds, double dLinTol)
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sIds ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i)
|
||||
sIds += ToString( vCrvIds[i]) + "," ;
|
||||
sIds.pop_back() ;
|
||||
string sLua = "EgtSurfTmByRegion(" + IdToString( nParentId) + ",{" +
|
||||
sIds + "}," +
|
||||
IdListToString( vCrvIds) + "}," +
|
||||
ToString( dLinTol) + ")" +
|
||||
" -- Id=" + ToString( nNewId) ;
|
||||
LOG_INFO( GetCmdLogger(), sLua.c_str()) ;
|
||||
@@ -513,11 +678,11 @@ ExeCreateSurfTmByRegionExtrusion( int nParentId, INTVECTOR& vCrvIds, const Vecto
|
||||
// recupero le curve in locale
|
||||
CURVELOCALVECTOR vCrvLoc ;
|
||||
vCrvLoc.reserve( vCrvIds.size()) ;
|
||||
ICURVEPVECTOR vCrvP ;
|
||||
CICURVEPVECTOR vCrvP ;
|
||||
vCrvP.reserve( vCrvIds.size()) ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i) {
|
||||
vCrvLoc.emplace_back( pGeomDB, vCrvIds[i], frLoc) ;
|
||||
vCrvP.push_back( const_cast<ICurve*>( vCrvLoc[i].Get())) ;
|
||||
vCrvP.push_back( vCrvLoc[i].Get()) ;
|
||||
bOk = bOk && ( vCrvLoc[i].Get() != nullptr) ;
|
||||
}
|
||||
// porto in locale il vettore estrusione
|
||||
@@ -530,12 +695,8 @@ ExeCreateSurfTmByRegionExtrusion( int nParentId, INTVECTOR& vCrvIds, const Vecto
|
||||
ExeSetModified() ;
|
||||
// se richiesto, salvo il comando Lua equivalente
|
||||
if ( IsCmdLog()) {
|
||||
string sIds ;
|
||||
for ( size_t i = 0 ; i < vCrvIds.size() ; ++ i)
|
||||
sIds += ToString( vCrvIds[i]) + "," ;
|
||||
sIds.pop_back() ;
|
||||
string sLua = "EgtSurfTmByRegionExtrusion(" + IdToString( nParentId) + ",{" +
|
||||
sIds + "},{" +
|
||||
IdListToString( vCrvIds) + "},{" +
|
||||
ToString( vtExtr) + "}," +
|
||||
ToString( dLinTol) + "," +
|
||||
RefTypeToString( nRefType) + ")" +
|
||||
|
||||
Reference in New Issue
Block a user