Imports EgtUILib Module GeomCalc Public Function GetRegionOutLoop(nRegId As Integer, nDestGrpId As Integer) As Integer Dim nCount As Integer = 0 Dim nOutId As Integer = EgtExtractSurfFrChunkLoops(nRegId, 0, nDestGrpId, nCount) If nOutId <> GDB_ID.NULL Then For nId As Integer = nOutId + 1 To nOutId + nCount - 1 EgtErase(nId) Next End If Return nOutId End Function Public Function CreateSolidFromRegion(nRegId As Integer, vtExtr As Vector3d, nDestGrpId As Integer) As Integer Dim nOutId As Integer = GetRegionOutLoop(nRegId, nDestGrpId) If nOutId = GDB_ID.NULL Then Return GDB_ID.NULL Dim nSolId As Integer = EgtCreateSurfTmByRegionExtrusion(nDestGrpId, 1, {nOutId}, vtExtr, 100 * EPS_SMALL, GDB_RT.GLOB) EgtErase(nOutId) Return nSolId End Function Public Function GetMaxSideId(nPartId As Integer) As Integer Dim nId As Integer = EgtGetFirstInGroup(nPartId) Dim sName As String = String.Empty While nId <> GDB_ID.NULL EgtGetName(nId, sName) If sName = NAME_OUTLOOP Then Exit While End If nId = EgtGetNext(nId) End While Dim nIdMax As Integer = EgtGetFirstInGroup(nId) Dim nIdCurr As Integer = nIdMax Dim dLen As Double Dim dLenMax As Double EgtCurveLength(nIdMax, dLen) dLenMax = dLen nIdCurr = EgtGetNext(nIdCurr) While nIdCurr <> GDB_ID.NULL EgtCurveLength(nIdCurr, dLen) If dLen > dLenMax Then nIdMax = nIdCurr End If nIdCurr = EgtGetNext(nIdCurr) End While Return nIdMax End Function Friend Function UpdateSolidForDrip(nPartId As Integer) As Boolean ' se non ci sono lavorazioni da sotto nel pezzo si esce If EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_DRIPCUT)) = 0 AndAlso EgtGetGroupObjs(EgtGetFirstNameInGroup(nPartId, NAME_UNDERDRILL)) = 0 Then Return True ' Recupero lo spessore del grezzo Dim dThick As Double = EstCalc.GetRawHeight() ' Recupero layer Regione Dim nGrpRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION) ' Elimino eventuale vecchio solido EgtErase(EgtGetFirstNameInGroup(nGrpRegId, NAME_DRIP_SOLID)) ' Recupero la regione del pezzo Dim nRegId As Integer = EgtGetFirstInGroup(nGrpRegId) While nRegId <> GDB_ID.NULL If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then Exit While nRegId = EgtGetNext(nRegId) End While ' Ne derivo il solido di estrusione Dim nSolId As Integer = CreateSolidFromRegion(nRegId, -dThick * Vector3d.Z_AX(), nGrpRegId) EgtSetName(nSolId, NAME_DRIP_SOLID) EgtSetColor(nSolId, New Color3d(0, 255, 255, 25)) EgtSetStatus(nSolId, GDB_ST.OFF) Return nSolId <> GDB_ID.NULL End Function Friend Function EraseSolidForDrip(nPartId As Integer) As Boolean ' Recupero layer Regione Dim nGrpRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION) ' Elimino eventuale vecchio solido EgtErase(EgtGetFirstNameInGroup(nGrpRegId, NAME_DRIP_SOLID)) Return True End Function Friend Function GetPartArea(nPartId As Integer) As Double Dim nRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION) Dim nSurfId As Integer = EgtGetFirstInGroup(nRegId) While nSurfId <> GDB_ID.NULL And EgtGetType(nSurfId) <> GDB_TY.SRF_FRGN nSurfId = EgtGetNext(nSurfId) End While Dim dArea As Double = 0 EgtSurfFrGrossArea(nSurfId, dArea) Return dArea End Function Public Function EgtGetPartCenter(nPartId As Integer, ByRef ptCenter As Point3d) As Boolean Dim nGrpRegId As Integer = EgtGetFirstNameInGroup(nPartId, ConstMach.NAME_REGION) Dim nRegId As Integer = EgtGetFirstInGroup(nGrpRegId) While nRegId <> GDB_ID.NULL If EgtGetType(nRegId) = GDB_TY.SRF_FRGN Then Exit While nRegId = EgtGetNext(nRegId) End While Return EgtCentroid(nRegId, GDB_ID.ROOT, ptCenter) End Function Public Function GetPointInTableRef(ByVal ptCenter As Point3d, ByRef ptTable As Point3d) As Point3d ' setto il riferimento del tavolo1 (passo l'indice della tavola e il punto su cui salvare l'informazione) If Not EgtGetTableRef(1, ptTable) Then Return Nothing Dim ptResult As New Point3d ptResult.x = ptCenter.x - ptTable.x ptResult.y = ptCenter.y - ptTable.y ptResult.z = ptCenter.z - ptTable.z Return ptResult End Function ' restituisce l'Id della regione del pezzo Public Function GetRegionFromPart(IdPart As Integer) As Integer Dim nRegId As Integer = EgtGetFirstNameInGroup(IdPart, ConstGen.NAME_REGION) If nRegId = GDB_ID.NULL Then Return -1 End If ' Cerco prima regione nel layer Dim nId = EgtGetFirstInGroup(nRegId) While nId <> GDB_ID.NULL If EgtGetType(nId) = GDB_TY.SRF_FRGN Then Return nId End If nId = EgtGetNext(nId) End While Return -1 End Function End Module