eb5a141e44
- in import BTLX gestione di shape - in import BTLX correzione di errori nella lettura delle lavorazioni - in import BTLX importazione di tutti i dati generici dei pezzi - unificazione delle funzioni BTL e BTLX per aggiungere tenoni e mortase.
2808 lines
152 KiB
C++
2808 lines
152 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2020-2020
|
|
//----------------------------------------------------------------------------
|
|
// File : ImportBtlx.cpp Data : 14.12.20 Versione : 2.3a6
|
|
// Contenuto : Implementazione della classe per l'importazione BTLx.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 14.12.20 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "pugixml.hpp"
|
|
#include "ImportBtlx.h"
|
|
#include "DllMain.h"
|
|
#include "/EgtDev/Include/EExDllMain.h"
|
|
#include "/EgtDev/Include/EgtKeyCodes.h"
|
|
#include "/EgtDev/Include/EGkStringUtils3d.h"
|
|
#include "/EgtDev/Include/EgtNumUtils.h"
|
|
|
|
using namespace std ;
|
|
|
|
// -----------------------------------------------------------------------------------------------------------------------------
|
|
// -------------------------------- FUNZIONI CHE LEGGONO I PARAMETRI DEI PROCESSI -------------------------------------------
|
|
// -----------------------------------------------------------------------------------------------------------------------------
|
|
int
|
|
ImportBtlx::ComputeP04( STRVECTOR values)
|
|
{
|
|
if ( values.size() > 6 || values.empty()) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: P04 is not valid") ;
|
|
return -2 ;
|
|
}
|
|
|
|
int result = 0 ;
|
|
for ( size_t i = 0 ; i < values.size() ; i ++) {
|
|
if ( values[i] == "no")
|
|
result += static_cast<int>( pow( 2, i)) ;
|
|
else if ( values[i] != "yes") {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MachiningLimit value is not valid") ;
|
|
return -2 ;
|
|
}
|
|
}
|
|
|
|
return result ;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------------------------------------------------
|
|
int
|
|
ImportBtlx::ComputeP04( pugi::xml_node MachiningLimits)
|
|
{
|
|
string FaceLimitedStart = "yes" ;
|
|
if ( MachiningLimits.attribute( "FaceLimitedStart") != nullptr)
|
|
FaceLimitedStart = MachiningLimits.attribute( "FaceLimitedStart").value() ;
|
|
|
|
string FaceLimitedEnd = "yes" ;
|
|
if ( MachiningLimits.attribute( "FaceLimitedEnd") != nullptr)
|
|
FaceLimitedEnd = MachiningLimits.attribute( "FaceLimitedEnd").value() ;
|
|
|
|
string FaceLimitedFront = "yes" ;
|
|
if ( MachiningLimits.attribute( "FaceLimitedFront") != nullptr)
|
|
FaceLimitedFront = MachiningLimits.attribute( "FaceLimitedFront").value() ;
|
|
|
|
string FaceLimitedBack = "yes" ;
|
|
if ( MachiningLimits.attribute( "FaceLimitedBack") != nullptr)
|
|
FaceLimitedBack = MachiningLimits.attribute( "FaceLimitedBack").value() ;
|
|
|
|
string FaceLimitedBottom = "yes" ;
|
|
if ( MachiningLimits.attribute( "FaceLimitedBottom") != nullptr)
|
|
FaceLimitedBottom = MachiningLimits.attribute( "FaceLimitedBottom").value() ;
|
|
|
|
string FaceLimitedTop = "no" ;
|
|
if ( MachiningLimits.attribute( "FaceLimitedTop") != nullptr)
|
|
FaceLimitedTop = MachiningLimits.attribute( "FaceLimitedTop").value() ;
|
|
|
|
int result = 0 ;
|
|
if ( FaceLimitedStart == "no")
|
|
result += 1 ;
|
|
else if ( FaceLimitedStart != "yes") {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MachiningLimit is not valid") ;
|
|
return -2 ;
|
|
}
|
|
|
|
if ( FaceLimitedEnd == "no")
|
|
result += 2 ;
|
|
else if ( FaceLimitedEnd != "yes") {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MachiningLimit is not valid") ;
|
|
return -2 ;
|
|
}
|
|
|
|
if ( FaceLimitedFront == "no")
|
|
result += 4 ;
|
|
else if ( FaceLimitedFront != "yes") {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MachiningLimit is not valid") ;
|
|
return -2 ;
|
|
}
|
|
|
|
if ( FaceLimitedBack == "no")
|
|
result += 8 ;
|
|
else if ( FaceLimitedBack != "yes") {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MachiningLimit is not valid") ;
|
|
return -2 ;
|
|
}
|
|
|
|
if ( FaceLimitedBottom == "no")
|
|
result += 16 ;
|
|
else if ( FaceLimitedBottom != "yes"){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MachiningLimit is not valid") ;
|
|
return -2 ;
|
|
}
|
|
|
|
if ( FaceLimitedTop == "no")
|
|
result += 32 ;
|
|
else if ( FaceLimitedTop != "yes"){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MachiningLimit is not valid") ;
|
|
return -2 ;
|
|
}
|
|
|
|
return result ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadJackRafterCutParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 10 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if ( process.child( "Orientation") == nullptr ){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: JackRafterCut orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: JackRafterCut Orientation is not valid") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 5) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: JackRafterCut number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[3] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[4] = std::stod( process.child( "Inclination").text().get()) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadLongitudinalCutParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 10 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
if (process.attribute( "ToolPosition") == nullptr) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LongitudinalCut Tool position missing") ;
|
|
return false ;
|
|
}
|
|
string sToolPosition = process.attribute( "ToolPosition").value() ;
|
|
if ( sToolPosition == "center")
|
|
nGroup = 0 ;
|
|
else if ( sToolPosition == "right")
|
|
nGroup = 3 ;
|
|
else if ( sToolPosition == "left")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LongitudinalCut Tool position not valid") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 8) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LongitudinalCut number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[3] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[4] = Clamp( std::stod( process.child( "Depth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[5] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 100000.0) ;
|
|
if ( process.child( "AngleStart") != nullptr && process.child( "AngleStart").text().get() != "") // P13
|
|
vdPar[6] = Clamp( std::stod( process.child( "AngleStart").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "AngleEnd") != nullptr && process.child( "AngleEnd").text().get() != "") // P14
|
|
vdPar[7] = Clamp( std::stod( process.child( "AngleEnd").text().get()), 0.1, 179.9) ;
|
|
|
|
string sStartLimited = process.child( "StartLimited") == nullptr ? "no" : process.child( "StartLimited").text().get() ; // P04
|
|
string sEndLimited = process.child( "EndLimited") == nullptr ? "no" : process.child( "EndLimited").text().get() ;
|
|
vdPar[2] = ComputeP04( { "no", sStartLimited, sEndLimited}) ;
|
|
if ( vdPar[2] == -2)
|
|
return false ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadDoubleCutParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 11 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if ( process.child( "Orientation") == nullptr) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: DoubleCut orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: DoubleCut orientation unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 6) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: DoubleCut number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Angle1") != nullptr && process.child( "Angle1").text().get() != "") // P06
|
|
vdPar[2] = std::stod( process.child( "Angle1").text().get()) ;
|
|
if ( process.child( "Inclination1") != nullptr && process.child( "Inclination1").text().get() != "") // P07
|
|
vdPar[3] = std::stod( process.child( "Inclination1").text().get()) ;
|
|
if ( process.child( "Angle2") != nullptr && process.child( "Angle2").text().get() != "") // P08
|
|
vdPar[4] = std::stod( process.child( "Angle2").text().get()) ;
|
|
if ( process.child( "Inclination2") != nullptr && process.child( "Inclination2").text().get() != "") // P09
|
|
vdPar[5] = std::stod( process.child( "Inclination2").text().get()) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadRidgeValleyCutParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 12 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 0 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 11) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: RidgeValleyCut number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "InclinationRefSide") != nullptr && process.child( "InclinationRefSide").text().get() != "") // P07
|
|
vdPar[3] = std::stod( process.child( "InclinationRefSide").text().get()) ;
|
|
if ( process.child( "InclinationOppSide") != nullptr && process.child( "InclinationOppSide").text().get() != "") // P09
|
|
vdPar[4] = std::stod( process.child( "InclinationOppSide").text().get()) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P11
|
|
vdPar[5] = Clamp( std::stod( process.child( "StartDepth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[6] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 100000.0) ;
|
|
if ( process.child( "AngleRefStart") != nullptr && process.child( "AngleRefStart").text().get() != "") // P13
|
|
vdPar[7] = Clamp( std::stod( process.child( "AngleRefStart").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "AngleRefEnd") != nullptr && process.child( "AngleRefEnd").text().get() != "") // P14
|
|
vdPar[8] = Clamp( std::stod( process.child( "AngleRefEnd").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "AngleOppStart") != nullptr && process.child( "AngleOppStart").text().get() != "") // P15
|
|
vdPar[9] = Clamp( std::stod( process.child( "AngleOppStart").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "AngleOppEnd") != nullptr && process.child( "AngleOppEnd").text().get() != "") // P16
|
|
vdPar[10] = Clamp( std::stod( process.child( "AngleOppEnd").text().get()), 0.1, 179.9) ;
|
|
|
|
string sStartLimited = process.child( "StartLimited") == nullptr ? "no" : process.child( "StartLimited").text().get() ; // P04
|
|
string sEndLimited = process.child( "EndLimited") == nullptr ? "no" : process.child( "EndLimited").text().get() ;
|
|
vdPar[2] = ComputeP04( { "no", sStartLimited, sEndLimited}) ;
|
|
if ( vdPar[2] == -2)
|
|
return false ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadSawCutParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 13 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if (process.attribute( "ToolPosition") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: SawCut toolposition missing") ;
|
|
return false ;
|
|
}
|
|
|
|
string sToolPosition = process.attribute( "ToolPosition").value() ;
|
|
if ( sToolPosition == "center")
|
|
nGroup = 0 ;
|
|
else if ( sToolPosition == "right")
|
|
nGroup = 3 ;
|
|
else if ( sToolPosition == "left")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: SawCut tool position unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 8) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: SawCut number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[3] = Clamp( std::stod( process.child( "Angle").text().get()), 0.0, 180.0) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[4] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "Bevel") != nullptr && process.child( "Bevel").text().get() != "") // P08
|
|
vdPar[5] = std::stod( process.child( "Bevel").text().get()) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[6] = std::stod( process.child( "AngleRefStart").text().get()) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[7] = std::stod( process.child( "Length").text().get()) ;
|
|
else
|
|
vdPar[7] = 0.0 ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadSlotParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 16 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Slot orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Slot orientation unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 14) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Slot number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "MachiningLimits") != nullptr ) { // P04
|
|
vdPar[3] = ComputeP04( process.child( "MachiningLimits")) ;
|
|
if ( vdPar[3] == -2)
|
|
return false ;
|
|
}
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[4] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[5] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "AngleRefPoint") != nullptr && process.child( "AngleRefPoint").text().get() != "") // P08
|
|
vdPar[6] = std::stod( process.child( "AngleRefPoint").text().get()) ;
|
|
if ( process.child( "AngleOppPoint") != nullptr && process.child( "AngleOppPoint").text().get() != "") // P09
|
|
vdPar[7] = std::stod( process.child( "AngleOppPoint").text().get()) ;
|
|
if ( process.child( "AddAngleOppPoint") != nullptr && process.child( "AddAngleOppPoint").text().get() != "") // P10
|
|
vdPar[8] = Clamp( std::stod( process.child( "AddAngleOppPoint").text().get()), -179.9, 179.9) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[9] = std::stod( process.child( "Depth").text().get()) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[10] = std::stod( process.child( "Length").text().get()) ;
|
|
if ( process.child( "Thickness") != nullptr && process.child( "Thickness").text().get() != "") // P13
|
|
vdPar[11] = std::stod( process.child( "Thickness").text().get()) ;
|
|
|
|
// P14 P15 non vengono usati
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadBirdsMouthParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 20 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BirdsMouth orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BirdsMouth orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 13) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BirdsMouth number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
// P04 ?
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[3] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "Inclination1") != nullptr && process.child( "Inclination1").text().get() != "") // P07
|
|
vdPar[4] = std::stod( process.child( "Inclination1").text().get()) ;
|
|
if ( process.child( "Inclination2") != nullptr && process.child( "Inclination2").text().get() != "") // P08
|
|
vdPar[5] = std::stod( process.child( "Inclination2").text().get()) ;
|
|
|
|
string sLeadAnglePar = process.child( "LeadAngleParallel").text().get() ; // P09
|
|
if ( sLeadAnglePar == "yes" || sLeadAnglePar == "")
|
|
vdPar[6] = 0.0 ;
|
|
else if ( sLeadAnglePar == "no"){
|
|
if ( process.child( "LeadAngle") != nullptr && process.child( "LeadAngle").text().get() != "")
|
|
vdPar[6] = std::stod( process.child( "LeadAngle").text().get()) ;
|
|
else
|
|
vdPar[6] = 90.0 ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : LeadAngleParallel unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sLeadInclPar = process.child( "LeadInclinationParallel").text().get() ; // P10
|
|
if ( sLeadInclPar == "yes" || sLeadInclPar == "")
|
|
vdPar[7] = 0.0 ;
|
|
else if ( sLeadInclPar == "no" ){
|
|
if ( process.child( "LeadInclination") != nullptr && process.child( "LeadInclination").text().get() != "")
|
|
vdPar[7] = std::stod( process.child( "LeadInclination").text().get()) ;
|
|
else
|
|
vdPar[7] = 90.0 ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : LeadInclinationParallel unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P11
|
|
vdPar[8] = std::stod( process.child( "StartDepth").text().get()) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P12
|
|
vdPar[9] = std::stod( process.child( "Depth").text().get()) ;
|
|
if ( process.child( "Width") != nullptr && process.child( "Width").text().get() != "") // P13
|
|
vdPar[10] = std::stod( process.child( "Width").text().get()) ;
|
|
|
|
string sHCPLimited = process.child( "HeightCounterPartLimited").text().get() ; // P14
|
|
if ( sHCPLimited == "no" || sHCPLimited == "")
|
|
vdPar[11] = 0.0 ;
|
|
else if ( sHCPLimited == "yes"){
|
|
if ( process.child( "HeightCounterPart") != nullptr && process.child( "HeightCounterPart").text().get() != "")
|
|
vdPar[11] = std::stod( process.child( "HeightCounterPart").text().get()) ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : HeightCounterPartLimited unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sWCPLimited = process.child( "WidthCounterPartLimited").text().get() ; // P15
|
|
if ( sWCPLimited == "no" || sWCPLimited == "")
|
|
vdPar[12] = 0.0 ;
|
|
else if ( sWCPLimited == "yes"){
|
|
if ( process.child( "WidthCounterPart") != nullptr && process.child( "WidthCounterPart").text().get() != "")
|
|
vdPar[12] = std::stod( process.child( "WidthCounterPart").text().get()) ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : WidthCounterPartLimited unknown") ;
|
|
return false ;
|
|
}
|
|
if ( process.child( "RafterNailHole") != nullptr && process.child( "RafterNailHole").text().get() != ""){ // P05
|
|
string sRafterNailHole = process.child( "RafterNailHole").text().get() ;
|
|
if ( sRafterNailHole == "yes")
|
|
vdPar[2] = 1 ;
|
|
else if ( sRafterNailHole == "no")
|
|
vdPar[2] = 0 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : RafterNailHole invalid paramater") ;
|
|
return false ;
|
|
}
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadHipValleyRafterNotchParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 25 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: HipValleyRafterNotch orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: HipValleyRafterNotch orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 9) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: HipValleyRafterNotch number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = std::stod( process.child( "StartX").text().get()) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = std::stod( process.child( "StartY").text().get()) ;
|
|
if ( process.child( "AngleRefEdge") != nullptr && process.child( "AngleRefEdge").text().get() != "") // P06
|
|
vdPar[3] = std::stod( process.child( "AngleRefEdge").text().get()) ;
|
|
if ( process.child( "AngleOppEdge") != nullptr && process.child( "AngleOppEdge").text().get() != "") // P07
|
|
vdPar[4] = std::stod( process.child( "AngleOppEdge").text().get()) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P08
|
|
vdPar[5] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P11
|
|
vdPar[6] = std::stod( process.child( "StartDepth").text().get()) ;
|
|
|
|
string sWCPRefEdgeLimited = process.child( "WidthCounterPartRefEdgeLimited").text().get() ; // P14
|
|
if ( sWCPRefEdgeLimited == "no" || sWCPRefEdgeLimited == "")
|
|
vdPar[7] = 0.0 ;
|
|
else if ( sWCPRefEdgeLimited == "yes"){
|
|
if ( process.child( "WidthCounterPartRefEdge") != nullptr && process.child( "WidthCounterPartRefEdge").text().get() != "")
|
|
vdPar[7] = std::stod( process.child( "WidthCounterPartRefEdge").text().get()) ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : WidthCounterPartRefEdgeLimited unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sWCPOppEdgeLimited = process.child( "WidthCounterPartOppEdgeLimited").text().get() ; // P15
|
|
if ( sWCPOppEdgeLimited == "no" || sWCPOppEdgeLimited == "")
|
|
vdPar[8] = 0.0 ;
|
|
else if ( sWCPOppEdgeLimited == "yes"){
|
|
if ( process.child( "WidthCounterPartOppEdge") != nullptr && process.child( "WidthCounterPartOppEdge").text().get() != "")
|
|
vdPar[8] = std::stod( process.child( "WidthCounterPartOppEdge").text().get()) ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : WidthCounterPartOppEdgeLimited unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
if ( vdPar[7] < EPS_SMALL && vdPar[8] < EPS_SMALL){
|
|
LOG_ERROR( GetEExLogger(), " Warning reading Part Processing : P14 = P15 = 0") ;
|
|
vdPar[7] = 1000.0 ;
|
|
vdPar[8] = 1000.0 ;
|
|
}
|
|
|
|
if ( process.child( "RafterNailHole") != nullptr && process.child( "RafterNailHole").text().get() != ""){ // P05
|
|
string sRafterNailHole = process.child( "RafterNailHole").text().get() ;
|
|
if ( sRafterNailHole == "yes")
|
|
vdPar[2] = 1 ;
|
|
else if ( sRafterNailHole == "no" || sRafterNailHole == "")
|
|
vdPar[2] = 0 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : RafterNailHole invalid paramater") ;
|
|
return false ;
|
|
}
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadLapParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 30 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: HipValleyRafterNotch orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: HipValleyRafterNotch orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 13) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: HipValleyRafterNotch number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
// vdPar[2] = ? Non c'� StartDepth
|
|
if ( process.child( "MachiningLimits") != nullptr ) { // P04
|
|
vdPar[3] = ComputeP04( process.child( "MachiningLimits")) ;
|
|
if ( vdPar[3] == -2)
|
|
return false ;
|
|
}
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[4] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[5] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "Slope") != nullptr && process.child( "Slope").text().get() != "") // P08
|
|
vdPar[6] = std::stod( process.child( "Slope").text().get()) ;
|
|
|
|
string sLeadAngPar = process.child( "LeadAngleParallel").text().get() ; // P09
|
|
if ( sLeadAngPar == "yes" || sLeadAngPar == "")
|
|
vdPar[7] = 0.0 ;
|
|
else if ( sLeadAngPar == "no" ){
|
|
if ( process.child( "LeadAngle") != nullptr && process.child( "LeadAngle").text().get() != "")
|
|
vdPar[7] = Clamp( std::stod( process.child( "LeadAngle").text().get()), 0.1, 179.9) ;
|
|
else
|
|
vdPar[7] = 90.0 ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LeadAngle unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sLeadInclPar = process.child( "LeadInclinationParallel").text().get() ; // P10
|
|
if ( sLeadInclPar == "yes" || sLeadInclPar == "")
|
|
vdPar[8] = 0.0 ;
|
|
else if ( sLeadInclPar == "no"){
|
|
if ( process.child( "LeadInclination") != nullptr && process.child( "LeadInclination").text().get() != "")
|
|
vdPar[8] = Clamp( std::stod( process.child( "LeadInclination").text().get()), 0.1, 179.9) ;
|
|
else
|
|
vdPar[8] = 90.0 ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LeadInclinationParllel unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[9] = Clamp( std::stod( process.child( "Depth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[10] = std::stod( process.child( "Length").text().get()) ;
|
|
// vdPar[11] = ?
|
|
if ( process.child( "Width") != nullptr && process.child( "Width").text().get() != "") // P14
|
|
vdPar[12] = Clamp( std::stod( process.child( "Width").text().get()), 0.0, 50000.0) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadLogHouseHalfLapParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 33 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseHalfLap orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseHalfLap orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 5) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseHalfLap number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[1] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "DepthRefSide") != nullptr && process.child( "DepthRefSide").text().get() != "") // P11
|
|
vdPar[2] = Clamp( std::stod( process.child( "DepthRefSide").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "DepthOppSide") != nullptr && process.child( "DepthOppSide").text().get() != "") // P12
|
|
vdPar[3] = Clamp( std::stod( process.child( "DepthOppSide").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P13
|
|
vdPar[4] = std::stod( process.child( "Length").text().get()) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadFrenchRidgeLapParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 33 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: FrenchRidgeLap orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: FrenchRidgeLap orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 4) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: FrenchRidgeLap number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "RefPosition") != nullptr){ // P02
|
|
string sRefPosition = process.child( "RefPosition").text().get() ;
|
|
if ( sRefPosition == "refedge" || sRefPosition == "")
|
|
vdPar[1] = 0 ;
|
|
else if ( sRefPosition == "oppedge")
|
|
vdPar[1] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: FrenchRidgeLap RefPosition unknown") ;
|
|
return false ;
|
|
}
|
|
}
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[2] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "DrillholeDiam") != nullptr && process.child( "DrillholeDiam").text().get() != "") // P13
|
|
vdPar[3] = std::stod( process.child( "DrillholeDiam").text().get()) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadChamferParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 36 ;
|
|
nSide = 3 ; // Chamfer non ha un reference plane
|
|
nGroup = 4 ; // Chamfer non ha orientation ( prendo start)
|
|
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 5) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Chamfer number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
|
|
string sCamferEdge12 = process.child( "ChamferEdge12") == nullptr ? "yes" : process.child( "ChamferEdge12").text().get() ; // P04
|
|
string sCamferEdge23 = process.child( "ChamferEdge23") == nullptr ? "yes" : process.child( "ChamferEdge23").text().get() ;
|
|
string sCamferEdge34 = process.child( "ChamferEdge34") == nullptr ? "yes" : process.child( "ChamferEdge34").text().get() ;
|
|
string sCamferEdge41 = process.child( "ChamferEdge34") == nullptr ? "yes" : process.child( "ChamferEdge41").text().get() ;
|
|
STRVECTOR values = { sCamferEdge12, sCamferEdge23, sCamferEdge34, sCamferEdge41} ;
|
|
vdPar[1] = 0.0 ;
|
|
for ( size_t i = 0 ; i < values.size() ; i++){
|
|
if ( values[i] == "yes")
|
|
vdPar[1] += pow( 2, i) ;
|
|
else if ( values[i] != "no"){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ChamferEdge value is not valid") ;
|
|
return false ;
|
|
}
|
|
}
|
|
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[2] = std::stod( process.child( "Depth").text().get()) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[3] = std::stod( process.child( "Length").text().get()) ;
|
|
|
|
string sChamferExit = process.child( "ChamferExit").text().get() ; // P15
|
|
if ( sChamferExit == "orthogonal" || sChamferExit == "")
|
|
vdPar[4] = 0 ;
|
|
else if ( sChamferExit == "angular")
|
|
vdPar[4] = 1 ;
|
|
else if ( sChamferExit == "round")
|
|
vdPar[4] = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Chamfer ExitType unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadLogHouseJointParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 37 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 15) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseJoint number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "DepthSideLaps") != nullptr && process.child( "DepthSideLaps").text().get() != "") // P03
|
|
vdPar[1] = std::stod( process.child( "DepthSideLaps").text().get()) ;
|
|
if ( process.child( "DepthRefSide") != nullptr && process.child( "DepthRefSide").text().get() != "") // P08
|
|
vdPar[4] = std::stod( process.child( "DepthRefSide").text().get()) ;
|
|
if ( process.child( "LengthRefSide") != nullptr && process.child( "LengthRefSide").text().get() != "") // P09
|
|
vdPar[5] = std::stod( process.child( "LengthRefSide").text().get()) ;
|
|
if ( process.child( "DepthOppSide") != nullptr && process.child( "DepthOppSide").text().get() != "") // P10
|
|
vdPar[6] =std::stod( process.child( "DepthOppSide").text().get()) ;
|
|
if ( process.child( "LengthOppSide") != nullptr && process.child( "LengthOppSide").text().get() != "") // P11
|
|
vdPar[7] = std::stod( process.child( "LengthOppSide").text().get()) ;
|
|
if ( process.child( "DepthRefEdge") != nullptr && process.child( "DepthRefEdge").text().get() != "") // P12
|
|
vdPar[8] = std::stod( process.child( "DepthRefEdge").text().get()) ;
|
|
if ( process.child( "LengthRefEdge") != nullptr && process.child( "LengthRefEdge").text().get() != "") // P13
|
|
vdPar[9] = std::stod( process.child( "LengthRefEdge").text().get()) ;
|
|
if ( process.child( "DepthOppEdge") != nullptr && process.child( "DepthOppEdge").text().get() != "") // P14
|
|
vdPar[10] = std::stod( process.child( "DepthOppEdge").text().get()) ;
|
|
if ( process.child( "LengthOppEdge") != nullptr && process.child( "LengthOppEdge").text().get() != "") // P15
|
|
vdPar[11] = std::stod( process.child( "LengthOppEdge").text().get()) ;
|
|
if ( process.child( "ArcDepth") != nullptr && process.child( "ArcDepth").text().get() != "") // P16
|
|
vdPar[12] = Clamp( std::stod( process.child( "ArcDepth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "ArcRadius") != nullptr && process.child( "ArcRadius").text().get() != "") // P17
|
|
vdPar[13] = Clamp( std::stod( process.child( "ArcRadius").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "ArcCenter") != nullptr && process.child( "ArcCenter").text().get() != "") // P18
|
|
vdPar[14] = Clamp( std::stod( process.child( "ArcCenter").text().get()), 0.0, 50000.0) ;
|
|
|
|
string sLapPosition = process.child( "LapPosition").text().get() ; // P04
|
|
if ( sLapPosition == "symmetric" || sLapPosition == "")
|
|
vdPar[2] = 0 ;
|
|
else if ( sLapPosition == "forward")
|
|
vdPar[2] = 1 ;
|
|
else if ( sLapPosition == "backward")
|
|
vdPar[2] = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseJoint LapPosition unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sDrillHole = process.child( "DrillHole").text().get() ; // P05
|
|
if ( sDrillHole == "no" || sDrillHole == "")
|
|
vdPar[3] = 0 ;
|
|
else if ( sDrillHole == "yes")
|
|
vdPar[3] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseJoint DrillHole unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sArcRefEdgeStart = process.child( "ArcRefEdgeStart") == nullptr ? "no" : process.child( "ArcRefEdgeStart").text().get() ;
|
|
string sArcOppEdgeStart = process.child( "ArcOppEdgeStart") == nullptr ? "no" : process.child( "ArcOppEdgeStart").text().get() ;
|
|
string sArcRefEdgeEnd = process.child( "ArcRefEdgeEnd") == nullptr ? "no" : process.child( "ArcRefEdgeEnd").text().get() ;
|
|
string sArcOppEdgeEnd = process.child( "ArcOppEdgeEnd") == nullptr ? "no" : process.child( "ArcOppEdgeEnd").text().get() ;
|
|
vdPar[15] = ComputeP04( { sArcOppEdgeEnd, sArcOppEdgeStart, sArcRefEdgeEnd, sArcRefEdgeStart}) ; // P19
|
|
if ( vdPar[15] == -2)
|
|
return false ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadLogHouseFrontParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 38 ;
|
|
if ( process.attribute("ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseFront orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseFront orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 7) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseFront number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[2] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P11
|
|
vdPar[3] = Clamp( std::stod( process.child( "StartDepth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "DepthOppEdge") != nullptr && process.child( "DepthOppEdge").text().get() != "") // P12
|
|
vdPar[4] = Clamp( std::stod( process.child( "DepthOppEdge").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "DepthRefEdge") != nullptr && process.child( "DepthRefEdge").text().get() != "") // P13
|
|
vdPar[5] = Clamp( std::stod( process.child( "DepthRefEdge").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P15
|
|
vdPar[6] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
|
|
string sRefSideOnly = process.child( "RefSideOnly").text().get() ; // P04
|
|
if ( sRefSideOnly == "yes")
|
|
vdPar[1] = 0 ;
|
|
else if ( sRefSideOnly == "no" || sRefSideOnly == "")
|
|
vdPar[1] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LogHouseFront RefSideOnly unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadPocketParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 39 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 9) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Pocket number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "MachiningLimits") != nullptr ) { // P04
|
|
vdPar[2] = ComputeP04( process.child( "MachiningLimits")) ;
|
|
if ( vdPar[2] == -2)
|
|
return false ;
|
|
}
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[3] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[4] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "Slope") != nullptr && process.child( "Slope").text().get() != "") // P08
|
|
vdPar[5] = std::stod( process.child( "Slope").text().get()) ;
|
|
if ( process.child( "InternalAngle") != nullptr && process.child( "InternalAngle").text().get() != "") // P10
|
|
vdPar[6] = std::stod( process.child( "InternalAngle").text().get()) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P11
|
|
vdPar[7] = Clamp( std::stod( process.child( "StartDepth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[8] = std::stod( process.child( "Length").text().get()) ;
|
|
if ( process.child( "Width") != nullptr && process.child( "Width").text().get() != "") // P13
|
|
vdPar[9] = std::stod( process.child( "Width").text().get()) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadDrillingParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 40 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 7) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Drilling number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
// vdPar[2] = ? // P03
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[3] = Clamp( std::stod( process.child( "Angle").text().get()), 0.0, 360.0) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[4] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[5] = Clamp( std::stod( process.child( "Depth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Diameter") != nullptr && process.child( "Diameter").text().get() != "") // P12
|
|
vdPar[6] = Clamp( std::stod( process.child( "Diameter").text().get()), 0.0, 50000.0) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadTenonParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 50 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
if ( process.child( "Orientation") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: FrenchRidgeLap orientation missing") ;
|
|
return false ;
|
|
}
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 12) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // ~P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // ~P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[4] = Clamp( std::stod( process.child( "Angle").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[5] = Clamp( std::stod( process.child( "Inclination").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "Rotation") != nullptr && process.child( "Rotation").text().get() != "") // P08
|
|
vdPar[6] = std::stod( process.child( "Rotation").text().get()) ;
|
|
if ( process.child( "ShapeRadius") != nullptr && process.child( "ShapeRadius").text().get() != "") // P10
|
|
vdPar[7] = Clamp( std::stod( process.child( "ShapeRadius").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Height") != nullptr && process.child( "Height").text().get() != "") // P11
|
|
vdPar[8] = Clamp( std::stod( process.child( "Height").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Width") != nullptr && process.child( "Width").text().get() != "") // P12
|
|
vdPar[9] = Clamp( std::stod( process.child( "Width").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // ~P14
|
|
vdPar[10] = Clamp( std::stod( process.child( "StartDepth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // ~P15
|
|
vdPar[11] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
|
|
string sShape = process.child( "Shape").text().get() ; // P04
|
|
if ( sShape == "automatic" || sShape == "")
|
|
vdPar[2] = 0 ;
|
|
else if ( sShape == "square")
|
|
vdPar[2] = 1;
|
|
else if ( sShape == "round")
|
|
vdPar[2] = 2;
|
|
else if ( sShape == "rounded")
|
|
vdPar[2] = 3;
|
|
else if ( sShape == "radius")
|
|
vdPar[2] = 4;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon Shape is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sChamfer = process.child( "Chamfer").text().get() ; // P05
|
|
if ( sChamfer == "no")
|
|
vdPar[3] = 0 ;
|
|
else if ( sShape == "yes")
|
|
vdPar[3] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon Chamfer is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadMortiseParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 50 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 14) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Mortise number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[4] = Clamp( std::stod( process.child( "Angle").text().get()), -180.0, 180.0) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P08
|
|
vdPar[6] = Clamp( std::stod( process.child( "Inclination").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "ShapeRadius") != nullptr && process.child( "ShapeRadius").text().get() != "") // P10
|
|
vdPar[7] = Clamp( std::stod( process.child( "ShapeRadius").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[8] = Clamp( std::stod( process.child( "Depth").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Width") != nullptr && process.child( "Width").text().get() != "") // P12
|
|
vdPar[9] = Clamp( std::stod( process.child( "Width").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P13
|
|
vdPar[10] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
else
|
|
vdPar[10] = 80.0 ; // valore default
|
|
if ( process.child( "Slope") != nullptr && process.child( "Slope").text().get() != "") // P16
|
|
vdPar[13] = Clamp( std::stod( process.child( "Slope").text().get()), 0.1, 179.9) ;
|
|
|
|
string sShape = process.child( "Shape").text().get() ; // P04
|
|
if ( sShape == "automatic" || sShape == "")
|
|
vdPar[3] = 0 ;
|
|
else if ( sShape == "square")
|
|
vdPar[3] = 1;
|
|
else if ( sShape == "round")
|
|
vdPar[3] = 2;
|
|
else if ( sShape == "rounded")
|
|
vdPar[3] = 3;
|
|
else if ( sShape == "radius")
|
|
vdPar[3] = 4;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon Shape is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
vdPar[11] = 0.0 ;
|
|
vdPar[12] = 0.0 ;
|
|
vdPar[5] = ANG_RIGHT ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadDovetailTenonParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 55 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Orientation unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 12) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Mortise number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
double dWidth = 40.0 ;
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // ~P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // ~P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[3] = Clamp( std::stod( process.child( "Angle").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[4] = Clamp( std::stod( process.child( "Inclination").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "Rotation") != nullptr && process.child( "Rotation").text().get() != "") // P08
|
|
vdPar[5] = Clamp( std::stod( process.child( "Rotation").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "Width") != nullptr && process.child( "Width").text().get() != "") // P09
|
|
dWidth = Clamp( std::stod( process.child( "Width").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "ConeAngle") != nullptr && process.child( "ConeAngle").text().get() != "") // P10
|
|
vdPar[7] = Clamp( std::stod( process.child( "ConeAngle").text().get()), 0.0, 30.0) ;
|
|
if ( process.child( "Height") != nullptr && process.child( "Height").text().get() != "") // P11
|
|
vdPar[8] = Clamp( std::stod( process.child( "Height").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "ShapeRadius") != nullptr && process.child( "ShapeRadius").text().get() != "") // P12
|
|
vdPar[9] = Clamp( std::stod( process.child( "ShapeRadius").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // ~P14
|
|
vdPar[10] = Clamp( std::stod( process.child( "StartDepth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // ~P15
|
|
vdPar[11] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
// if ( process.child( "FlankAngle") != nullptr && process.child( "FlankAngle").text().get() != "")
|
|
// vdPar[] = Clamp( std::stod( process.child( "FlankAngle").text().get()), 5.0, 35.0) ;
|
|
|
|
|
|
string sShape = process.child( "Shape").text().get() ; // ~P04
|
|
if ( sShape == "round"){
|
|
vdPar[6] = 0.0 ; // P09
|
|
vdPar[9] = dWidth * cos( vdPar[7] * DEGTORAD) / ( 1 - sin( vdPar[7] * DEGTORAD)) ; // P12
|
|
}
|
|
else if ( sShape == "radius"){
|
|
vdPar[9] *= 2 ; // P12
|
|
vdPar[6] = dWidth - vdPar[9] * ( 1 - sin( vdPar[7] * DEGTORAD)) / cos( vdPar[7] * DEGTORAD) ; // P09
|
|
if ( vdPar[6] < 0 ) {
|
|
LOG_ERROR( GetEExLogger(), " Error : Dovetail tenon width")
|
|
return false ;
|
|
}
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon Shape is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sLimitedBottom = process.child( "LengthLimitedBottom").text().get() ;
|
|
if ( sLimitedBottom == "no")
|
|
vdPar[2] = 1 ;
|
|
else if ( sLimitedBottom == "yes")
|
|
vdPar[2] = 0 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LengthLimitedBottom is unknown")
|
|
}
|
|
|
|
// Parametri vengono poi sistemati nella funzione AddDovetailTenonBTLX
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadDovetailMortiseParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 55 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 14) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Dovetail Mortise number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
double dWidth = 40.0 ;
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[5] = Clamp( std::stod( process.child( "Angle").text().get()), -180.0, 180.0) ;
|
|
if ( process.child( "Width") != nullptr && process.child( "Width").text().get() != "")
|
|
dWidth = Clamp( std::stod( process.child( "Width").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "ConeAngle") != nullptr && process.child( "ConeAngle").text().get() != "") // P16
|
|
vdPar[8] = Clamp( std::stod( process.child( "ConeAngle").text().get()), 0.1, 179.9) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[9] = Clamp( std::stod( process.child( "Depth").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "ShapeRadius") != nullptr && process.child( "ShapeRadius").text().get() != "") // P10
|
|
vdPar[10] = Clamp( std::stod( process.child( "ShapeRadius").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P13
|
|
vdPar[11] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
|
|
string sLimitedBottom = process.child( "LengthLimitedBottom").text().get() ; // P04
|
|
if ( sLimitedBottom == "yes")
|
|
vdPar[3] = 0 ;
|
|
else if ( sLimitedBottom == "no")
|
|
vdPar[3] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Dovetail Mortise LengthLimitedBottom unkown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sLimitationTop = process.child( "LimitationTop").text().get() ; // P05
|
|
if ( sLimitationTop == "unlimited")
|
|
vdPar[4] = 0 ;
|
|
else if ( sLimitationTop == "pocket")
|
|
vdPar[4] = 1 ;
|
|
else if ( sLimitationTop != "limited") {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Dovetail Mortise LimitationTop unkown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sShape = process.child( "Shape").text().get() ;
|
|
if ( sShape == "round"){
|
|
vdPar[7] = 0 ; // P09
|
|
vdPar[10] = dWidth * cos( vdPar[8] * DEGTORAD) / ( 1 - sin( vdPar[8] * DEGTORAD)) ; // P12
|
|
}
|
|
else if ( sShape == "radius"){
|
|
vdPar[10] *= 2 ; // P12
|
|
vdPar[7] = dWidth - vdPar[10] * ( 1 - sin( vdPar[8] * DEGTORAD)) / cos( vdPar[8] * DEGTORAD) ; // P09
|
|
if ( vdPar[7] < 0 ) {
|
|
LOG_ERROR( GetEExLogger(), " Error : Dovetail mortise width") ;
|
|
return false ;
|
|
}
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Mortise Shape is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
vdPar[6] = ANG_RIGHT ; // P07
|
|
vdPar[12] = 0.0 ; // P14
|
|
vdPar[13] = 0.0 ; // P15
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadMarkingParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 60 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 8) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Text number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
vdPar[2] = 0 ; // no text // P04
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
//uso il range del BTL
|
|
vdPar[3] = Clamp( std::stod( process.child( "Angle").text().get()), 1.0, 180.0) ;
|
|
if ( process.child( "InteriorAngle") != nullptr && process.child( "InteriorAngle").text().get() != "") // P13
|
|
vdPar[4] = Clamp( std::stod( process.child( "InteriorAngle").text().get()), 0.0, 50000.0) ;
|
|
string sStyle = process.child( "Style").text().get() ;
|
|
|
|
double dWidth = Clamp( std::stod( process.child( "Width").text().get()), 0.0, 50000.0) ;
|
|
double dLength = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
|
|
// Linea orizzontale
|
|
if ( abs( vdPar[3] - 180.0) < EPS_SMALL){
|
|
vdPar[6] = dLength ;
|
|
return true ;
|
|
}
|
|
|
|
string sLimited = process.child( "LengthLimited").text().get() ; // P12
|
|
Vector3d vtD = FromPolar( 1, vdPar[3]) ;
|
|
if ( nGroup == 4)
|
|
vtD.Mirror( X_AX) ;
|
|
if ( sLimited == "no" || sLimited == "")
|
|
vdPar[6] = 0.0 ; // la funzione AddMarking sistemer� il valore in base alla lunghezza del lato
|
|
else if ( sLimited == "yes")
|
|
if ( abs( vdPar[3]) < EPS_SMALL)
|
|
vdPar[6] = dLength ;
|
|
else
|
|
vdPar[6] = dLength * vtD.y ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: LengthLimited unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
|
|
if ( sStyle == "single" || sStyle == ""){ // P11
|
|
// Condizioni che identificano il caso della singola linea
|
|
vdPar[4] = 0.0 ;
|
|
vdPar[5] = 0.0 ;
|
|
}
|
|
else if ( sStyle == "double"){
|
|
vdPar[5] = dWidth * sin( vdPar[4] * DEGTORAD) / sin( vdPar[3] * DEGTORAD) ;
|
|
//Condizione che identifica il caso di linea doppia
|
|
vdPar[4] = 0.0 ;
|
|
}
|
|
else if ( sStyle == "square"){
|
|
Vector3d vtE = vtD ;
|
|
vtE.Rotate( Z_AX, ( ( nGroup == 3) ? vdPar[4] : - vdPar[4])) ;
|
|
vdPar[5] = dWidth * abs( vtE.x) ;
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: MarkingStyle unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
nSPar = 1 ;
|
|
sPar = "" ; // P15
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadTextParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 61 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 8) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Text number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[2] = Clamp( std::stod( process.child( "Angle").text().get()), -180.0, 180.0) ;
|
|
if ( process.child( "TextHeight") != nullptr && process.child( "TextHeight").text().get() != "") // P13
|
|
vdPar[7] = Clamp( std::stod( process.child( "TextHeight").text().get()), 0.0, 50000.0) ;
|
|
|
|
nSPar = 1 ;
|
|
sPar = process.child( "Text").text().get() ; // P15
|
|
|
|
string sVAlignment = process.child( "AlignmentVertical").text().get() ; // P09
|
|
if ( sVAlignment == "bottom" || sVAlignment == "")
|
|
vdPar[3] = 0 ;
|
|
else if ( sVAlignment == "middle")
|
|
vdPar[3] = 1;
|
|
else if ( sVAlignment == "top")
|
|
vdPar[3] = 2;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Text Vertical Alignment is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sHAlignment = process.child( "AlignmentHorizontal").text().get() ; // P10
|
|
if ( sHAlignment == "left" || sHAlignment == "")
|
|
vdPar[4] = 0 ;
|
|
else if ( sHAlignment == "middle")
|
|
vdPar[4] = 1 ;
|
|
else if ( sHAlignment == "right")
|
|
vdPar[4] = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Text Horizontal Alignment is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sMAlignment = process.child( "AlignmentMultiline").text().get() ; // P11
|
|
if ( sMAlignment == "left" || sMAlignment == "")
|
|
vdPar[5] = 0 ;
|
|
else if ( sMAlignment == "middle")
|
|
vdPar[5] = 1 ;
|
|
else if ( sMAlignment == "right")
|
|
vdPar[5] = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Text Multiline Alignment is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sStackedMarking = process.child( "StackedMarking").text().get() ; // P12
|
|
if ( sStackedMarking == "no")
|
|
vdPar[6] = 0 ;
|
|
else if ( sStackedMarking == "yes")
|
|
vdPar[6] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Text StackedMarking is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadSimpleScarfParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 70 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 6) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: SimpleScarf number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "DepthRefSide") != nullptr && process.child( "DepthRefSide").text().get() != "") // P11
|
|
vdPar[1] = std::stod( process.child( "DepthRefSide").text().get()) ;
|
|
if ( process.child( "DepthOppSide") != nullptr && process.child( "DepthOppSide").text().get() != "") // P12
|
|
vdPar[2] = std::stod( process.child( "DepthOppSide").text().get()) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P13
|
|
vdPar[3] = std::stod( process.child( "Length").text().get()) ;
|
|
if ( process.child( "DrillHoleDiam1") != nullptr && process.child( "DrillHoleDiam1").text().get() != "") // P14
|
|
vdPar[4] = std::stod( process.child( "DrillHoleDiam1").text().get()) ;
|
|
if ( process.child( "DrillHoleDiam2") != nullptr && process.child( "DrillHoleDiam2").text().get() != "") // P15
|
|
vdPar[5] = std::stod( process.child( "DrillHoleDiam2").text().get()) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadScarfJointParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 71 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tenon orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 9) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ScarfJoint number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "Inclination") != nullptr && process.child( "Inclination").text().get() != "") // P07
|
|
vdPar[1] = std::stod( process.child( "Inclination").text().get()) ;
|
|
if ( process.child( "LapLength") != nullptr && process.child( "LapLength").text().get() != "") // P10
|
|
vdPar[3] = std::stod( process.child( "LapLength").text().get()) ;
|
|
if ( process.child( "LapDepth") != nullptr && process.child( "LapDepth").text().get() != "") // P11
|
|
vdPar[4] = std::stod( process.child( "LapDepth").text().get()) ;
|
|
if ( process.child( "DepthOppSide") != nullptr && process.child( "DepthOppSide").text().get() != "") // P12
|
|
vdPar[5] = std::stod( process.child( "DepthOppSide").text().get()) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P13
|
|
vdPar[6] = std::stod( process.child( "Length").text().get()) ;
|
|
if ( process.child( "DrillHoleDiam1") != nullptr && process.child( "DrillHoleDiam1").text().get() != "") // P14
|
|
vdPar[7] = std::stod( process.child( "DrillHoleDiam1").text().get()) ;
|
|
if ( process.child( "DrillHoleDiam2") != nullptr && process.child( "DrillHoleDiam2").text().get() != "") // P15
|
|
vdPar[8] = std::stod( process.child( "DrillHoleDiam2").text().get()) ;
|
|
|
|
string sScarfShape = process.child( "ScarfShape").text().get() ; // P09
|
|
if ( sScarfShape == "classic")
|
|
vdPar[2] = 0 ;
|
|
else if ( sScarfShape == "refside" || sScarfShape == "") // se non esiste metto il valore di default
|
|
vdPar[2] = 1 ;
|
|
else if ( sScarfShape == "baseside")
|
|
vdPar[2] = -1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ScarfJoint ScarfShape is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadStepJointParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 80 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 1 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Step Joint orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 7) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: StepJoint number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StrutInclination") != nullptr && process.child( "StrutInclination").text().get() != "") // P07
|
|
vdPar[2] = std::stod( process.child( "StrutInclination").text().get()) ;
|
|
if ( process.child( "StepDepth") != nullptr && process.child( "StepDepth").text().get() != "") // P11
|
|
vdPar[3] = std::stod( process.child( "StepDepth").text().get()) ;
|
|
if ( process.child( "HeelDepth") != nullptr && process.child( "HeelDepth").text().get() != "") // P12
|
|
vdPar[4] = std::stod( process.child( "HeelDepth").text().get()) ;
|
|
if ( process.child( "TenonHeight") != nullptr && process.child( "TenonHeight").text().get() != "") // P14
|
|
vdPar[5] = std::stod( process.child( "TenonHeight").text().get()) ;
|
|
if ( process.child( "TenonWidth") != nullptr && process.child( "TenonWidth").text().get() != "") // P15
|
|
vdPar[6] = std::stod( process.child( "TenonWidth").text().get()) ;
|
|
|
|
string sStepShape = process.child( "StepShape").text().get() ; // P09
|
|
if ( sStepShape == "double" || sStepShape == "")
|
|
vdPar[1] = 0 ;
|
|
else if ( sStepShape == "step")
|
|
vdPar[1] = 1 ;
|
|
else if ( sStepShape == "heel")
|
|
vdPar[1] = -1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: StepJointNotch StepShape is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadStepJointNotchParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 80 ;
|
|
if ( process.attribute( "ReferencePlaneID") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing : missing reference plane") ;
|
|
return false ;
|
|
}
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Step Joint Notch orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 10) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: StepJoint number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "StrutInclination") != nullptr && process.child( "StrutInclination").text().get() != "") // P07
|
|
vdPar[3] = std::stod( process.child( "StrutInclination").text().get()) ;
|
|
if ( process.child( "NotchWidth") != nullptr && process.child( "NotchWidth").text().get() != "") // P10
|
|
vdPar[4] = std::stod( process.child( "NotchWidth").text().get()) ;
|
|
if ( process.child( "StepDepth") != nullptr && process.child( "StepDepth").text().get() != "") // P11
|
|
vdPar[5] = std::stod( process.child( "StepDepth").text().get()) ;
|
|
if ( process.child( "HeelDepth") != nullptr && process.child( "HeelDepth").text().get() != "") // P12
|
|
vdPar[6] = std::stod( process.child( "HeelDepth").text().get()) ;
|
|
if ( process.child( "StrutHeight") != nullptr && process.child( "StrutHeight").text().get() != "") // P13
|
|
vdPar[7] = std::stod( process.child( "StrutHeight").text().get()) ;
|
|
if ( process.child( "MortiseHeight") != nullptr && process.child( "MortiseHeight").text().get() != "") // P14
|
|
vdPar[8] = std::stod( process.child( "MortiseHeight").text().get()) ;
|
|
if ( process.child( "MortiseWidth") != nullptr && process.child( "MortiseWidth").text().get() != "") // P15
|
|
vdPar[9] =std::stod( process.child( "MortiseWidth").text().get()) ;
|
|
|
|
string sStepShape = process.child( "StepShape").text().get() ; // P09
|
|
if ( sStepShape == "double" || sStepShape == ""){
|
|
}
|
|
else if ( sStepShape == "step"){
|
|
vdPar[6] = 0.0 ; // P12
|
|
}
|
|
else if ( sStepShape == "heel"){
|
|
vdPar[5] = 0.0 ; // P11
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: StepJointNotch StepShape is unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
// P04 = vdPar[2] = ?
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadPlaningParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 90 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 4) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Text number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
|
|
string PlaneSide1 = process.child( "PlaneSide1") == nullptr ? "yes" : process.child( "PlaneSide1").text().get() ; // P04
|
|
string PlaneSide2 = process.child( "PlaneSide2") == nullptr ? "yes" : process.child( "PlaneSide2").text().get() ;
|
|
string PlaneSide3 = process.child( "PlaneSide3") == nullptr ? "yes" : process.child( "PlaneSide3").text().get() ;
|
|
string PlaneSide4 = process.child( "PlaneSide4") == nullptr ? "yes" : process.child( "PlaneSide4").text().get() ;
|
|
vdPar[1] = ComputeP04( { PlaneSide1, PlaneSide2, PlaneSide3, PlaneSide4}) ;
|
|
if ( vdPar[1] == -2)
|
|
return false ;
|
|
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P11
|
|
vdPar[2] = Clamp( std::stod( process.child( "Depth").text().get()), 0.0, 50.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[3] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 100000.0) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadProfileFrontParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 100 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ProfileFront orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 7) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ProfileFront number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "Depth") != nullptr && process.child( "Depth").text().get() != "") // P03
|
|
vdPar[1] = Clamp( std::stod( process.child( "Depth").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Rotation1") != nullptr && process.child( "Rotation1").text().get() != "") // P06
|
|
vdPar[2] = std::stod( process.child( "Rotation1").text().get()) ;
|
|
if ( process.child( "Rotation2") != nullptr && process.child( "Rotation2").text().get() != "") // P07
|
|
vdPar[3] = std::stod( process.child( "Rotation2").text().get()) ;
|
|
if ( process.child( "StartRotation") != nullptr && process.child( "StartRotation").text().get() != "") // P08
|
|
vdPar[4] = Clamp( std::stod( process.child( "StartRotation").text().get()), -90.0, 90.0) ;
|
|
if ( process.child( "Radius1") != nullptr && process.child( "Radius1").text().get() != "") // P11
|
|
vdPar[5] = Clamp( std::stod( process.child( "Radius1").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Radius2") != nullptr && process.child( "Radius2").text().get() != "") // P12
|
|
vdPar[6] = Clamp( std::stod( process.child( "Radius2").text().get()), 0.0, 1000.0) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadProfileCamberedParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 103 ;
|
|
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ProfileCambered orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 7) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ProfileCambered number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P10
|
|
vdPar[1] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 100000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P11
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "MaxDepth") != nullptr && process.child( "MaxDepth").text().get() != "") // P12
|
|
vdPar[3] = Clamp( std::stod( process.child( "MaxDepth").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "MinDepth") != nullptr && process.child( "MinDepth").text().get() != "") // P13
|
|
vdPar[4] = Clamp( std::stod( process.child( "MinDepth").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "EndDepth") != nullptr && process.child( "EndDepth").text().get() != "") // P14
|
|
vdPar[5] = Clamp( std::stod( process.child( "EndDepth").text().get()), 0.0, 1000.0) ;
|
|
|
|
string sPremill = process.child( "Premill").text().get() ; // P15
|
|
if ( sPremill == "round")
|
|
vdPar[6] = 0 ;
|
|
else if ( sPremill == "angular" || sPremill == "")
|
|
vdPar[6] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ProfileCambered Premill unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadRoundArchParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 104 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 3) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: RoundARch number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "Camber") != nullptr && process.child( "Camber").text().get() != "") // P11
|
|
vdPar[1] = Clamp( std::stod( process.child( "Camber").text().get()), 0.0, 1000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P12
|
|
vdPar[2] = std::stod( process.child( "Length").text().get()) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadProfileHeadParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 106 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
if ( sOrientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( sOrientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ProfileHead orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 16) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: ProfileHead number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
|
|
// Tipologia archi // P04
|
|
string sArc1Shape = process.child( "Arc1").attribute( "ArcShape").value() ;
|
|
string sArc2Shape = process.child( "Arc2").attribute( "ArcShape").value() ;
|
|
vdPar[1] = 0 ;
|
|
if ( sArc1Shape != "concave")
|
|
vdPar[1] += 1 ;
|
|
if ( sArc2Shape != "concave")
|
|
vdPar[1] += 2 ;
|
|
|
|
if ( process.child( "LapLength") != nullptr && process.child( "LapLength").text().get() != "") // P09
|
|
vdPar[2] =std::stod( process.child( "LapLength").text().get()) ;
|
|
if ( process.child( "LapHeight") != nullptr && process.child( "LapHeight").text().get() != "") // P10
|
|
vdPar[3] = std::stod( process.child( "LapHeight").text().get()) ;
|
|
|
|
// Arc 1
|
|
if ( process.child( "Arc1") != nullptr && process.child( "Arc1").attribute( "Displacement") != nullptr) // P11
|
|
vdPar[4] = process.child( "Arc1").attribute( "Displacement").as_double() ;
|
|
if ( process.child( "Arc1") != nullptr && process.child( "Arc1").attribute( "LapLength") != nullptr) // P15
|
|
vdPar[8] = process.child( "Arc1").attribute( "LapLength").as_double() ;
|
|
if ( process.child( "Arc1") != nullptr && process.child( "Arc1").attribute( "LapHeight") != nullptr) // P16
|
|
vdPar[9] = process.child( "Arc1").attribute( "LapHeight").as_double() ;
|
|
|
|
if ( process.child( "Arc1").child( "QuarterArc") != nullptr){
|
|
vdPar[5] = process.child( "Arc1").child( "QuarterArc").attribute( "Radius").as_double() ; // P12
|
|
vdPar[6] = 0.0 ; // P13
|
|
vdPar[7] = 0.0 ; // P14
|
|
}
|
|
else if ( process.child( "Arc1").child( "Segment") != nullptr){
|
|
vdPar[5] = process.child( "Arc1").child( "Segment").attribute( "Length").as_double() ; // P12
|
|
vdPar[6] = process.child( "Arc1").child( "Segment").attribute( "Height").as_double() ; // P13 // P13
|
|
vdPar[7] = process.child( "Arc1").child( "Segment").attribute( "Camber").as_double() ; // P14 // P14
|
|
}
|
|
else { // se non ci fosse metto i parametri a zero (non ai valori di default)
|
|
vdPar[5] = 0.0 ;
|
|
vdPar[6] = 0.0 ;
|
|
vdPar[7] = 0.0 ;
|
|
}
|
|
|
|
// Arc2
|
|
if ( process.child ( "Arc2") == nullptr){
|
|
vdPar[10] = 0.0 ;
|
|
vdPar[11] = 0.0 ;
|
|
vdPar[12] = 0.0 ;
|
|
vdPar[13] = 0.0 ;
|
|
vdPar[14] = 0.0 ;
|
|
vdPar[15] = 0.0 ;
|
|
}
|
|
|
|
if ( process.child( "Arc2") != nullptr && process.child( "Arc2").attribute( "Displacement") != nullptr) // P17
|
|
vdPar[10] = process.child( "Arc2").attribute( "Displacement").as_double() ;
|
|
if ( process.child( "Arc2") != nullptr && process.child( "Arc2").attribute( "LapLength") != nullptr) // P21
|
|
vdPar[14] = process.child( "Arc2").attribute( "LapLength").as_double() ;
|
|
if ( process.child( "Arc2") != nullptr && process.child( "Arc2").attribute( "LapHeight") != nullptr) // P22
|
|
vdPar[15] = process.child( "Arc2").attribute( "LapHeight").as_double() ;
|
|
|
|
if ( process.child( "Arc2").child( "QuarterArc") != nullptr){
|
|
vdPar[11] = process.child( "Arc2").child( "QuarterArc").attribute( "Radius").as_double() ; // P18
|
|
vdPar[12] = 0.0 ; // P19
|
|
vdPar[13] = 0.0 ; // P20
|
|
}
|
|
else if ( process.child( "Arc2").child( "Segment") != nullptr){
|
|
vdPar[11] = process.child( "Arc2").child( "Segment").attribute( "Length").as_double() ; // P18
|
|
vdPar[12] = process.child( "Arc2").child( "Segment").attribute( "Height").as_double() ; // P19 // P13
|
|
vdPar[13] = process.child( "Arc2").child( "Segment").attribute( "Camber").as_double() ; // P20 // P14
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadSphereParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 107 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
std::string orientation = process.child( "Orientation").text().get() ;
|
|
if ( orientation == "end")
|
|
nGroup = 3 ;
|
|
else if ( orientation == "start")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Sphere orientation unknwon") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 6) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Sphere number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Radius") != nullptr && process.child( "Radius").text().get() != "") // P11
|
|
vdPar[3] = Clamp( std::stod( process.child( "Radius").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "StartOffset") != nullptr && process.child( "StartOffset").text().get() != "") // P12
|
|
vdPar[4] = Clamp( std::stod( process.child( "StartOffset").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P13
|
|
vdPar[5] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadTriangleCutParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 120 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
nGroup = 4 ;
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 9) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: TriangleCut number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = Clamp( std::stod( process.child( "StartX").text().get()), -100000.0, 100000.0) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = Clamp( std::stod( process.child( "StartY").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = Clamp( std::stod( process.child( "StartDepth").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Normal1X") != nullptr && process.child( "Normal1X").text().get() != "") // P10
|
|
vdPar[3] = Clamp( std::stod( process.child( "Normal1X").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Normal1Y") != nullptr && process.child( "Normal1Y").text().get() != "") // P11
|
|
vdPar[4] = Clamp( std::stod( process.child( "Normal1Y").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Normal1Z") != nullptr && process.child( "Normal1Z").text().get() != "") // P12
|
|
vdPar[5] = Clamp( std::stod( process.child( "Normal1Z").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Normal2X") != nullptr && process.child( "Normal2X").text().get() != "") // P13
|
|
vdPar[6] = Clamp( std::stod( process.child( "Normal2X").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Normal2Y") != nullptr && process.child( "Normal2Y").text().get() != "") // P14
|
|
vdPar[7] = Clamp( std::stod( process.child( "Normal2Y").text().get()), -50000.0, 50000.0) ;
|
|
if ( process.child( "Normal2Z") != nullptr && process.child( "Normal2Z").text().get() != "") // P15
|
|
vdPar[8] = Clamp( std::stod( process.child( "Normal2Z").text().get()), -50000.0, 50000.0) ;
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadTyroleanDovetailParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 136 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
string sCutOff = process.child( "CutOff").text().get() ;
|
|
if ( sCutOff == "")
|
|
sCutOff = "no" ; // se non ci fosse, valore di default
|
|
|
|
if( sOrientation == "end" && sCutOff == "yes")
|
|
nGroup = 1 ;
|
|
else if (sOrientation == "start" && sCutOff == "yes")
|
|
nGroup = 2 ;
|
|
else if (sOrientation == "end" && sCutOff == "no")
|
|
nGroup = 3 ;
|
|
else if (sOrientation == "start" && sCutOff == "yes")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail group not defined") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 15) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: TriangleCut number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = std::stod( process.child( "StartX").text().get()) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = std::stod( process.child( "StartY").text().get()) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = std::stod( process.child( "StartDepth").text().get()) ;
|
|
if ( process.child( "Angle") != nullptr && process.child( "Angle").text().get() != "") // P06
|
|
vdPar[5] = std::stod( process.child( "Angle").text().get()) ;
|
|
if ( process.child( "Frosh").child("Width") != nullptr && process.child( "Frosh").child("Width").text().get() != "") // P07
|
|
vdPar[6] = Clamp( std::stod( process.child( "Frosh").child("Width").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Frosh").child("Depth") != nullptr && process.child( "Frosh").child("Depth").text().get() != "") // P08
|
|
vdPar[7] = Clamp( std::stod( process.child( "Frosh").child("Depth").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Slope") != nullptr && process.child( "Slope").text().get() != "") // P09
|
|
vdPar[8] = std::stod( process.child( "Slope").text().get()) ;
|
|
if ( process.child( "Height") != nullptr && process.child( "Height").text().get() != "") // P11
|
|
vdPar[9] = std::stod( process.child( "Height").text().get()) ;
|
|
if ( process.child("Klingschrot").child("Radius") != nullptr && process.child("Klingschrot").child("Radius").text().get() != "") // P12
|
|
vdPar[10] = Clamp( std::stod( process.child("Klingschrot").child("Radius").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child("Klingschrot").child("ArcLength") != nullptr && process.child("Klingschrot").child("ArcLength").text().get() != "") // P13
|
|
vdPar[11] = Clamp( std::stod( process.child("Klingschrot").child("ArcLength").text().get()), 0.0, 50000.0) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P15
|
|
vdPar[13] = Clamp( std::stod( process.child( "Length").text().get()), 0.0, 50000.0) ;
|
|
|
|
string sLapPosition = process.child( "LapPosition").text().get() ; // P04
|
|
if ( sLapPosition == "refedge" || sLapPosition == "")
|
|
vdPar[3] = 1 ;
|
|
else if ( sLapPosition == "oppedge")
|
|
vdPar[3] = 0 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail LapPosition unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sLapExit = process.child( "LapExit").text().get() ; // P05
|
|
if ( sLapExit == "none")
|
|
vdPar[4] = 0 ;
|
|
else if ( sLapExit == "mitre" || sLapExit == "")
|
|
vdPar[4] = -1 ;
|
|
else if ( sLapExit == "rebate") {
|
|
if ( process.child( "RebateLength") != nullptr)
|
|
vdPar[4] = std::stod( process.child( "RebateLength").text().get()) ;
|
|
else
|
|
vdPar[4] = 10.0 ; // valore di default
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail LapExit unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sShape = process.child( "Shape").text().get() ; // P14
|
|
if ( sShape == "straigth")
|
|
vdPar[12] = 1 ;
|
|
else if ( sShape == "angular" || sShape == "")
|
|
vdPar[12] = 0 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail Shape unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sProcessSide = process.child( "ProcessSide").text().get() ; // P16
|
|
if ( sProcessSide == "both" || sProcessSide == "")
|
|
vdPar[14] = 0 ;
|
|
else if ( sProcessSide == "refside")
|
|
vdPar[14] = 1 ;
|
|
else if ( sProcessSide == "oppside")
|
|
vdPar[14] = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail Shape unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadDovetailParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 138 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sOrientation = process.child( "Orientation").text().get() ;
|
|
string sCutOff = process.child( "CutOff").text().get() ;
|
|
if ( sCutOff == "")
|
|
sCutOff = "no" ; // se non ci fosse, valore di default
|
|
|
|
if( sOrientation == "end" && sCutOff == "yes")
|
|
nGroup = 1 ;
|
|
else if (sOrientation == "start" && sCutOff == "yes")
|
|
nGroup = 2 ;
|
|
else if (sOrientation == "end" && sCutOff == "no")
|
|
nGroup = 3 ;
|
|
else if (sOrientation == "start" && sCutOff == "yes")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Dovetail group not defined") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 11) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Dovetail number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Riempio i vettori dei parametri vdPar, se qualche valore non ci fosse lascio quello di default
|
|
if ( process.child( "StartX") != nullptr && process.child( "StartX").text().get() != "") // P01
|
|
vdPar[0] = std::stod( process.child( "StartX").text().get()) ;
|
|
if ( process.child( "StartY") != nullptr && process.child( "StartY").text().get() != "") // P02
|
|
vdPar[1] = std::stod( process.child( "StartY").text().get()) ;
|
|
if ( process.child( "StartDepth") != nullptr && process.child( "StartDepth").text().get() != "") // P03
|
|
vdPar[2] = std::stod( process.child( "StartDepth").text().get()) ;
|
|
if ( process.child( "Slope") != nullptr && process.child( "Slope").text().get() != "") // P09
|
|
vdPar[5] = std::stod( process.child( "Slope").text().get()) ;
|
|
if ( process.child( "HeightRefSide") != nullptr && process.child( "HeightRefSide").text().get() != "") // P11
|
|
vdPar[6] = std::stod( process.child( "HeightRefSide").text().get()) ;
|
|
if ( process.child( "HeightOppSide") != nullptr && process.child( "HeightOppSide").text().get() != "") // P12
|
|
vdPar[7] = std::stod( process.child( "HeightOppSide").text().get()) ;
|
|
if ( process.child( "Length") != nullptr && process.child( "Length").text().get() != "") // P09
|
|
vdPar[9] = std::stod( process.child( "Length").text().get()) ;
|
|
|
|
string sShape = process.child( "Shape").text().get() ; // P14
|
|
if ( sShape == "european" || sShape == "")
|
|
vdPar[8] = 0 ;
|
|
else if ( sShape == "american")
|
|
vdPar[8] = 1 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail Shape unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sLapPosition = process.child( "LapPosition").text().get() ;
|
|
if ( sLapPosition == "refedge" || sLapPosition == "")
|
|
vdPar[3] = 1 ;
|
|
else if ( sLapPosition == "oppedge")
|
|
vdPar[3] = 0 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Dovetail LapPosition unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sLapExit = process.child( "LapExit").text().get() ; // P05
|
|
if ( sLapExit == "none")
|
|
vdPar[4] = 0 ;
|
|
else if ( sLapExit == "mitre" || sLapExit == "")
|
|
vdPar[4] = -1 ;
|
|
else if ( sLapExit == "rebate") {
|
|
if ( process.child( "RebateLength") != nullptr)
|
|
vdPar[4] = std::stod( process.child( "RebateLength").text().get()) ;
|
|
else
|
|
vdPar[4] = 10.0 ; // valore di default
|
|
}
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail LapExit unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
string sProcessSide = process.child( "ProcessSide").text().get() ; // P16
|
|
if ( sProcessSide == "both" || sProcessSide == "")
|
|
vdPar[10] = 0 ;
|
|
else if ( sProcessSide == "refside")
|
|
vdPar[10] = 1 ;
|
|
else if ( sProcessSide == "oppside")
|
|
vdPar[10] = 2 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Tyrolean Dovetail Shape unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadFreeContourParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar, int& curve_counter)
|
|
{
|
|
// Identifico il processo con sigle usate nel btl
|
|
nProc = 250 ;
|
|
nSide = process.attribute( "ReferencePlaneID").as_int() ;
|
|
string sToolPosition = process.attribute( "ToolPosition").value() ;
|
|
|
|
if ( sToolPosition == "left")
|
|
nGroup = 3 ;
|
|
else if (sToolPosition == "center")
|
|
nGroup = 0 ;
|
|
else if (sToolPosition == "right")
|
|
nGroup = 4 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: Free Contour group not defined") ;
|
|
return false ;
|
|
}
|
|
|
|
// Inizializzo i vettori dei parametri
|
|
for ( pugi::xml_node_iterator it = process.begin() ; it != process.end() ; it ++ ){
|
|
|
|
// Reinizializzo i contenitori dei parametri
|
|
vnDPar.clear() ; nSPar = 0 ; vdPar.clear() ; sPar.clear() ;
|
|
bool bParamsInfoOk = m_BtlGeom.GetProcessParamInfos( nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar) ;
|
|
if ( ! bParamsInfoOk) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: BtlGeom.GetProcessParamInfos") ;
|
|
return false ;
|
|
}
|
|
if ( vdPar.size() != 11) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: FreeContour number of parameters is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
string sCounterSink = process.attribute( "CounterSink").value() ;
|
|
if ( sCounterSink == "yes")
|
|
vdPar[5] = 1 ;
|
|
else if ( sCounterSink == "no")
|
|
vdPar[5] = 0 ;
|
|
else {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Processing: FreeContour CounterSink is wrong") ;
|
|
return false ;
|
|
}
|
|
|
|
// Studio i nodi
|
|
string itName = it->name() ;
|
|
bool bContOk = true ;
|
|
if ( itName == "Contour") {
|
|
bContOk = ReadSContourParams( *it, 0, 0, nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar, curve_counter) ;
|
|
if ( ! bContOk)
|
|
return false ;
|
|
}
|
|
else if ( itName == "DualContour") {
|
|
bContOk = ReadDContourParams( *it, nGroup, nProc, nSide, vnDPar, nSPar, vdPar, sPar, curve_counter) ;
|
|
if ( ! bContOk)
|
|
return false ;
|
|
}
|
|
else {
|
|
LOG_ERROR ( GetEExLogger(), " Error reading Part Processing: FreeContour type is wrong") ;
|
|
return false ;
|
|
}
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadSContourParams( pugi::xml_node process, int nType, int nOtherId, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, string& sPar, int& curve_counter)
|
|
{
|
|
// Parametri propri del contour che non cambiano
|
|
string sDepthBounded = process.attribute( "DepthBounded").value() ;
|
|
if ( sDepthBounded == "no")
|
|
vdPar[3] = 0 ;
|
|
else
|
|
vdPar[3] = process.attribute( "Depth").as_double() ;
|
|
|
|
int contour_counter = 0 ;
|
|
for ( pugi::xml_node_iterator it = process.begin() ; it != process.end() ; it++)
|
|
contour_counter ++ ;
|
|
|
|
int i = 0 ;
|
|
|
|
for ( pugi::xml_node_iterator it = process.begin() ; it != process.end() ; it++) {
|
|
|
|
// Reinizializzo i parametri
|
|
vdPar[0] = 0.0 ; vdPar[1] = 0.0 ; vdPar[2] = 0.0 ; vdPar[6] = 0.0 ; vdPar[8] = 0.0 ; vdPar[9] = 0.0 ; vdPar[10] = 0.0 ;
|
|
vdPar[4] = process.attribute( "Inclination").as_double() ;
|
|
|
|
i++ ;
|
|
if ( i != contour_counter)
|
|
vdPar[7] = curve_counter + 1 ;
|
|
else
|
|
vdPar[7] = 0 ;
|
|
|
|
string sName = it->name() ;
|
|
|
|
// START POINT
|
|
if ( sName == "StartPoint") {
|
|
vdPar[6] = nType ;
|
|
|
|
if ( nType == 100 || nType == 101) { // salvo id del contour associato
|
|
vdPar[4] = nOtherId ;
|
|
}
|
|
|
|
if ( it->attribute( "X") == nullptr || it->attribute( "Y") == nullptr || it->attribute( "Z") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: FreeContour Contour StartPoint component missing") ;
|
|
return false ;
|
|
}
|
|
vdPar[0] = it->attribute( "X").as_double() ;
|
|
vdPar[1] = it->attribute( "Y").as_double() ;
|
|
vdPar[2] = it->attribute( "Z").as_double() ;
|
|
}
|
|
|
|
// LINE
|
|
else if ( sName == "Line") {
|
|
vdPar[6] = 1 ;
|
|
|
|
if ( it->child( "EndPoint") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: FreeContour Contour Line EndPoint missing") ;
|
|
return false ;
|
|
}
|
|
if ( it->child( "EndPoint").attribute( "X") == nullptr ||it->child( "EndPoint").attribute( "Y") == nullptr ||
|
|
it->child( "EndPoint").attribute( "Z") == nullptr){
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: FreeContour Contour Line EndPoint component missing") ;
|
|
return false ;
|
|
}
|
|
vdPar[0] = it->child( "EndPoint").attribute( "X").as_double() ;
|
|
vdPar[1] = it->child( "EndPoint").attribute( "Y").as_double() ;
|
|
vdPar[2] = it->child( "EndPoint").attribute( "Z").as_double() ;
|
|
}
|
|
|
|
// ARC
|
|
else if ( sName == "Arc") {
|
|
vdPar[6] = 2 ;
|
|
|
|
if ( it->child( "EndPoint") == nullptr || it->child( "PointOnArc") == nullptr) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: FreeContour Contour Arc EndPoint missing") ;
|
|
return false ;
|
|
}
|
|
if ( it->child( "EndPoint").attribute( "X") == nullptr ||
|
|
it->child( "EndPoint").attribute( "Y") == nullptr ||
|
|
it->child( "EndPoint").attribute( "Z") == nullptr) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: FreeContour Contour Arc end point component missing") ;
|
|
return false ;
|
|
}
|
|
vdPar[0] = it->child( "EndPoint").attribute( "X").as_double() ;
|
|
vdPar[1] = it->child( "EndPoint").attribute( "Y").as_double() ;
|
|
vdPar[2] = it->child( "EndPoint").attribute( "Z").as_double() ;
|
|
|
|
if ( it->child( "PointOnArc").attribute( "X") == nullptr ||
|
|
it->child( "PointOnArc").attribute( "Y") == nullptr ||
|
|
it->child( "PointOnArc").attribute( "Z") == nullptr) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: FreeContour Contour Arc component missing") ;
|
|
return false ;
|
|
}
|
|
vdPar[8] = it->child( "PointOnArc").attribute( "X").as_double() ;
|
|
vdPar[9] = it->child( "PointOnArc").attribute( "Y").as_double() ;
|
|
vdPar[10] = it->child( "PointOnArc").attribute( "Z").as_double() ;
|
|
|
|
}
|
|
else {
|
|
LOG_ERROR ( GetEExLogger(), " Error reading Part Process: FreeContour Contour element unknown") ;
|
|
return false ;
|
|
}
|
|
|
|
Frame3d frRef ;
|
|
// Se riferimento non � una delle facce, lo cerco fra UserReferencePlanes
|
|
if ( nSide < BTL_SIDE_FRONT || nSide > BTL_SIDE_RIGHT) {
|
|
// se non esiste, errore
|
|
if ( MapURefPlanes.find( nSide) == MapURefPlanes.end()) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: FreeContour Contour Reference Plane unknown") ;
|
|
return false ;
|
|
}
|
|
frRef = MapURefPlanes[nSide] ;
|
|
}
|
|
|
|
string sDes ;
|
|
STRVECTOR vsUAtt ;
|
|
|
|
bool bProcessOk = m_BtlGeom.AddProcess( nGroup, nProc, nSide, sDes, curve_counter, frRef, vnDPar, nSPar, vdPar, sPar, vsUAtt, 0) ;
|
|
if ( ! bProcessOk) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: BtlGeom.AddProcess error") ;
|
|
return false ;
|
|
}
|
|
curve_counter ++ ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------------------------------------------------
|
|
bool
|
|
ImportBtlx::ReadDContourParams( pugi::xml_node process, int& nGroup, int& nProc, int& nSide,
|
|
INTVECTOR& vnDPar, int& nSPar, DBLVECTOR& vdPar, std::string& sPar, int& curve_counter)
|
|
{
|
|
if ( process.child( "PrincipalContour") == nullptr || process.child( "AssociatedContour") == nullptr) {
|
|
LOG_ERROR( GetEExLogger(), " Error reading Part Process: DualContour contour missing") ;
|
|
return false ;
|
|
}
|
|
|
|
// Principal Contour
|
|
int nPrincipalId = curve_counter + 1 ;
|
|
int nPrincipalContCurves = 0 ;
|
|
|
|
// conto il numero di curve nel PrincipalContour
|
|
for ( pugi::xml_node_iterator it = process.child( "PrincipalContour").child( "Contour").begin() ;
|
|
it != process.child( "PrincipalContour").child( "Contour").end() ; it ++)
|
|
nPrincipalContCurves ++ ;
|
|
|
|
bool bContourOk = ReadSContourParams( process.child( "PrincipalContour"), 100, curve_counter + nPrincipalContCurves,
|
|
nGroup, nProc, nSide, vnDPar, nSPar,vdPar, sPar, curve_counter) ;
|
|
if ( ! bContourOk)
|
|
return false ;
|
|
|
|
// Associated Contour
|
|
bContourOk = ReadSContourParams( process.child( "AssociatedContour"), 101, nPrincipalId,
|
|
nGroup, nProc, nSide, vnDPar, nSPar,vdPar, sPar, curve_counter) ;
|
|
if ( ! bContourOk)
|
|
return false ;
|
|
|
|
return true ;
|
|
} |