Files
EgtExchange/BtlGeomCoStru.h
Dario Sassi 977fe9f016 EgtExchange :
- in import BTL resa migliore l'approssimazione di FreeContour generati da due percorsi.
2023-11-22 20:23:51 +01:00

210 lines
9.0 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2015-2022
//----------------------------------------------------------------------------
// File : BtlGeomCoStru.h Data : 27.02.22 Versione : 2.4b3
// Contenuto : Costanti e strutture per la classe BtlGeom.
//
//
//
// Modifiche : 25.08.15 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "/EgtDev/Include/EGkFrame3d.h"
#include "/EgtDev/Include/EgtStringBase.h"
#include <deque>
//----------------------------------------------------------------------------
// nome gruppo di sistema per informazioni varie
static const std::string INFO_GROUP_NAME = "BtlInfo" ;
// nome gruppo di sistema per riferimenti di definizione assemblaggio
static const std::string ASSEMBLY_GROUP_NAME = "AsseBase" ;
// nome gruppo di sistema per grezzi
static const std::string RAWPARTS_GROUP_NAME = "RawParts" ;
// nome gruppo di sistema per compositi
static const std::string COMPOSITES_GROUP_NAME = "Composites" ;
// nome gruppo temporaneo per direzione di carico
static const std::string LOADINGSIDE_GROUP_NAME = "LoadingSide" ;
// nomi layer standard dei pezzi
static const std::string AUX_LAYER_NAME = "Part" ;
static const std::string BOX_LAYER_NAME = "Box" ;
static const std::string OUTLINE_LAYER_NAME = "Outline" ;
static const std::string PROCESSINGS_LAYER_NAME = "Processings" ;
static const std::string SOLID_LAYER_NAME = "Solid" ;
static const std::string FCSNAME_LAYER_NAME = "FcsName" ;
// nomi entità standard dei pezzi
static const std::string AUX_PART_NAME = "Name" ;
static const std::string BOX_BOX_NAME = "Box" ;
static const std::string OL_OUTSTM_NAME = "Out" ;
static const std::string OL_APERTURESTM_NAME = "Ape" ;
static const std::string OL_TOPREGION_NAME = "Top" ;
static const std::string OL_BOTTOMREGION_NAME = "Bot" ;
static const std::string OL_SUFFIX_REGION_NAME = "Region" ;
static const std::string OL_SHAPE_NAME = "Shape" ;
static const std::string SOLID_SOLID_NAME = "Solid" ;
// chiavi di informazioni associate alle info varie
static const std::string IKEY_BTL_PATH = "BTL" ;
// chiavi di informazioni associate ai pezzi
static const std::string IKEY_PROD_NBR = "PDN" ;
static const std::string IKEY_PDN_ERR = "PDN_ERR" ;
static const std::string IKEY_NAME = "NAM" ;
static const std::string IKEY_COUNT = "CNT" ;
static const std::string IKEY_LENGTH = "L" ;
static const std::string IKEY_WIDTH = "W" ;
static const std::string IKEY_HEIGHT = "H" ;
// chiavi di informazioni associate alle geometrie di outline
static const std::string IKEY_OTL_SIDE = "SIDE" ;
static const std::string IKEY_OTL_REGION = "REGION" ;
// chiavi di informazioni associate alle geometrie di lavorazione
static const std::string IKEY_GROUP = "GRP" ;
static const std::string IKEY_PROC = "PRC" ;
static const std::string IKEY_SIDE = "SIDE" ;
static const std::string IKEY_PAR = "P" ;
static const std::string IKEY_DES = "DES" ;
static const std::string IKEY_PRID = "PRID" ;
static const std::string IKEY_FRAME = "FRAME" ;
static const std::string IKEY_MAINID = "MAINID" ;
static const std::string IKEY_ADJID = "ADJID" ;
static const std::string IKEY_AUXID = "AUXID" ;
static const std::string IKEY_ORIGID = "ORIGID" ;
static const std::string IKEY_START_FACE = "FCS" ;
static const std::string IKEY_END_FACE = "FCE" ;
static const std::string IKEY_SIDEANGS = "SideAngs" ;
static const std::string IKEY_DEPTH = "DEPTH" ;
static const std::string IKEY_POCKET = "PCKT" ;
static const std::string IKEY_RULED = "RULED" ;
static const std::string IKEY_CNT_TYPE = "CNT_TYPE" ;
static const std::string IKEY_CNT_DATA = "CNT_DATA" ;
static const std::string IKEY_CNT_PAR = "CNT_PAR" ;
static const std::string IKEY_TASKID = "TASKID" ;
static const std::string IKEY_DO = "DO" ;
static const std::string IKEY_TRIM = "TRIM" ;
static const std::string IKEY_COL_A = "COL_A" ;
// chiavi di informazioni associate al solido
static const std::string IKEY_VALID = "VALID" ;
// chiavi di informazioni associate al lato di carico
static const std::string IKEY_LSIDE = "LSIDE" ;
// distanza tra pezzi nella disposizione standard lungo Y
const double PART_OFFSET = 300 ;
// costanti di approssimazione per curve
const double CRV_LIN_APPROX = 0.05 ;
const double CRV_LIN_FINE_APPROX = 0.01 ;
const double CRV_ANG_APPROX_DEG = 22.5 ;
// costante di compattazione di superfici
const double STM_COMPACT_APPROX = 0.01 ;
// minima dimensione trasversale di faccia per non essere eliminata
const double FACE_MIN_CROSS_DIM = 1.0 ;
// minimo materiale dietro la faccia dipendente dall'area
const double FACE_MIN_BACK_MAT = 2.0 ;
const double FACE_MIN_BACK_AREA = 400.0 ;
// minimo materiale dietro la faccia, limite assoluto
const double FACE_ZERO_BACK_MAT = 0.5 ;
// minimo spostamento per vari tipi di Mortise
const double MORTISE_DISPL_MIN = 0.5 ;
// raggio fresa di default
const double MILL_DEF_RAD = 12.5 ;
// raggio fresa coda di rondine di default ( misurato in basso dove grande)
const double DTMILL_DEF_RAD = 30.0 ;
// angolo coda di rondine di default
const double DOVETAIL_DEF_ANG = 15.0 ;
// lunghezza extra per mortase coda di rondine passanti
const double DTMORT_EXTRA_LEN = 10.0 ;
// minima e massima dimensione tasca per mortasa a coda di rondine
const double MIN_DTMORT_POCKET = 70.0 ;
const double MAX_DTMORT_POCKET = 200.0 ;
const double MIN_DTMORT_AREA = 100.0 ;
// tolleranza fuoriuscita curve di tasche di code di rondine
const double DTMORT_OUT_CRV_TOL = 30.0 ;
// angolo di fianco per contorno libero default e non definito
const double FC_SIDEANG_DEF = 0.0 ;
const double FC_SIDEANG_NONE = 999.0 ;
// tolleranza fuoriuscita curve di contorni liberi
const double FC_OUT_CRV_TOL = 50.0 ;
//----------------------------------------------------------------------------
// Numero processo speciale Riferimento ad altro oggetto
const int BTL_OBJECT_REF = 300 ;
//----------------------------------------------------------------------------
// Base del nome file geometria varianti
static const std::string VARIANT_BASENAME = "Variant_" ;
// Pezzo e layer per variante
static const std::string VARIANT_PART = "Process" ;
static const std::string VARIANT_LAYER = "Geom" ;
//----------------------------------------------------------------------------
enum BtlSide { BTL_SIDE_NONE = 0,
BTL_SIDE_FRONT = 1,
BTL_SIDE_BOTTOM = 2,
BTL_SIDE_BACK = 3,
BTL_SIDE_TOP = 4,
BTL_SIDE_LEFT = 5,
BTL_SIDE_RIGHT = 6} ;
static const int SIDE_NBR = 6 ;
//----------------------------------------------------------------------------
enum UserAttrDest { UATD_INFO = 0,
UATD_PART = 1} ;
//----------------------------------------------------------------------------
enum FreeContType { FCT_NONE = 0,
FCT_SAW = 1,
FCT_MILL = 2,
FCT_PEN = 10,
FCT_NAIL = 20,
FCT_GLUE_AREA = 30,
FCT_PLANING_AREA = 40,
FCT_PLASTER_AREA = 50,
FCT_LOCKOUT_AREA = 200} ;
//----------------------------------------------------------------------------
struct FreeContourStart {
int nGroup ;
int nSide ;
double dDepth ;
bool bPocket ;
int nContType ;
int nContData ;
double dContPar ;
std::string sDes ;
Frame3d frRef ;
STRVECTOR vsUAtt ;
int nId ;
int nOtherId ;
FreeContourStart( void)
: nGroup( 0), nSide( 0), dDepth( 0), bPocket( false), nContType( 0), nContData( 0), dContPar( 0), frRef(), nId( -1), nOtherId( -1) {}
FreeContourStart( int nG, int nS, double dD, bool bP, int nCt, int nCd, double dCp, const std::string& sD, const Frame3d& Ref, const STRVECTOR& vsUA, int nI, int nO)
: nGroup( nG), nSide( nS), dDepth( dD), bPocket( bP), nContType( nCt), nContData( nCd), dContPar( dCp), sDes( sD), nId( nI), nOtherId( nO)
{ frRef = Ref ;
for ( const auto& sUA : vsUA)
vsUAtt.emplace_back( sUA) ; }
} ;
typedef std::deque<FreeContourStart> FCSDEQUE ;
//----------------------------------------------------------------------------
struct FreeContourEnt {
int nType ;
Point3d ptP ;
Point3d ptM ;
double dAng ;
int nId ;
int nNextId ;
enum TYPE { START = 0, LINE = 1, ARC = 2, START_CNT0 = 100, START_CNT1 = 101} ;
FreeContourEnt( void)
: nType( START), ptP(), ptM(), dAng( 0), nId( 0), nNextId( 0) {}
FreeContourEnt( int nT, const Point3d& ptPP, const Point3d& ptMM, double dA, int nI, int nO)
: nType( nT), ptP( ptPP), ptM( ptMM), dAng( dA), nId( nI), nNextId( nO) {}
} ;
typedef std::deque<FreeContourEnt> FCEDEQUE ;
//----------------------------------------------------------------------------
enum CrossCut { CROSS_CUT_NONE = 0,
CROSS_CUT_X = 1,
CROSS_CUT_Y = 2,
CROSS_CUT_Z = 4} ;