From e97bdfef914b4ca2e168bbb6d8b37d7d1db0042d Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 13 Apr 2017 07:52:38 +0000 Subject: [PATCH] OmagOFFICE : - gestione grezzo per punti - primo import immagini. --- EgtStoneLib/{GenCalc.vb => EstCalc.vb} | 31 +- EgtStoneLib/EstPhoto.vb | 215 ++++++ OmagOFFICE.vbproj | 3 +- OptionPanel/NestingTab/NestingTabVM.vb | 18 +- OptionPanel/OptionPanelVM.vb | 2 +- OptionPanel/RawPartTab/RawPartTabV.xaml | 95 ++- OptionPanel/RawPartTab/RawPartTabVM.vb | 860 ++++++++++++++++++++---- Utility/OmagOFFICEDictionary.xaml | 2 +- 8 files changed, 1030 insertions(+), 196 deletions(-) rename EgtStoneLib/{GenCalc.vb => EstCalc.vb} (92%) create mode 100644 EgtStoneLib/EstPhoto.vb diff --git a/EgtStoneLib/GenCalc.vb b/EgtStoneLib/EstCalc.vb similarity index 92% rename from EgtStoneLib/GenCalc.vb rename to EgtStoneLib/EstCalc.vb index 8fdacb6..42748cc 100644 --- a/EgtStoneLib/GenCalc.vb +++ b/EgtStoneLib/EstCalc.vb @@ -1,7 +1,9 @@ -Imports System.Globalization + + +Imports System.Globalization Imports EgtUILib -Module GenCalc +Module EstCalc '-------------------------------------------------------------------------------------------------- Friend Function DoubleToString(ByVal dVal As Double, ByVal nNumDec As Integer) As String @@ -56,13 +58,36 @@ Module GenCalc Return m_ptRawMax End Function + Private m_dRawLength As Double + Public Function GetRawLength() As Double + Return m_dRawLength + End Function + + Private m_dRawWidth As Double + Public Function GetRawWidth() As Double + Return m_dRawWidth + End Function + + Private m_dRawHeight As Double + Public Function GetRawHeight() As Double + Return m_dRawHeight + End Function + Public Sub UpdateRawPart() ' determino il grezzo (è il primo con fase 1) m_nRawId = EgtGetFirstRawPart() While m_nRawId <> GDB_ID.NULL And Not EgtVerifyRawPartPhase(m_nRawId, 1) m_nRawId = EgtGetNextRawPart(m_nRawId) End While - GetRawBox(m_nRawId, m_ptRawMin, m_ptRawMax) + If GetRawBox(m_nRawId, m_ptRawMin, m_ptRawMax) Then + m_dRawLength = m_ptRawMax.x - m_ptRawMin.x + m_dRawWidth = m_ptRawMax.y - m_ptRawMin.y + m_dRawHeight = m_ptRawMax.z - m_ptRawMin.z + Else + m_dRawLength = 0 + m_dRawWidth = 0 + m_dRawHeight = 0 + End If End Sub '-------------------------------------------------------------------------------------------------- diff --git a/EgtStoneLib/EstPhoto.vb b/EgtStoneLib/EstPhoto.vb new file mode 100644 index 0000000..4b5fce4 --- /dev/null +++ b/EgtStoneLib/EstPhoto.vb @@ -0,0 +1,215 @@ +'---------------------------------------------------------------------------- +' EgalTech 2015-2017 +'---------------------------------------------------------------------------- +' File : GenPhoto.vb Data : 12.04.17 Versione : 1.8d1 +' Contenuto : Modulo gestione fotografie. +' Ogni gruppo di lavoro può avere una sua foto della lastra. +' +' +' Modifiche : 12.04.17 DS Creazione modulo. +' +' +'---------------------------------------------------------------------------- + +Imports System.IO +Imports EgtUILib + +Module EstPhoto + + Friend Function LoadPhoto(sPath As String) As Boolean + ' Verifico esistenza file immagine + If Not File.Exists(sPath) Then Return False + ' Leggo eventuale file dati aggiuntivi + Dim ptOri As New Point3d(0, 0, 0) + Dim ptCen As New Point3d(0, 0, 1) + Dim dMMxPixel As Double = 1 + ReadAuxData(sPath, ptOri, ptCen, dMMxPixel) + ' Altezza eventuale tavola aggiuntiva + Dim dAddTable As Double = CurrentMachine.dAdditionalTable + ' Aggiusto dati per spessore grezzo + If Math.Abs(EstCalc.GetRawHeight() + dAddTable) > EPS_SMALL Then + ' Coefficiente di scalatura + Dim dFsca As Double = (ptCen.z - EstCalc.GetRawHeight() - dAddTable) / (ptCen.z - ptOri.z) + dMMxPixel *= dFsca + ptOri.x = ptCen.x + (ptOri.x - ptCen.x) * dFsca + ptOri.y = ptCen.y + (ptOri.y - ptCen.y) * dFsca + ptOri.z = EstCalc.GetRawHeight() + dAddTable + End If + ' Recupero origine della tavola e porto i punti in globale + Dim ptTab As Point3d + If Not EgtGetTableRef(1, ptTab) Then Return False + ptOri.ToGlob(New Frame3d(ptTab)) + ptCen.ToGlob(New Frame3d(ptTab)) + ' Recupero le dimensioni della tavola + Dim ptMin, ptMax As Point3d + If Not EgtGetTableArea(1, ptMin, ptMax) Then Return False + ' Elimino eventuale precedente foto + Dim nOldPhotoId = GetPhoto() + If nOldPhotoId <> GDB_ID.NULL Then EgtErase(nOldPhotoId) + ' Se non esiste il gruppo per le foto, lo creo + Dim nPhGrpId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP) + If nPhGrpId = GDB_ID.NULL Then + nPhGrpId = EgtCreateGroup(GDB_ID.ROOT) + If nPhGrpId = GDB_ID.NULL Then Return False + EgtSetName(nPhGrpId, PHOTO_GRP) + End If + EgtSetLevel(nPhGrpId, GDB_LV.SYSTEM) + ' Carico la fotografia + Return EgtAddPhoto(PHOTO_NAME, sPath, ptOri, ptCen, dMMxPixel, nPhGrpId, ptMin, ptMax) <> GDB_ID.NULL + End Function + + Private Function ReadAuxData(sPath As String, + ByRef ptOri As Point3d, ByRef ptCen As Point3d, ByRef dMMxPixel As Double) As Boolean + Dim sAuxPath As String = Path.ChangeExtension(sPath, ".txt") + Try + Dim sLine As String = String.Empty + Dim sr As StreamReader = New StreamReader(sAuxPath) + Do While sr.Peek() > -1 + sLine = sr.ReadLine() + sLine = sLine.Replace(" ", "") + If sLine.StartsWith("X=") Then + StringToDouble(sLine.Substring(2), ptOri.x) + ElseIf sLine.StartsWith("Y=") Then + StringToDouble(sLine.Substring(2), ptOri.y) + ElseIf sLine.StartsWith("Z_Lastra=") Then + StringToDouble(sLine.Substring(9), ptOri.z) + ElseIf sLine.StartsWith("X_ScaleCenter=") Then + StringToDouble(sLine.Substring(14), ptCen.x) + ElseIf sLine.StartsWith("Y_ScaleCenter=") Then + StringToDouble(sLine.Substring(14), ptCen.y) + ElseIf sLine.StartsWith("Z_ScaleCenter=") Then + StringToDouble(sLine.Substring(14), ptCen.z) + ElseIf sLine.StartsWith("Pixelxmm=") Then + Dim dTmp As Double + StringToDouble(sLine.Substring(9), dTmp) + If dTmp > EPS_SMALL Then + dMMxPixel = 1 / dTmp + End If + End If + Loop + sr.Close() + Return True + Catch ex As Exception + EgtOutLog("LoadPhoto Error on auxfile : " & sAuxPath) + Return False + End Try + End Function + + Public Function GetPhoto() As Integer + Dim nPhGrpId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP) + Return EgtGetFirstNameInGroup(nPhGrpId, PHOTO_NAME) + End Function + + Public Function GetPhotoTextureRef(ByRef refTxr As Frame3d) As Boolean + ' Recupero la foto + Dim nId As Integer = GetPhoto() + If nId = GDB_ID.NULL Then + Return False + End If + ' Recupero il riferimento in globale + Return EgtGetTextureFrame(nId, GDB_ID.ROOT, refTxr) + End Function + + Public Function ShowPhoto(ByVal bShow As Boolean, Optional bDisableModified As Boolean = True) As Boolean + ' Recupero la foto + Dim nId As Integer = GetPhoto() + If nId = GDB_ID.NULL Then Return False + ' Se richiesto, disabilito impostazione modificato + Dim bOldEnMod As Boolean = False + If bDisableModified Then + bOldEnMod = EgtGetEnableModified() + If bOldEnMod Then EgtDisableModified() + End If + ' Ne cambio lo stato + Dim bOk As Boolean = EgtSetStatus(nId, If(bShow, GDB_ST.ON_, GDB_ST.OFF)) + ' Se necessario, ripristino precedente impostazione modificato + If bOldEnMod Then EgtEnableModified() + Return bOk + End Function + + Public Function UpdatePhoto() As Boolean + ' Verifico esistenza oggetto foto + Dim nPhotoId As Integer = GetPhoto() + If nPhotoId = GDB_ID.NULL Then Return False + ' Verifico esistenza texture della foto + Dim sPath As String = String.Empty + EgtGetPhotoPath(nPhotoId, sPath) + If Not File.Exists(sPath) Then Return False + ' Recupero i dati aggiuntivi della foto + Dim ptOri As New Point3d(0, 0, 0) + EgtGetPhotoOrigin(nPhotoId, ptOri) + Dim ptCen As New Point3d(0, 0, 1) + EgtGetPhotoCenter(nPhotoId, ptCen) + Dim dMMxPixel As Double = 1 + EgtGetPhotoMMxPixel(nPhotoId, dMMxPixel) + ' Recupero origine della tavola + Dim ptTab As Point3d + If Not EgtGetTableRef(1, ptTab) Then Return False + ' Porto i punti in locale + ptOri.ToLoc(New Frame3d(ptTab)) + ptCen.ToLoc(New Frame3d(ptTab)) + ' Altezza eventuale tavola aggiuntiva + Dim dAddTable As Double = CurrentMachine.dAdditionalTable + ' Aggiusto dati per spessore grezzo (Coefficiente di scalatura) + Dim dFsca As Double = (ptCen.z - EstCalc.GetRawHeight() - dAddTable) / (ptCen.z - ptOri.z) + dMMxPixel *= dFsca + ptOri.x = ptCen.x + (ptOri.x - ptCen.x) * dFsca + ptOri.y = ptCen.y + (ptOri.y - ptCen.y) * dFsca + ptOri.z = EstCalc.GetRawHeight() + dAddTable + ' Porto i punti in globale + ptOri.ToGlob(New Frame3d(ptTab)) + ptCen.ToGlob(New Frame3d(ptTab)) + ' Recupero le dimensioni della tavola + Dim ptMin, ptMax As Point3d + If Not EgtGetTableArea(1, ptMin, ptMax) Then Return False + ' Elimino eventuale precedente foto + Dim nOldPhotoId = GetPhoto() + If nOldPhotoId <> GDB_ID.NULL Then EgtErase(nOldPhotoId) + ' Se non esiste il gruppo per le foto, lo creo + Dim nPhGrpId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP) + If nPhGrpId = GDB_ID.NULL Then + nPhGrpId = EgtCreateGroup(GDB_ID.ROOT) + If nPhGrpId = GDB_ID.NULL Then Return False + EgtSetName(nPhGrpId, PHOTO_GRP) + End If + EgtSetLevel(nPhGrpId, GDB_LV.SYSTEM) + ' Carico la fotografia + Return EgtAddPhoto(PHOTO_NAME, sPath, ptOri, ptCen, dMMxPixel, nPhGrpId, ptMin, ptMax) <> GDB_ID.NULL + End Function + + Public Function UpdateContour() As Boolean + ' Verifico esistenza oggetto contorno + Dim nCrvId As Integer = GetContour() + If nCrvId = GDB_ID.NULL Then Return False + ' Verifico esistenza oggetto foto + Dim nPhotoId As Integer = GetPhoto() + If nPhotoId = GDB_ID.NULL Then Return False + ' Recupero centro della foto + Dim ptCen As New Point3d(0, 0, 1) + EgtGetPhotoCenter(nPhotoId, ptCen) + ' Recupero origine della tavola + Dim ptTab As Point3d + If Not EgtGetTableRef(1, ptTab) Then Return False + ' Altezza eventuale tavola aggiuntiva + Dim dAddTable As Double = CurrentMachine.dAdditionalTable + ' Recupero inizio contorno + Dim ptStart As Point3d + EgtStartPoint(nCrvId, GDB_ID.ROOT, ptStart) + ' Calcolo coefficiente di scalatura + Dim dFsca As Double = (ptCen.z - ptTab.z - EstCalc.GetRawHeight() - dAddTable) / (ptCen.z - ptStart.z) + ' Scalo opportunamente + EgtScale(nCrvId, New Frame3d(ptCen), dFsca, dFsca, 1, GDB_RT.GLOB) + ' Sposto in Z + Dim vtMove As New Vector3d(0, 0, ptTab.z + EstCalc.GetRawHeight() + dAddTable - ptStart.z) + EgtMove(nCrvId, vtMove, GDB_RT.GLOB) + Return True + End Function + + Friend Function GetContour() As Integer + Dim nPartId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_RAW_PHOTO_OUTLINE) + Dim nLayerId As Integer = EgtGetFirstGroupInGroup(nPartId) + Dim nCrvId As Integer = EgtGetFirstInGroup(nLayerId) + Return nCrvId + End Function + +End Module diff --git a/OmagOFFICE.vbproj b/OmagOFFICE.vbproj index eb1477f..3feb6ca 100644 --- a/OmagOFFICE.vbproj +++ b/OmagOFFICE.vbproj @@ -142,7 +142,8 @@ - + + MachinePanelV.xaml diff --git a/OptionPanel/NestingTab/NestingTabVM.vb b/OptionPanel/NestingTab/NestingTabVM.vb index 34c0b76..2f49716 100644 --- a/OptionPanel/NestingTab/NestingTabVM.vb +++ b/OptionPanel/NestingTab/NestingTabVM.vb @@ -141,7 +141,7 @@ Public Class NestingTabVM Friend Function InitNesting() As Boolean ' aggiorno dati del grezzo - GenCalc.UpdateRawPart() + EstCalc.UpdateRawPart() ' calcolo valore di minima distanza (da spessore lama corrente) Dim dSawThick As Double = 0 If EgtTdbSetCurrTool(CurrentMachine.sCurrSaw) AndAlso @@ -243,7 +243,7 @@ Public Class NestingTabVM EgtMovePartToSnapPointOnCollision(GDB_ID.SEL, m_bReducedCut, m_dSnapDist, bSnapMoved) End If End If - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() EgtDraw() ' Eventuale notifica al VeinMatching Dim nId As Integer = EgtGetFirstSelectedObj() @@ -285,7 +285,7 @@ Public Class NestingTabVM EgtMovePartToSnapPointOnCollision(GDB_ID.SEL, m_bReducedCut, m_dSnapDist, bSnapMoved) End If End If - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() EgtDraw() ' Eventuale notifica al VeinMatching Dim nId As Integer = EgtGetFirstSelectedObj() @@ -327,7 +327,7 @@ Public Class NestingTabVM EgtMovePartToSnapPointOnCollision(GDB_ID.SEL, m_bReducedCut, m_dSnapDist, bSnapMoved) End If End If - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() EgtDraw() ' Eventuale notifica al VeinMatching Dim nId As Integer = EgtGetFirstSelectedObj() @@ -369,7 +369,7 @@ Public Class NestingTabVM EgtMovePartToSnapPointOnCollision(GDB_ID.SEL, m_bReducedCut, m_dSnapDist, bSnapMoved) End If End If - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() EgtDraw() ' Eventuale notifica al VeinMatching Dim nId As Integer = EgtGetFirstSelectedObj() @@ -395,7 +395,7 @@ Public Class NestingTabVM Public Sub CClockwiseRot(ByVal param As Object) EgtSetCurrentContext(OmagOFFICEMap.refSceneHostV.OmagOFFICEScene.GetCtx()) RotateCluster(m_dRotationAngle) - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() EgtDraw() ' Eventuale notifica al VeinMatching Dim nId As Integer = EgtGetFirstSelectedObj() @@ -421,7 +421,7 @@ Public Class NestingTabVM Public Sub ClockwiseRot(ByVal param As Object) EgtSetCurrentContext(OmagOFFICEMap.refSceneHostV.OmagOFFICEScene.GetCtx()) RotateCluster(-m_dRotationAngle) - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() EgtDraw() ' Eventuale notifica al VeinMatching Dim nId As Integer = EgtGetFirstSelectedObj() @@ -733,7 +733,7 @@ Public Class NestingTabVM EgtMovePartToSnapPointOnCollision(nMoveId, m_bReducedCut, m_dSnapDist, bSnapMoved) End If End If - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() End If EgtDraw() ' Eventuale notifica al VeinMatching @@ -766,7 +766,7 @@ Public Class NestingTabVM EnableReferenceRegion(False) ' Eseguo verifica If EgtVerifyPart(nMoveId, m_bReducedCut) Then - GenCalc.ResetOrderMachiningFlag() + EstCalc.ResetOrderMachiningFlag() ' Non superata riporto alla posizione iniziale Else EgtMove(nMoveId, -m_vtTotMove) diff --git a/OptionPanel/OptionPanelVM.vb b/OptionPanel/OptionPanelVM.vb index 0dab1eb..4a10f79 100644 --- a/OptionPanel/OptionPanelVM.vb +++ b/OptionPanel/OptionPanelVM.vb @@ -19,7 +19,7 @@ ' Esco dallo stato corrente Select Case m_SelItem Case Tabs.RAWPART - OmagOFFICEMap.refRawPartTabVM.CloseRawPart() + OmagOFFICEMap.refRawPartTabVM.ExitRawPart() Case Tabs.NESTING Case Tabs.MACHINING Case Tabs.SIMUL diff --git a/OptionPanel/RawPartTab/RawPartTabV.xaml b/OptionPanel/RawPartTab/RawPartTabV.xaml index 40441c6..9730f65 100644 --- a/OptionPanel/RawPartTab/RawPartTabV.xaml +++ b/OptionPanel/RawPartTab/RawPartTabV.xaml @@ -3,7 +3,23 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:EgtWpfLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5" Margin="5,5,5,0"> - + + + + + + + + + + + + Margin="0,0,0,5" + IsEnabled="{Binding TypeIsEnabled}"/> + Margin="13,0,5,5" + IsEnabled="{Binding LengthIsEnabled}" TextAlignment="Right"/> + Margin="13,0,5,5" + IsEnabled="{Binding WidthIsEnabled}" TextAlignment="Right"/> + Margin="13,0,5,5" + IsEnabled="{Binding HeightIsEnabled}" TextAlignment="Right"/> + Margin="13,0,5,5" + IsEnabled="{Binding OffsetXIsEnabled}" TextAlignment="Right"/> + Margin="13,0,5,5" + IsEnabled="{Binding OffsetYIsEnabled}" TextAlignment="Right"/> + Margin="13,0,5,5" + IsEnabled="{Binding KerfIsEnabled}" TextAlignment="Right"/> - - - - - - - - - - - - - - - - + - - - - -