Files
Dario Sassi 1dc2992628 EgtExchange 2.5h2 :
- in import BTL aggiunta gestione piani di riferimento a Slot (3/4-016-X)
- in import BTL corretta gestione piani di riferimento in Pocket (4-039-X).
2023-08-30 10:13:34 +02:00

296 lines
22 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2015-2022
//----------------------------------------------------------------------------
// File : BtlGeom.h Data : 04.04.22 Versione : 2.4d25
// Contenuto : Dichiarazione della classe BtlGeom.
//
//
//
// Modifiche : 26.08.15 DS Creazione modulo.
// 04.04.22 DS Aggiunta gestione trim feature con outline.
//
//----------------------------------------------------------------------------
#pragma once
#include "BtlGeomCoStru.h"
#include "/EgtDev/Include/EGkGeomDB.h"
#include "/EgtDev/Include/EGkCurveComposite.h"
#include "/EgtDev/Include/EGkPolygon3d.h"
#include "/EgtDev/Include/EGkSurfTriMesh.h"
//----------------------------------------------------------------------------
class BtlGeom
{
public :
BtlGeom( void) ;
public :
bool Init( IGeomDB* pGDB, int nFlatPos, bool bSpecialTrim, bool bTrimWithOutline, bool bUseUAttr) ;
bool CreatePart( void) ;
bool SetPart( int nPartId) ;
bool ErasePart( void) ;
int GetCurrPartId( void)
{ return m_nPartId ; }
int GetCurrOutsLayId( void)
{ return m_nOutsId ; }
int GetCurrProcsLayId( void)
{ return m_nProcsId ; }
bool VerifyNewPartProdNbr( int nProdNbr) ;
bool SetPartProdNbr( int nProdNbr, int nPdnErr = -1) ;
bool SetPartName( const std::string& sDes) ;
bool SetPartCount( int nCount) ;
bool AddPartBox( double dLength, double dHeight, double dWidth) ;
double GetCurrPartLength( void)
{ return ( m_nPartId != GDB_ID_NULL ? m_vtDim.x : 0) ;}
double GetCurrPartHeight( void)
{ return ( m_nPartId != GDB_ID_NULL ? m_vtDim.y : 0) ;}
double GetCurrPartWidth( void)
{ return ( m_nPartId != GDB_ID_NULL ? m_vtDim.z : 0) ;}
bool AddPartTransformation( const std::string& sUID, const Frame3d& frRef) ;
bool AddObjectRef( const std::string& sUID, const Frame3d& frRef) ;
bool AdjustPartFlatOrVertPos( void) ;
bool ResetPartSolid( void) ;
std::string GetPartName( void) ;
bool SetUserAttribute( int nUAttrDest, const std::string& sString) ;
bool SetUserAttribute( int nUAttrDest, const std::string& sKey, const std::string& sVal) ;
bool AdjustSnForParts( void) ;
bool SortObjects( int nGroupId, Point3d& ptIns) ;
bool UpdateNextOrigin( void) ;
int GetRawPartsGroup( bool bCreate = false) ;
bool AdjustRawPart( int nRawPartId) ;
bool AdjustRefForRawParts( void) ;
int GetCompositesGroup( bool bCreate = false) ;
bool AdjustComposite( int nCompositeId) ;
bool AdjustRefForComposites( void) ;
public : // Outline
bool AddPartOutline( int nSide, const FCEDEQUE& dqFce, int nContType, int nContData, double dContPar, const STRVECTOR& vsUAtt) ;
bool AddPartOutline( int nSide, int nCrvId, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddPartAperture( int nSide, const FCEDEQUE& dqFce, int nContType, int nContData, double dContPar, const STRVECTOR& vsUAtt) ;
bool AddPartAperture( int nSide, int nCrvId, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool UpdateOutLine( void) ;
bool AddPartStdOutline( void) ;
bool AddPartCustomOutline( void) ;
bool TrimOutlineWithApertures( void) ;
bool TrimOutlineWithProcesses( void) ;
bool TrimProcessWithOutline( int nProcId) ;
public : // Proc
bool GetProcessParamInfos( int nGroup, int nProc, int nSide,
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar) const ;
bool AddProcess( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, int nSPar, const DBLVECTOR& vdPar, const std::string& sPar, const STRVECTOR& vsUAtt, int nLine) ;
bool AddOneFreeContour( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt, int nCrvId, int nCrv2Id) ;
int GetLastProcessId( void) { return m_nProcId ; }
bool CreateFreeContours( void) ;
bool SetProcessColor( int nId, bool bEnable) ;
public : // Proc BTLx
bool AddTenonBTLX( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddDovetailTenonBTLX( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddShapeBTLX( const INTMATRIX& vFacesVertices, const PNTVECTOR& vPoints) ;
public : // Data
bool IsTrueSide( int nSide) const ; // esclude gli estremi (RIGHT e LEFT)
double GetSideLength( int nSide) const ;
double GetSideWidth( int nSide) const ;
double GetSideHeight( int nSide) const ;
Frame3d GetSideFrame( int nSide) const ;
Plane3d GetSidePlane( int nSide) const ;
Vector3d GetSideVersN( int nSide) const ;
int GetOppositeSide( int nSide) const ;
private :
bool CreateInfoGroup( void) ;
bool CreateAssemblyGroup( void) ;
bool CreateRawPartsGroup( void) ;
bool CreateCompositesGroup( void) ;
bool ReadUserAttribute( const std::string& sString, std::string& sKey, std::string& sVal) ;
std::string GetOutlineOutName( int nSide) const ;
std::string GetOutlineApertureName( int nSide) const ;
std::string GetOutlineTopName( int nSide) const ;
std::string GetOutlineBottomName( int nSide) const ;
bool SetAlpha( int nId, int nAlpha) ;
private : // Outline
bool UseProcessToTrimOutline( int nProcId) ;
bool TrimOutline( int nProcSurfId) ;
bool TrimOutline( const ISurfTriMesh* pStm) ;
bool GetLineInFace( const Point3d& ptP1, const Point3d& ptP2, int& nFace) const ;
bool IsLineOnFace( const Point3d& ptP1, const Point3d& ptP2, int nFace) const ;
bool IsCrossCut( const POLYLINEVECTOR& vPL, int& nCross) const ;
bool RemoveDanglingFace( int nCross, const ICURVEPOVECTOR vCrvP[], const ISurfTriMesh* pStm) ;
bool AdjustOneOutlineFace( int nSide, ICURVEPOVECTOR& vCrvP) ;
int GetFaceRegion( int nSide) ;
ICurve* GetFaceContour( int nSide) ;
bool IsPointOnFaceContour( const Point3d& ptP, int nSide) ;
bool IsPointNearFaceContour( const Point3d& ptP, int nSide) ;
bool IsPointOutFaceContour( const Point3d& ptP, int nSide) ;
bool SetPointOnFaceContour( Point3d& ptP, int nSide) ;
bool TrimRayWithFaceContour( const Point3d& ptP, const Vector3d& vtDir, int nSide, Point3d& ptInt) ;
private : // Proc
bool AddCut( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddLongitCut( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddDoubleCut( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddRidgeValleyCut( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddSawCut( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddSlot( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddFrontSlot( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddBirdsMouth( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddRafterNotch( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddRidgeLap( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddLapJoint( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddNotch( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddLogHouseHL2( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddSeathingCut( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddFrenchRidgeLap( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddChamfer( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddLogHouseHL4( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddLogHouseFront( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddPocket( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddDrill( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddTenon( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddMortise( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddMortiseFront( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddDovetailTenon( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddDovetailMortise( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddDtMortiseFront( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddMarking( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, int nSPar, const DBLVECTOR& vdPar, const std::string& sPar, const STRVECTOR& vsUAtt) ;
bool AddText( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, int nSPar, const DBLVECTOR& vdPar, const std::string& sPar, const STRVECTOR& vsUAtt) ;
bool AddSimpleScarf( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddScarfJoint( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddStepJoint( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddStepJointNotch( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddPlaning( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddProfileFront( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddProfileHeadCoCo( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddProfileHeadCambered( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddProfileHead( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddRoundArch( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddTriangleCut( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddTyroleanDovetail( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddDovetail( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddFreeContour( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AddVariant( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
ICurveComposite* GetFreeContourCurve( int nProcId, const Frame3d& frRef, bool bOnlyStartOk = false) ;
ISurfTriMesh* CreateOneCurveFreeContour( const ICurveComposite* pCrvCompo) ;
bool AdjustFreeContourCurve( ICurve* pCrv, int nSide, bool& bClosed, bool& bEndsOnOrOutCont) ;
bool VerifyFreeContourCurveSideAng( const ICurveComposite* pCrvCompo) ;
bool GetFreeContourCurveSideAngles( const ICurveComposite* pCrvCompo, DBLVECTOR& vSideAng) ;
bool CreatePolygonInBox( const Point3d& ptP, const Vector3d& vtN, int nSide, Polygon3d& Polyg,
double dMatMin = FACE_MIN_BACK_MAT, double dAreaMin = FACE_MIN_BACK_AREA) ;
double GetPlaneElevation( const Plane3d& plPlane) ;
bool TrimPolygons( Polygon3d& plyP1, Polygon3d& plyP2, bool bInVsOut, bool bOnEq) ;
bool VerifyPolygonSize( Polygon3d& plyP, double dMinDim = FACE_MIN_CROSS_DIM) ;
bool VerifyPolygonBackMat( Polygon3d& plyP, double dMatMin = FACE_MIN_BACK_MAT, double dAreaMin = FACE_MIN_BACK_AREA) ;
bool VerifyPolygonWithPolygon( Polygon3d& plyP, const Polygon3d& plyRef, bool bInVsOut, double dMatMin = FACE_MIN_BACK_MAT) ;
bool VerifyPolygonWithPolygons( Polygon3d& plyP, const Polygon3d& plyRef1, const Polygon3d& plyRef2,
bool bInVsOut, double dMatMin = FACE_MIN_BACK_MAT) ;
bool VerifyPolygonWithPolygons( Polygon3d& plyP, const Polygon3d& plyRef1, const Polygon3d& plyRef2,
const Polygon3d& plyRef3, bool bInVsOut, double dMatMin = FACE_MIN_BACK_MAT) ;
bool VerifyPolygonWithPolygons( Polygon3d& plyP, const Polygon3d& plyRef1, const Polygon3d& plyRef2,
const Polygon3d& plyRef3, const Polygon3d& plyRef4, bool bInVsOut, double dMatMin = FACE_MIN_BACK_MAT) ;
bool TrimConcaveFaces( POLYGVECTOR& vPolyg, const INTMATRIX& vAdjac, double dMatMin = FACE_MIN_BACK_MAT, double dAreaMin = FACE_MIN_BACK_AREA) ;
bool DoSewing( ISurfTriMesh* pStm, const Polygon3d& Polyg) ;
bool TrimSurfTmWithBox( ISurfTriMesh* pStm) ;
bool TrimFlatCurveWithBox( ICurve* pCurve, double dLinTol = 0) ;
ICurve* TrimFlatCurveWithBoxEx( ICurve* pCurve, double dLinTol = 0) ;
bool TrimSegmentWithBox( Point3d& ptP1, Point3d& ptP2, double dRad) ;
ICurveComposite* CurveFromFces( const FCEDEQUE& dqFce, int nStartInd = 0) ;
ICurve* GetDirectrixOfRuledSurf( const ISurfTriMesh* pStm, const Vector3d& vtExtr) ;
bool SetNameAndInfo( int nId, int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId) ;
bool SetParams( int nId, const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool SetUserAttributes( int nId, const STRVECTOR& vsUAtt) ;
bool SetMainAdjId( int nMainId, const INTVECTOR& vnAdjId) ;
bool SetAuxId( int nId, const INTVECTOR& vnAuxId) ;
bool SetDrillEnds( int nId, int nStartFace, int nEndFace) ;
bool CopyTaskId( int nId, const INTVECTOR& vnAuxId) ;
bool GetUserParam( const STRVECTOR& vsUAtt, const std::string& sKey, double& dVal) ;
bool GetWaveLengths( int nWaves, double dLen, DBLVECTOR& vLen) ;
bool GetWaveReductions( int nWaves, double dWidth, DBLVECTOR& vRed) ;
bool InsertEmptySurface( int nGroup, int nProc, int nSide, const std::string& sDes, int nProcId, const Frame3d& frRef,
const INTVECTOR& vnDPar, const DBLVECTOR& vdPar, const STRVECTOR& vsUAtt) ;
bool AdjustPointForPlaneNearBoxVertex( Point3d& ptP, const Vector3d& vtN, int nSide) ;
private :
IGeomDB* m_pGDB ;
int m_nFlatVertPos ; // flag per posizionamento pezzi (0=come sono, 1=di piatto, 2=in verticale, 3=ruotato 90deg, 4=da outline o piatto)
bool m_bSpecialTrim ; // flag per trim speciale regioni per pareti (solo con feature passanti)
bool m_bTrimWithOutline ; // flag per trim delle feature con l'outline (se presente)
bool m_bUseUAttr ; // flag per utilizzo attributi utente per modificare geometria features
Color m_BoxCol ; // colore per box pezzi
Color m_OutsCol ; // colore per outline pezzi
Color m_ProcsCol ; // colore per lavorazioni pezzi
Color m_ProcsOffCol ; // colore per lavorazioni pezzi disabilitate
Color m_MarkCol ; // colore per linee di marcatura e testi
Color m_SolidCol ; // colore per il solido
int m_nInfoId ; // identificativo gruppo per informazioni varie
int m_nAsseId ; // identificativo gruppo per trasformazioni di assemblaggio
int m_nRawPartsId ; // identificativo gruppo dei grezzi
int m_nCompositesId ; // identificativo gruppo dei compositi
Point3d m_ptOrig ; // origine di inserimento del prossimo pezzo
int m_nPartId ; // identificativo del pezzo corrente
int m_nAuxId ; // identificativo del layer aux del pezzo corrente
int m_nBoxId ; // identificativo del layer box del pezzo corrente
int m_nOutsId ; // identificativo del layer outline del pezzo corrente
int m_nProcsId ; // identificativo del layer lavorazioni del pezzo corrente
int m_nSolidsId ; // identificativo del layer solido del pezzo corrente
Vector3d m_vtDim ; // dimensioni (LENGTH,HEIGHT,WIDTH) del pezzo corrente
int m_nCount ; // quantit da produrre del pezzo corrente
int m_nProcId ; // identificativo dell'ultima feature inserita
int m_nBtlLine ; // numero di linea corrente nel file BTL
FCSDEQUE m_FcStart ; // dati per inizi di contorni liberi
FCEDEQUE m_FcData ; // dati per contorni liberi in definizione
public :
static std::string m_sBtlAuxDir ; // direttorio in cui cercare i dati per le feature Variant
} ;