Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib5 Public Class BTLPartM '' Feature a cui appartiene il parametro 'Public m_BTLStructureM As BTLStructureM 'Public ReadOnly Property BTLStructureM As BTLStructureM ' Get ' Return m_BTLStructureM ' End Get 'End Property ' Id geometrico del pezzo Public m_nPartId As Integer Public ReadOnly Property nPartId As Integer Get Return m_nPartId End Get End Property Public WriteOnly Property SetPartId As Integer Set(value As Integer) m_nPartId = value End Set End Property ' Info del pezzo Public m_nPDN As Integer Public Property nPDN As Integer Get Return m_nPDN End Get Set(value As Integer) m_nPDN = value End Set End Property Public m_bDO As Boolean Public Overridable Property bDO As Boolean Get Return m_bDO End Get Set(value As Boolean) m_bDO = value End Set End Property Public m_sNAM As String Public Overridable Property sNAM As String Get Return m_sNAM End Get Set(value As String) m_sNAM = value End Set End Property Public m_dBtlL As Double Public Property dBtlL As Double Get Return m_dBtlL End Get Set(value As Double) m_dBtlL = value End Set End Property Public m_dBtlW As Double Public Property dBtlW As Double Get Return m_dBtlW End Get Set(value As Double) m_dBtlW = value End Set End Property Public m_dBtlH As Double Public Property dBtlH As Double Get Return m_dBtlH End Get Set(value As Double) m_dBtlH = value End Set End Property #Region "Parametri pezzo" Public m_nSINGLEMEMBERNUM As Integer Public Property nSINGLEMEMBERNUM As Integer Get Return m_nSINGLEMEMBERNUM End Get Set(value As Integer) m_nSINGLEMEMBERNUM = value End Set End Property Public m_sASSEMBLYNUM As String Public Property sASSEMBLYNUM As String Get Return m_sASSEMBLYNUM End Get Set(value As String) m_sASSEMBLYNUM = value End Set End Property Public m_nORDERNUM As Integer Public Property nORDERNUM As Integer Get Return m_nORDERNUM End Get Set(value As Integer) m_nORDERNUM = value End Set End Property Public m_sDESIGN As String Public Property sDESIGN As String Get Return m_sDESIGN End Get Set(value As String) m_sDESIGN = value End Set End Property Public m_sANNOT As String Public Property sANNOT As String Get Return m_sANNOT End Get Set(value As String) m_sANNOT = value End Set End Property Public m_sSTOREY As String Public Property sSTOREY As String Get Return m_sSTOREY End Get Set(value As String) m_sSTOREY = value End Set End Property Public m_sGROUP As String Public Property sGROUP As String Get Return m_sGROUP End Get Set(value As String) m_sGROUP = value End Set End Property Public m_sPACKAGE As String Public Property sPACKAGE As String Get Return m_sPACKAGE End Get Set(value As String) m_sPACKAGE = value End Set End Property Public m_sMATERIAL As String Public Property sMATERIAL As String Get Return m_sMATERIAL End Get Set(value As String) m_sMATERIAL = value End Set End Property Public m_sTIMBERGRADE As String Public Property sTIMBERGRADE As String Get Return m_sTIMBERGRADE End Get Set(value As String) m_sTIMBERGRADE = value End Set End Property Public m_sQUALITYGRADE As String Public Property sQUALITYGRADE As String Get Return m_sQUALITYGRADE End Get Set(value As String) m_sQUALITYGRADE = value End Set End Property Public m_colCOLOR As Color3d Public Property colCOLOR As Color3d Get Return m_colCOLOR End Get Set(value As Color3d) m_colCOLOR = value End Set End Property Public m_dPLANINGLEN As Double Public Property dPLANINGLEN As Double Get Return m_dPLANINGLEN End Get Set(value As Double) m_dPLANINGLEN = value End Set End Property Public m_dSTARTOFFSET As Double Public Property dSTARTOFFSET As Double Get Return m_dSTARTOFFSET End Get Set(value As Double) m_dSTARTOFFSET = value End Set End Property Public m_dENDOFFSET As Double Public Property dENDOFFSET As Double Get Return m_dENDOFFSET End Get Set(value As Double) m_dENDOFFSET = value End Set End Property Public m_ocUID As New ObservableCollection(Of Integer) Public ReadOnly Property ocUID As ObservableCollection(Of Integer) Get Return m_ocUID End Get End Property Public m_SelUID As Integer Public Property SelUID As Integer Get Return m_SelUID End Get Set(value As Integer) m_SelUID = value End Set End Property Public m_refTransfList As New List(Of Frame3d) Public m_refTransf As Frame3d Public Property refTransfList As List(Of Frame3d) Get Return m_refTransfList End Get Set(value As List(Of Frame3d)) m_refTransfList = value End Set End Property Public Property refTransf As Frame3d Get Return m_refTransf End Get Set(value As Frame3d) m_refTransf = value End Set End Property Public m_ocCAMBERSIDE As New ObservableCollection(Of Integer)({1, 2, 3, 4}) Public ReadOnly Property ocCAMBERSIDE As ObservableCollection(Of Integer) Get Return m_ocCAMBERSIDE End Get End Property Public m_SelCAMBERSIDE As Integer Public Property SelCAMBERSIDE As Integer Get Return m_SelCAMBERSIDE End Get Set(value As Integer) m_SelCAMBERSIDE = value End Set End Property Public m_dCamberLen1 As Double Public m_dCamberLen2 As Double Public m_dCamberLen3 As Double Public m_dCamberCross3 As Double Public m_ocREFSIDEFIXCLAMP As New ObservableCollection(Of Object)({New IdNameStruct(PartOffset_RefSideFixClamp.INACTIVE, EgtMsg(61665)), New IdNameStruct(PartOffset_RefSideFixClamp.REFSIDE1, EgtMsg(61687)), New IdNameStruct(PartOffset_RefSideFixClamp.REFSIDE2, EgtMsg(61688)), New IdNameStruct(PartOffset_RefSideFixClamp.REFSIDE3, EgtMsg(61689)), New IdNameStruct(PartOffset_RefSideFixClamp.REFSIDE4, EgtMsg(61690))}) Public ReadOnly Property ocREFSIDEFIXCLAMP As ObservableCollection(Of Object) Get Return m_ocREFSIDEFIXCLAMP End Get End Property Public m_SelREFSIDEFIXCLAMP As Integer Public Property SelREFSIDEFIXCLAMP As Integer Get Return m_SelREFSIDEFIXCLAMP End Get Set(value As Integer) m_SelREFSIDEFIXCLAMP = value End Set End Property Public m_dPartOffsetSide1 As Double Public m_dPartOffsetSide2 As Double Public m_dPartOffsetSide3 As Double Public m_dPartOffsetSide4 As Double Public m_ocPROCESSINGQUALITY As New ObservableCollection(Of Object)({New IdNameStruct(ProcessingQuality.AUTOMATIC, EgtMsg(61658)), New IdNameStruct(ProcessingQuality.VISIBLE, EgtMsg(61659)), New IdNameStruct(ProcessingQuality.FAST, EgtMsg(61660))}) Public ReadOnly Property ocPROCESSINGQUALITY As ObservableCollection(Of Object) Get Return m_ocPROCESSINGQUALITY End Get End Property Public m_SelPROCESSINGQUALITY As Integer Public Property SelPROCESSINGQUALITY As Integer Get Return m_SelPROCESSINGQUALITY End Get Set(value As Integer) m_SelPROCESSINGQUALITY = value End Set End Property Public m_ocRECESS As New ObservableCollection(Of Object)({New IdNameStruct(Recess.AUTOMATIC, EgtMsg(61658)), New IdNameStruct(Recess.MANUAL, EgtMsg(61661))}) Public ReadOnly Property ocRECESS As ObservableCollection(Of Object) Get Return m_ocRECESS End Get End Property Public m_SelRECESS As Integer Public Property SelRECESS As Integer Get Return m_SelRECESS End Get Set(value As Integer) m_SelRECESS = value End Set End Property Public m_ocSTOREYTYPE As New ObservableCollection(Of Object)({New IdNameStruct(StoreyType.CEILING, EgtMsg(61662)), New IdNameStruct(StoreyType.ROOF, EgtMsg(61663)), New IdNameStruct(StoreyType.WALL, EgtMsg(61664))}) Public ReadOnly Property ocSTOREYTYPE As ObservableCollection(Of Object) Get Return m_ocSTOREYTYPE End Get End Property Public m_SelSTOREYTYPE As Integer Public Property SelSTOREYTYPE As Integer Get Return m_SelSTOREYTYPE End Get Set(value As Integer) m_SelSTOREYTYPE = value End Set End Property Public m_sELEMENTNUM As String Public Property sELEMENTNUM As String Get Return m_sELEMENTNUM End Get Set(value As String) m_sELEMENTNUM = value End Set End Property Public m_nLAYER As Integer Public Property nLAYER As Integer Get Return m_nLAYER End Get Set(value As Integer) m_nLAYER = value End Set End Property Public m_sMODULENUM As String Public Property sMODULENUM As String Get Return m_sMODULENUM End Get Set(value As String) m_sMODULENUM = value End Set End Property Public m_sCOMMENT As String Public Property sCOMMENT As String Get Return m_sCOMMENT End Get Set(value As String) m_sCOMMENT = value End Set End Property Public m_refGrainDir As Vector3d Public Property refGrainDir As Vector3d Get Return m_refGrainDir End Get Set(value As Vector3d) m_refGrainDir = value End Set End Property Public m_bGRAINDIRALIGN As Boolean Public Property bGRAINDIRALIGN As Boolean Get Return m_bGRAINDIRALIGN End Get Set(value As Boolean) m_bGRAINDIRALIGN = value End Set End Property Public m_ocREFSIDE As New ObservableCollection(Of Integer)({1, 2, 3, 4}) Public ReadOnly Property ocREFSIDE As ObservableCollection(Of Integer) Get Return m_ocREFSIDE End Get End Property Public m_SelREFSIDE As Integer Public Property SelREFSIDE As Integer Get Return m_SelREFSIDE End Get Set(value As Integer) m_SelREFSIDE = value End Set End Property Public m_bREFSIDEALIGN As Boolean Public Property bREFSIDEALIGN As Boolean Get Return m_bREFSIDEALIGN End Get Set(value As Boolean) m_bREFSIDEALIGN = value End Set End Property Public m_ocALIGNLOCATION As New ObservableCollection(Of Object)({New IdNameStruct(AlignmentLocation.INACTIV, EgtMsg(61665)), New IdNameStruct(AlignmentLocation.BR, EgtMsg(61666)), New IdNameStruct(AlignmentLocation.TR, EgtMsg(61667)), New IdNameStruct(AlignmentLocation.BA, EgtMsg(61668)), New IdNameStruct(AlignmentLocation.TA, EgtMsg(61669)), New IdNameStruct(AlignmentLocation.HC, EgtMsg(61670)), New IdNameStruct(AlignmentLocation.VC, EgtMsg(61671)), New IdNameStruct(AlignmentLocation.AC, EgtMsg(61672))}) Public ReadOnly Property ocALIGNLOCATION As ObservableCollection(Of Object) Get Return m_ocALIGNLOCATION End Get End Property Public m_SelALIGNLOCATION As Integer Public Property SelALIGNLOCATION As Integer Get Return m_SelALIGNLOCATION End Get Set(value As Integer) m_SelALIGNLOCATION = value End Set End Property Public m_ocALIGNENDTYPE As New ObservableCollection(Of Object)({New IdNameStruct(AlignmentEndtype.R, EgtMsg(61673)), New IdNameStruct(AlignmentEndtype.A, EgtMsg(61674)), New IdNameStruct(AlignmentEndtype.D, EgtMsg(61675))}) Public ReadOnly Property ocALIGNENDTYPE As ObservableCollection(Of Object) Get Return m_ocALIGNENDTYPE End Get End Property Public m_SelALIGNENDTYPE As Integer Public Property SelALIGNENDTYPE As Integer Get Return m_SelALIGNENDTYPE End Get Set(value As Integer) m_SelALIGNENDTYPE = value End Set End Property Public m_ocMATERIALTYPEGRP As New ObservableCollection(Of Object)({New IdNameStruct(MaterialType.INACTIV, EgtMsg(61665)), New IdNameStruct(MaterialType.BA, EgtMsg(61676)), New IdNameStruct(MaterialType.CL, EgtMsg(61677)), New IdNameStruct(MaterialType.MT, EgtMsg(61678)), New IdNameStruct(MaterialType.ME_, EgtMsg(61679)), New IdNameStruct(MaterialType.GB, EgtMsg(61680)), New IdNameStruct(MaterialType.GF, EgtMsg(61681)), New IdNameStruct(MaterialType.IN_, EgtMsg(61682)), New IdNameStruct(MaterialType.SH, EgtMsg(61683)), New IdNameStruct(MaterialType.FB, EgtMsg(61684)), New IdNameStruct(MaterialType.PB, EgtMsg(61685)), New IdNameStruct(MaterialType.PL, EgtMsg(61686))}) Public ReadOnly Property ocMATERIALTYPEGRP As ObservableCollection(Of Object) Get Return m_ocMATERIALTYPEGRP End Get End Property Public m_SelMATERIALTYPEGRP As Integer Public Property SelMATERIALTYPEGRP As Integer Get Return m_SelMATERIALTYPEGRP End Get Set(value As Integer) m_SelMATERIALTYPEGRP = value End Set End Property Public m_sMATERIALTYPESPEC As String Public Property sMATERIALTYPESPEC As String Get Return m_sMATERIALTYPESPEC End Get Set(value As String) m_sMATERIALTYPESPEC = value End Set End Property #End Region ' Parametri pezzo ' numero di pezzi da fare da BTL Public m_nCNT As Integer Public Property nCNT As Integer Get Return m_nCNT End Get Set(value As Integer) m_nCNT = value End Set End Property ' numero di pezzi aggiunti (da fare in piu' rispetto a CNT) Public m_nADDED As Integer Public Property nADDED As Integer Get Return m_nADDED End Get Set(value As Integer) If EgtSetInfo(nPartId, BTL_PRT_ADDED, value) Then m_nADDED = value End If End Set End Property ' numero di pezzi inseriti nelle barre (in PROD), quindi numero di duplo del pezzo Public ReadOnly Property nINPROD As Integer Get Dim INPROD As Integer = 0 EgtDuploCount(m_nPartId, INPROD) Return INPROD End Get End Property ' numero di pezzi gia' prodotti Public m_nDONE As Integer Public Property nDONE As Integer Get Return m_nDONE End Get Set(value As Integer) m_nDONE = value End Set End Property Private m_nINVERTED As Integer Public Property nINVERTED As Integer Get Return m_nINVERTED End Get Set(value As Integer) m_nINVERTED = value End Set End Property Private m_nROTATED As Integer Public Property nROTATED As Integer Get Return m_nROTATED End Get Set(value As Integer) m_nROTATED = value End Set End Property Private m_nCALC_ERR As Integer Public Property nCALC_ERR As Integer Get Return m_nCALC_ERR End Get Set(value As Integer) m_nCALC_ERR = value End Set End Property Private m_nCALC_FALL As Integer Public Property nCALC_FALL As Integer Get Return m_nCALC_FALL End Get Set(value As Integer) m_nCALC_FALL = value End Set End Property Private m_sCALC_MSG As String Public Property sCALC_MSG As String Get Return m_sCALC_MSG End Get Set(value As String) m_sCALC_MSG = value End Set End Property Public m_nCALC_ROT As Integer Public Property nCALC_ROT As Integer Get Return m_nCALC_ROT End Get Set(value As Integer) m_nCALC_ROT = value End Set End Property Public m_nCALC_TIME As Integer Public Property nCALC_TIME As Integer Get Return m_nCALC_TIME End Get Set(value As Integer) m_nCALC_TIME = value End Set End Property Public m_nGlobalState As CalcStates = -1 Public Property nGlobalState As CalcStates Get Return m_nGlobalState End Get Set(value As CalcStates) m_nGlobalState = value End Set End Property Private m_nCALC_GlobalERR As Integer Public Property nCALC_GlobalERR As Integer Get Return m_nCALC_GlobalERR End Get Set(value As Integer) m_nCALC_GlobalERR = value End Set End Property Public m_nState As CalcStates = -1 Public Property nState As CalcStates Get Return m_nState End Get Set(value As CalcStates) m_nState = value End Set End Property ' lista delle feature del pezzo Public m_BTLFeatureMList As List(Of BTLFeatureM) Public Property BTLFeatureMList As List(Of BTLFeatureM) Get Return m_BTLFeatureMList End Get Set(value As List(Of BTLFeatureM)) m_BTLFeatureMList = value End Set End Property #Region "CONSTRUCTOR" Protected Sub New() End Sub Public Shared Function CreateNewBTLPart() As BTLPartM Return New BTLPartM End Function Public Shared Function CreateBTLPart(nPartId As Integer) As BTLPartM Dim NewBTLPart As New BTLPartM NewBTLPart.m_nPartId = nPartId ' leggo info pezzo Dim sValArray() As String Dim sValue As String = String.Empty Dim nValue As Integer = 0 EgtGetInfo(nPartId, BTL_PRT_PDN, NewBTLPart.m_nPDN) Dim nDO As Integer = 1 If EgtGetInfo(nPartId, BTL_PRT_DO, nDO) Then NewBTLPart.m_bDO = (nDO <> 0) Else NewBTLPart.m_bDO = True End If EgtGetInfo(nPartId, BTL_PRT_NAM, NewBTLPart.m_sNAM) EgtGetInfo(nPartId, BTL_PRT_L, NewBTLPart.m_dBtlL) EgtGetInfo(nPartId, BTL_PRT_W, NewBTLPart.m_dBtlW) EgtGetInfo(nPartId, BTL_PRT_H, NewBTLPart.m_dBtlH) EgtGetInfo(nPartId, BTL_PRT_CNT, NewBTLPart.m_nCNT) EgtGetInfo(nPartId, BTL_PRT_ADDED, NewBTLPart.m_nADDED) EgtGetInfo(nPartId, BTL_PRT_ASSEMBLYNUM, NewBTLPart.m_sASSEMBLYNUM) EgtGetInfo(nPartId, BTL_PRT_ORDERNUM, NewBTLPart.m_nORDERNUM) EgtGetInfo(nPartId, BTL_PRT_DESIGNATION, NewBTLPart.m_sDESIGN) EgtGetInfo(nPartId, BTL_PRT_ANNOTATION, NewBTLPart.m_sANNOT) EgtGetInfo(nPartId, BTL_PRT_STOREY, NewBTLPart.m_sSTOREY) EgtGetInfo(nPartId, BTL_PRT_GROUP, NewBTLPart.m_sGROUP) EgtGetInfo(nPartId, BTL_PRT_PACKAGE, NewBTLPart.m_sPACKAGE) EgtGetInfo(nPartId, BTL_PRT_TIMBERGRADE, NewBTLPart.m_sTIMBERGRADE) EgtGetInfo(nPartId, BTL_PRT_QUALITYGRADE, NewBTLPart.m_sQUALITYGRADE) EgtGetInfo(nPartId, BTL_PRT_COLOUR, sValue) NewBTLPart.m_colCOLOR.FromString(sValue) EgtGetInfo(nPartId, BTL_PRT_PLANINGLENGTH, NewBTLPart.m_dPLANINGLEN) EgtGetInfo(nPartId, BTL_PRT_STARTOFFSET, NewBTLPart.m_dSTARTOFFSET) EgtGetInfo(nPartId, BTL_PRT_ENDOFFSET, NewBTLPart.m_dENDOFFSET) Dim ind As Integer = 1 While EgtGetInfo(nPartId, BTL_PRT_UID & ind, nValue) NewBTLPart.ocUID.Add(nValue) EgtGetInfo(nPartId, BTL_PRT_TRANSFORMATION & ind, sValue) NewBTLPart.m_refTransf = New Frame3d Dim ptOri As New Point3d Dim vtVersX As New Vector3d Dim vtVersY As New Vector3d sValArray = sValue.Split({","}, StringSplitOptions.RemoveEmptyEntries) If sValArray.Count() >= 9 Then StringToLen(sValArray(0), ptOri.x) StringToLen(sValArray(1), ptOri.y) StringToLen(sValArray(2), ptOri.z) StringToDouble(sValArray(3), vtVersX.x) StringToDouble(sValArray(4), vtVersX.y) StringToDouble(sValArray(5), vtVersX.z) StringToDouble(sValArray(6), vtVersY.x) StringToDouble(sValArray(7), vtVersY.y) StringToDouble(sValArray(8), vtVersY.z) NewBTLPart.m_refTransf.ChangeOrigin(ptOri) NewBTLPart.m_refTransf.Setup(ptOri, ptOri + vtVersX, ptOri + vtVersY) End If NewBTLPart.refTransfList.Add(NewBTLPart.m_refTransf) ind = ind + 1 End While EgtGetInfo(nPartId, BTL_PRT_CAMBER, sValue) sValArray = sValue.Split(New String() {": ", " P"}, StringSplitOptions.RemoveEmptyEntries) If sValArray.Count() >= 5 Then StringToLen(sValArray(3), NewBTLPart.m_dCamberLen1) StringToLen(sValArray(5), NewBTLPart.m_dCamberLen2) StringToLen(sValArray(7), NewBTLPart.m_dCamberLen3) StringToLen(sValArray(9), NewBTLPart.m_dCamberCross3) End If Dim pFrom As Integer = sValue.IndexOf("SIDE: ") + "SIDE: ".Length Dim pTo As Integer = sValue.LastIndexOf(" P01") If pTo >= 0 Then nValue = CInt(sValue.Substring(pFrom, pTo - pFrom)) NewBTLPart.m_SelCAMBERSIDE = NewBTLPart.ocCAMBERSIDE.IndexOf(CInt(sValue.Substring(pFrom, pTo - pFrom))) End If EgtGetInfo(nPartId, BTL_PRT_PARTOFFSET, sValue) sValArray = sValue.Split(New String() {": ", " P"}, StringSplitOptions.RemoveEmptyEntries) If sValArray.Count() >= 5 Then StringToLen(sValArray(3), NewBTLPart.m_dPartOffsetSide1) StringToLen(sValArray(5), NewBTLPart.m_dPartOffsetSide2) StringToLen(sValArray(7), NewBTLPart.m_dPartOffsetSide3) StringToLen(sValArray(9), NewBTLPart.m_dPartOffsetSide4) End If pFrom = sValue.IndexOf("P04: ") + "P04: ".Length pTo = sValue.LastIndexOf(" P11") If pTo >= 0 Then NewBTLPart.m_SelREFSIDEFIXCLAMP = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue.Substring(pFrom, pTo - pFrom), NewBTLPart.ocREFSIDEFIXCLAMP), NewBTLPart.ocREFSIDEFIXCLAMP) End If EgtGetInfo(nPartId, BTL_PRT_PROCESSINGQUALITY, sValue) NewBTLPart.m_SelPROCESSINGQUALITY = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue, NewBTLPart.ocPROCESSINGQUALITY), NewBTLPart.ocPROCESSINGQUALITY) EgtGetInfo(nPartId, BTL_PRT_RECESS, sValue) NewBTLPart.m_SelRECESS = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue, NewBTLPart.ocRECESS), NewBTLPart.ocRECESS) EgtGetInfo(nPartId, BTL_PRT_STOREYTYPE, sValue) NewBTLPart.m_SelSTOREYTYPE = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue, NewBTLPart.ocSTOREYTYPE), NewBTLPart.ocSTOREYTYPE) EgtGetInfo(nPartId, BTL_PRT_ELEMENTNUM, NewBTLPart.m_sELEMENTNUM) EgtGetInfo(nPartId, BTL_PRT_LAYER, NewBTLPart.m_nLAYER) EgtGetInfo(nPartId, BTL_PRT_MODULENUM, NewBTLPart.m_sMODULENUM) 'EgtGetInfo(nPartId, BTL_PRT_USERATTRIBUTE, m_sUSERATTRIBUTE) EgtGetInfo(nPartId, BTL_PRT_COMMENT, NewBTLPart.m_sCOMMENT) EgtGetInfo(nPartId, BTL_PRT_GRAINDIR, sValue) NewBTLPart.m_refGrainDir = New Vector3d sValArray = sValue.Split(New String() {",", ";"}, StringSplitOptions.RemoveEmptyEntries) If sValArray.Count() >= 4 Then StringToDouble(sValArray(0), NewBTLPart.m_refGrainDir.x) StringToDouble(sValArray(1), NewBTLPart.m_refGrainDir.y) StringToDouble(sValArray(2), NewBTLPart.m_refGrainDir.z) NewBTLPart.m_bGRAINDIRALIGN = (CInt(sValArray(3)) = 1) End If EgtGetInfo(nPartId, BTL_PRT_REFSIDE, sValue) sValArray = sValue.Split({";"}, StringSplitOptions.RemoveEmptyEntries) If sValArray.Count() >= 2 Then NewBTLPart.m_SelREFSIDE = NewBTLPart.ocREFSIDE.IndexOf(CInt(sValArray(0))) NewBTLPart.m_bREFSIDEALIGN = (CInt(sValArray(1)) = 1) End If EgtGetInfo(nPartId, BTL_PRT_ALIGNMENT, sValue) sValArray = sValue.Split({":"}, StringSplitOptions.RemoveEmptyEntries) If sValArray.Count() >= 2 Then NewBTLPart.m_SelALIGNLOCATION = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValArray(0), NewBTLPart.ocALIGNLOCATION), NewBTLPart.ocALIGNLOCATION) NewBTLPart.m_SelALIGNENDTYPE = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValArray(1).Trim(), NewBTLPart.ocALIGNENDTYPE), NewBTLPart.ocALIGNENDTYPE) End If EgtGetInfo(nPartId, BTL_PRT_MATERIALTYPE, sValue) sValArray = sValue.Split({":"}, StringSplitOptions.RemoveEmptyEntries) If sValArray.Count() >= 1 Then NewBTLPart.m_SelMATERIALTYPEGRP = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValArray(0), NewBTLPart.ocMATERIALTYPEGRP), NewBTLPart.ocMATERIALTYPEGRP) If sValArray.Count() >= 2 Then NewBTLPart.m_sMATERIALTYPESPEC = sValArray(1).Trim() End If If Not EgtGetInfo(nPartId, BTL_PRT_ROTATED, NewBTLPart.m_nROTATED) Then NewBTLPart.m_nROTATED = 0 End If If Not EgtGetInfo(nPartId, BTL_PRT_INVERTED, NewBTLPart.m_nINVERTED) Then NewBTLPart.m_nINVERTED = 0 End If EgtGetInfo(nPartId, BTL_PRT_MATERIAL, NewBTLPart.m_sMATERIAL) ' Leggo outline e features NewBTLPart.m_BTLFeatureMList = LoadFeatures(nPartId, NewBTLPart) ' leggo calc error Dim nErr As Integer = 0 Dim nRot As Integer = 0 Dim nFall As Integer = 0 Dim sMsg As String = "" Dim bCalc As Boolean = False bCalc = EgtGetInfo(nPartId, ITG_PROJ_ERR, nErr) EgtGetInfo(nPartId, ITG_PROJ_ROT, nRot) EgtGetInfo(nPartId, ITG_PROJ_FALL, nFall) EgtGetInfo(nPartId, ITG_PROJ_MSG, sMsg) If Not bCalc Then NewBTLPart.m_nState = CalcStates.NOTCALCULATED NewBTLPart.m_nCALC_ERR = 0 NewBTLPart.m_nCALC_ROT = 0 NewBTLPart.m_nCALC_FALL = 0 NewBTLPart.m_sCALC_MSG = "" Else NewBTLPart.m_nCALC_ERR = nErr NewBTLPart.m_nCALC_ROT = nRot NewBTLPart.m_nCALC_FALL = nFall NewBTLPart.m_sCALC_MSG = sMsg Select Case nErr Case 0 NewBTLPart.nState = CalcStates.OK Case 22 NewBTLPart.nState = CalcStates.COLLISION Case 17, 19 NewBTLPart.nState = CalcStates.WARNING Case < 0 NewBTLPart.nState = CalcStates.INFO Case > 0 NewBTLPart.nState = CalcStates.ERROR_ End Select End If EgtGetInfo(nPartId, ITG_PROJ_TIME, NewBTLPart.m_nCALC_TIME) Return NewBTLPart End Function Private Shared Function LoadFeatures(nPartId As Integer, NewBTLPart As BTLPartM) As List(Of BTLFeatureM) Dim TempList As New List(Of BTLFeatureM) ' Leggo outline Dim nOutlineLayerId As Integer = EgtGetFirstNameInGroup(nPartId, OUTLINE) Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayerId) While nOutlineId <> GDB_ID.NULL ' verifico che sia una feature Dim nGRP As Integer If EgtGetInfo(nOutlineId, BTL_FTR_GRP, nGRP) Then ' creo la feature TempList.Add(BTLFeatureM.CreateBTLFeature(NewBTLPart, nOutlineId)) End If nOutlineId = EgtGetNext(nOutlineId) End While ' Leggo feature Dim nProcessingId As Integer = EgtGetFirstNameInGroup(nPartId, PROCESSINGS) Dim nFeatureId As Integer = EgtGetFirstInGroup(nProcessingId) While nFeatureId <> GDB_ID.NULL ' verifico che sia una feature Dim nGRP As Integer If EgtGetInfo(nFeatureId, BTL_FTR_GRP, nGRP) AndAlso Not EgtExistsInfo(nFeatureId, BTL_FTR_MAINID) Then ' creo la feature Dim NewFeature As BTLFeatureM = BTLFeatureM.CreateBTLFeature(NewBTLPart, nFeatureId) TempList.Add(NewFeature) ' aggiorno Id feature perchè potrebbe essere stata ricalcolata nFeatureId = NewFeature.nFeatureId End If nFeatureId = EgtGetNext(nFeatureId) End While Return TempList End Function 'Sub New(ParentStructure As BTLStructureVM, nPartId As Integer) ' MyBase.New(ParentStructure, nPartId) ' ' leggo info pezzo ' Dim sValArray() As String ' Dim sValue As String = String.Empty ' Dim nValue As Integer = 0 ' EgtGetInfo(nPartId, BTL_PRT_PDN, nPDN) ' Dim nDO As Integer = 1 ' If EgtGetInfo(nPartId, BTL_PRT_DO, nDO) Then ' m_bDO = (nDO <> 0) ' Else ' m_bDO = True ' End If ' EgtGetInfo(nPartId, BTL_PRT_NAM, m_sNAM) ' EgtGetInfo(nPartId, BTL_PRT_L, m_dL) ' EgtGetInfo(nPartId, BTL_PRT_W, m_dW) ' EgtGetInfo(nPartId, BTL_PRT_H, m_dH) ' EgtGetInfo(nPartId, BTL_PRT_CNT, m_nCNT) ' EgtGetInfo(nPartId, BTL_PRT_ASSEMBLYNUM, m_sASSEMBLYNUM) ' EgtGetInfo(nPartId, BTL_PRT_ORDERNUM, m_nORDERNUM) ' EgtGetInfo(nPartId, BTL_PRT_DESIGNATION, m_sDESIGN) ' EgtGetInfo(nPartId, BTL_PRT_ANNOTATION, m_sANNOT) ' EgtGetInfo(nPartId, BTL_PRT_STOREY, m_sSTOREY) ' EgtGetInfo(nPartId, BTL_PRT_GROUP, m_sGROUP) ' EgtGetInfo(nPartId, BTL_PRT_PACKAGE, m_sPACKAGE) ' EgtGetInfo(nPartId, BTL_PRT_TIMBERGRADE, m_sTIMBERGRADE) ' EgtGetInfo(nPartId, BTL_PRT_QUALITYGRADE, m_sQUALITYGRADE) ' EgtGetInfo(nPartId, BTL_PRT_COLOUR, sValue) ' m_colCOLOR.FromString(sValue) ' EgtGetInfo(nPartId, BTL_PRT_PLANINGLENGTH, m_dPLANINGLEN) ' EgtGetInfo(nPartId, BTL_PRT_STARTOFFSET, m_dSTARTOFFSET) ' EgtGetInfo(nPartId, BTL_PRT_ENDOFFSET, m_dENDOFFSET) ' Dim ind As Integer = 1 ' While EgtGetInfo(nPartId, BTL_PRT_UID & ind, nValue) ' ocUID.Add(nValue) ' EgtGetInfo(nPartId, BTL_PRT_TRANSFORMATION & ind, sValue) ' m_refTransf = New Frame3d ' Dim ptOri As New Point3d ' Dim vtVersX As New Vector3d ' Dim vtVersY As New Vector3d ' sValArray = sValue.Split({","}, StringSplitOptions.RemoveEmptyEntries) ' If sValArray.Count() >= 9 Then ' StringToLen(sValArray(0), ptOri.x) ' StringToLen(sValArray(1), ptOri.y) ' StringToLen(sValArray(2), ptOri.z) ' StringToDouble(sValArray(3), vtVersX.x) ' StringToDouble(sValArray(4), vtVersX.y) ' StringToDouble(sValArray(5), vtVersX.z) ' StringToDouble(sValArray(6), vtVersY.x) ' StringToDouble(sValArray(7), vtVersY.y) ' StringToDouble(sValArray(8), vtVersY.z) ' m_refTransf.ChangeOrigin(ptOri) ' m_refTransf.Setup(ptOri, ptOri + vtVersX, ptOri + vtVersY) ' End If ' refTransfList.Add(m_refTransf) ' ind = ind + 1 ' End While ' EgtGetInfo(nPartId, BTL_PRT_CAMBER, sValue) ' sValArray = sValue.Split(New String() {": ", " P"}, StringSplitOptions.RemoveEmptyEntries) ' If sValArray.Count() >= 5 Then ' StringToLen(sValArray(3), m_dCamberLen1) ' StringToLen(sValArray(5), m_dCamberLen2) ' StringToLen(sValArray(7), m_dCamberLen3) ' StringToLen(sValArray(9), m_dCamberCross3) ' End If ' Dim pFrom As Integer = sValue.IndexOf("SIDE: ") + "SIDE: ".Length ' Dim pTo As Integer = sValue.LastIndexOf(" P01") ' If pTo >= 0 Then ' nValue = CInt(sValue.Substring(pFrom, pTo - pFrom)) ' m_SelCAMBERSIDE = ocCAMBERSIDE.IndexOf(CInt(sValue.Substring(pFrom, pTo - pFrom))) ' End If ' EgtGetInfo(nPartId, BTL_PRT_PARTOFFSET, sValue) ' sValArray = sValue.Split(New String() {": ", " P"}, StringSplitOptions.RemoveEmptyEntries) ' If sValArray.Count() >= 5 Then ' StringToLen(sValArray(3), m_dPartOffsetSide1) ' StringToLen(sValArray(5), m_dPartOffsetSide2) ' StringToLen(sValArray(7), m_dPartOffsetSide3) ' StringToLen(sValArray(9), m_dPartOffsetSide4) ' End If ' pFrom = sValue.IndexOf("P04: ") + "P04: ".Length ' pTo = sValue.LastIndexOf(" P11") ' If pTo >= 0 Then ' m_SelREFSIDEFIXCLAMP = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue.Substring(pFrom, pTo - pFrom), ocREFSIDEFIXCLAMP), ocREFSIDEFIXCLAMP) ' End If ' EgtGetInfo(nPartId, BTL_PRT_PROCESSINGQUALITY, sValue) ' m_SelPROCESSINGQUALITY = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue, ocPROCESSINGQUALITY), ocPROCESSINGQUALITY) ' EgtGetInfo(nPartId, BTL_PRT_RECESS, sValue) ' m_SelRECESS = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue, ocRECESS), ocRECESS) ' EgtGetInfo(nPartId, BTL_PRT_STOREYTYPE, sValue) ' m_SelSTOREYTYPE = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValue, ocSTOREYTYPE), ocSTOREYTYPE) ' EgtGetInfo(nPartId, BTL_PRT_ELEMENTNUM, m_sELEMENTNUM) ' EgtGetInfo(nPartId, BTL_PRT_LAYER, m_nLAYER) ' EgtGetInfo(nPartId, BTL_PRT_MODULENUM, m_sMODULENUM) ' 'EgtGetInfo(nPartId, BTL_PRT_USERATTRIBUTE, m_sUSERATTRIBUTE) ' EgtGetInfo(nPartId, BTL_PRT_COMMENT, m_sCOMMENT) ' EgtGetInfo(nPartId, BTL_PRT_GRAINDIR, sValue) ' m_refGrainDir = New Vector3d ' sValArray = sValue.Split(New String() {",", ";"}, StringSplitOptions.RemoveEmptyEntries) ' If sValArray.Count() >= 4 Then ' StringToDouble(sValArray(0), m_refGrainDir.x) ' StringToDouble(sValArray(1), m_refGrainDir.y) ' StringToDouble(sValArray(2), m_refGrainDir.z) ' m_bGRAINDIRALIGN = (CInt(sValArray(3)) = 1) ' End If ' EgtGetInfo(nPartId, BTL_PRT_REFSIDE, sValue) ' sValArray = sValue.Split({";"}, StringSplitOptions.RemoveEmptyEntries) ' If sValArray.Count() >= 2 Then ' m_SelREFSIDE = ocREFSIDE.IndexOf(CInt(sValArray(0))) ' m_bREFSIDEALIGN = (CInt(sValArray(1)) = 1) ' End If ' EgtGetInfo(nPartId, BTL_PRT_ALIGNMENT, sValue) ' sValArray = sValue.Split({":"}, StringSplitOptions.RemoveEmptyEntries) ' If sValArray.Count() >= 2 Then ' m_SelALIGNLOCATION = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValArray(0), ocALIGNLOCATION), ocALIGNLOCATION) ' m_SelALIGNENDTYPE = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValArray(1).Trim(), ocALIGNENDTYPE), ocALIGNENDTYPE) ' End If ' EgtGetInfo(nPartId, BTL_PRT_MATERIALTYPE, sValue) ' sValArray = sValue.Split({":"}, StringSplitOptions.RemoveEmptyEntries) ' If sValArray.Count() >= 1 Then ' m_SelMATERIALTYPEGRP = IdNameStruct.IndFromId(IdNameStruct.IdFromName(sValArray(0), ocMATERIALTYPEGRP), ocMATERIALTYPEGRP) ' If sValArray.Count() >= 2 Then m_sMATERIALTYPESPEC = sValArray(1).Trim() ' End If ' If Not EgtGetInfo(nPartId, BTL_PRT_ROTATED, m_nROTATED) Then ' m_nROTATED = 0 ' End If ' If Not EgtGetInfo(nPartId, BTL_PRT_INVERTED, m_nINVERTED) Then ' m_nINVERTED = 0 ' End If ' If EgtGetInfo(nPartId, BTL_PRT_MATERIAL, m_sMATERIAL) Then ' If Not ParentStructure.MaterialList.Contains(m_sMATERIAL) Then ' ParentStructure.MaterialList.Add(m_sMATERIAL) ' End If ' End If ' If Not ParentStructure.SectionList.Contains(Section) Then ' ParentStructure.SectionList.Add(Section) ' End If ' ' Leggo outline ' Dim nOutlineLayerId As Integer = EgtGetFirstNameInGroup(nPartId, OUTLINE) ' Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayerId) ' While nOutlineId <> GDB_ID.NULL ' ' verifico che sia una feature ' Dim nGRP As Integer ' If EgtGetInfo(nOutlineId, BTL_FTR_GRP, nGRP) Then ' ' creo la feature ' m_FeatureList.Add(New BTLFeatureVM(Me, nOutlineId)) ' End If ' nOutlineId = EgtGetNext(nOutlineId) ' End While ' ' Leggo feature ' Dim nProcessingId As Integer = EgtGetFirstNameInGroup(nPartId, PROCESSINGS) ' Dim nFeatureId As Integer = EgtGetFirstInGroup(nProcessingId) ' While nFeatureId <> GDB_ID.NULL ' ' verifico che sia una feature ' Dim nGRP As Integer ' If EgtGetInfo(nFeatureId, BTL_FTR_GRP, nGRP) Then ' ' creo la feature ' m_FeatureList.Add(New BTLFeatureVM(Me, nFeatureId)) ' End If ' nFeatureId = EgtGetNext(nFeatureId) ' End While ' ' Aggiorno check DOALL ' NotifyPropertyChanged("bDOALL") ' ' leggo calc error ' Dim nErr As Integer = 0 ' Dim nRot As Integer = 0 ' Dim nFall As Integer = 0 ' Dim sMsg As String = "" ' Dim bCalc As Boolean = False ' bCalc = EgtGetInfo(nPartId, ITG_PROJ_ERR, nErr) ' EgtGetInfo(nPartId, ITG_PROJ_ROT, nRot) ' EgtGetInfo(nPartId, ITG_PROJ_FALL, sMsg) ' EgtGetInfo(nPartId, ITG_PROJ_MSG, sMsg) ' CalcPartUpdate(bCalc, nErr, nRot, nFall, sMsg) ' CalcFeatureUpdate() 'End Sub 'Sub New(ParentStructure As BTLStructure, nPartId As Integer) ' m_BTLStructureM = ParentStructure ' Me.SetPartId = nPartId ' m_FeatureList = New ObservableCollection(Of BTLFeature) 'End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Public Event BTLFeatureAdded As EventHandler(Of BTLFeatureAddedEventArgs) Public Sub AddBTLFeature(BTLFeatureM As BTLFeatureM) If IsNothing(BTLFeatureM) Then Return If Not m_BTLFeatureMList.Contains(BTLFeatureM) Then m_BTLFeatureMList.Add(BTLFeatureM) RaiseEvent BTLFeatureAdded(Me, New BTLFeatureAddedEventArgs(BTLFeatureM)) End If End Sub Public Function GetBTLFeatures() As List(Of BTLFeatureM) Return New List(Of BTLFeatureM)(m_BTLFeatureMList) End Function Public Function Rotation(IsPositive As Boolean, SelectedMachineType As MachineType) As Boolean ' recupero il box del pezzo Dim nLs As Integer = EgtGetFirstNameInGroup(nPartId, "Box") Dim b3Solid As New BBox3d EgtGetBBoxGlob(nLs, GDB_BB.STANDARD, b3Solid) If b3Solid.IsEmpty() Then EgtOutLog("ERROR: Box non definito per la trave " & sNAM) Return False End If ' eseguo rotazione di 90 gradi attorno asse X Dim dRot = If(IsPositive, 90, -90) Dim vtAxes As Vector3d ' se travi ruoto attorno all'asse X If SelectedMachineType = MachineType.BEAM Then vtAxes = Vector3d.X_AX ' se pareti ruoto attorno all'asse Z ElseIf SelectedMachineType = MachineType.WALL Then vtAxes = -Vector3d.Z_AX End If ' se invertito Dim bInverted As Boolean = m_nINVERTED <> 0 If bInverted Then ' annullo inversione Inversion(SelectedMachineType) End If ' eseguo rotazione Dim bOk As Boolean = EgtRotate(nPartId, b3Solid.Center, vtAxes, dRot, GDB_RT.GLOB) If bOk Then Select Case m_nROTATED Case 0 m_nROTATED = If(IsPositive, 90, 270) Case 90 m_nROTATED = If(IsPositive, 180, 0) Case 180 m_nROTATED = If(IsPositive, 270, 90) Case 270 m_nROTATED = If(IsPositive, 0, 180) End Select EgtSetInfo(nPartId, BTL_PRT_ROTATED, m_nROTATED) ' imposto modificato per copie EgtDuploSetModified(nPartId) End If ' se era invertito If bInverted Then ' ripristino inversione Inversion(SelectedMachineType) End If EgtDraw() Return bOk End Function Public Sub Inversion(SelectedMachineType As MachineType) ' recupero il box del pezzo Dim nLs As Integer = EgtGetFirstNameInGroup(nPartId, "Box") Dim b3Solid As New BBox3d EgtGetBBoxGlob(nLs, GDB_BB.STANDARD, b3Solid) If b3Solid.IsEmpty() Then EgtOutLog("ERROR: Box non definito per la trave " & sNAM) Return End If Dim vtAxes As Vector3d ' se travi ruoto attorno all'asse Z If SelectedMachineType = MachineType.BEAM Then vtAxes = Vector3d.Z_AX ' se pareti ruoto attorno all'asse X ElseIf SelectedMachineType = MachineType.WALL Then vtAxes = Vector3d.X_AX End If ' eseguo rotazione di 180 gradi If EgtRotate(nPartId, b3Solid.Center, vtAxes, 180, GDB_RT.GLOB) Then m_nINVERTED = If(m_nINVERTED = 0, 180, 0) EgtSetInfo(nPartId, BTL_PRT_INVERTED, m_nINVERTED) ' imposto modificato per copie EgtDuploSetModified(nPartId) End If End Sub Public Function NewProcId() As Integer Dim nMaxProcId As Integer = 0 If Not IsNothing(BTLFeatureMList) AndAlso BTLFeatureMList.Count > 0 Then nMaxProcId = BTLFeatureMList.Max(Function(x) x.nPRID) End If Return nMaxProcId + 1 End Function #End Region ' METHODS End Class