diff --git a/AboutBox1.vb b/AboutBox1.vb index ba6a3d1..4200b35 100644 --- a/AboutBox1.vb +++ b/AboutBox1.vb @@ -8,7 +8,7 @@ Public NotInheritable Class AboutBox1 If My.Application.Info.Title <> "" Then ApplicationTitle = My.Application.Info.Title Else - ApplicationTitle = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName) + ApplicationTitle = My.Application.Info.AssemblyName End If Me.Text = String.Format("Informazioni su {0}", My.Application.Info.ProductName) ' Inizializza tutto il testo visualizzato nella finestra di dialogo Informazioni su. @@ -18,8 +18,8 @@ Public NotInheritable Class AboutBox1 Me.LabelCompanyName.Text = My.Application.Info.CompanyName Dim sbInfo As New System.Text.StringBuilder sbInfo.Append("User " & SystemInformation.UserName & - "\" & SystemInformation.ComputerName & - " Inst=" & Form1.GetInstance() & vbCrLf) + "\" & SystemInformation.ComputerName & + " (" & Form1.GetInstance() & ")" & vbCrLf) sbInfo.Append("ExeRoot " & Form1.GetExeRoot() & vbCrLf) sbInfo.Append("DataRoot " & Form1.GetDataRoot() & vbCrLf) Dim sTemp As String = String.Empty diff --git a/Controller.vb b/Controller.vb index b8d4357..25e42d6 100644 --- a/Controller.vb +++ b/Controller.vb @@ -92,6 +92,7 @@ Public Class Controller INVERTCURVE TRIMEXTENDCURVE BREAKCURVE + SPLITCURVE JOINCURVE EXPLODECURVE SETCURVETHICKNESS @@ -275,6 +276,10 @@ Public Class Controller End Function Public Function SaveAsProject(Optional ByVal sFile As String = "", Optional ByVal nType As NGE = NGE.CMPTEXT) As Boolean + 'Se nome vuoto, assegno "New" + If String.IsNullOrWhiteSpace(sFile) Then + sFile = "New.nge" + End If 'Eventuale sistemazione estensione sFile = IO.Path.ChangeExtension(sFile, "nge") 'Assegnazione nome file con dialogo @@ -867,6 +872,9 @@ Public Class Controller ' Break Curve Case CMD.BREAKCURVE Return ProcessBreakCurve() + ' Split Curve in N parts + Case CMD.SPLITCURVE + Return ProcessSplitCurve() ' Join Curve Case CMD.JOINCURVE Return ProcessJoinCurve() @@ -2585,7 +2593,24 @@ Public Class Controller End If ' creo la superficie piana (a partire da un contorno selezionato) EnableCommandLog() - EgtCreateSurfTriMeshByContour(GetCurrLayer(), EgtGetLastSelectedObj(), EPS_STM) + If EgtGetSelectedObjNbr() = 1 Then + EgtCreateSurfTriMeshByFlatContour(GetCurrLayer(), EgtGetLastSelectedObj(), EPS_STM) + Else + ' creo vettore di entità selezionate + Dim nCrvNum As Integer = 0 + Dim nCrvIds(EgtGetSelectedObjNbr() - 1) As Integer + Dim nId As Integer = EgtGetFirstSelectedObj() + While nId <> GDB_ID.NULL + Select Case EgtGetType(nId) + Case GDB_TY.CRV_LINE, GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_COMPO + nCrvIds(nCrvNum) = nId + nCrvNum = nCrvNum + 1 + End Select + nId = EgtGetNextSelectedObj() + End While + ' creo la superficie + EgtCreateSurfTriMeshByRegion(GetCurrLayer(), nCrvNum, nCrvIds, EPS_STM) + End If DisableCommandLog() ' reset stato scena m_Scene.ResetStatus() @@ -2615,11 +2640,29 @@ Public Class Controller Case 1 ' reset scena m_Scene.ResetStatus(False) - ' creo la superficie di estrusione (a partire da un contorno selezionato) + ' creo la superficie di estrusione (a partire da uno o più contorni selezionati) Dim VtExtr As Vector3d = Vector3d.Z_AX * m_dLast + ' creo vettore di entità selezionate + Dim nCrvNum As Integer = 0 + Dim nCrvIds(EgtGetSelectedObjNbr() - 1) As Integer + Dim nId As Integer = EgtGetFirstSelectedObj() + While nId <> GDB_ID.NULL + Select Case EgtGetType(nId) + Case GDB_TY.CRV_LINE, GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_COMPO + nCrvIds(nCrvNum) = nId + nCrvNum = nCrvNum + 1 + End Select + nId = EgtGetNextSelectedObj() + End While + ' eseguo EnableCommandLog() - EgtCreateSurfTriMeshByExtrusion(GetCurrLayer(), EgtGetLastSelectedObj(), VtExtr, - m_bLast, EPS_STM, REF_TY.GRID) + If Not m_bLast Then + EgtCreateSurfTriMeshByExtrusion(GetCurrLayer(), nCrvNum, nCrvIds, VtExtr, + EPS_STM, REF_TY.GRID) + Else + EgtCreateSurfTriMeshByRegionExtrusion(GetCurrLayer(), nCrvNum, nCrvIds, VtExtr, + EPS_STM, REF_TY.GRID) + End If DisableCommandLog() EgtDraw() ' aggiorno stato @@ -2636,10 +2679,27 @@ Public Class Controller If m_nStep = 1 Then ' cancello eventuale vecchia superficie di estrusione EgtEmptyGroup(m_Scene.GetDragGroup()) - ' creo la superficie di estrusione (a partire da un contorno selezionato) + ' creo la superficie di estrusione (a partire da uno o più contorni selezionati) Dim VtExtr As Vector3d = EgtGetGridVersZ() * m_dLast - EgtCreateSurfTriMeshByExtrusion(m_Scene.GetDragGroup(), EgtGetLastSelectedObj(), VtExtr, - m_bLast, EPS_STM_DRAG, REF_TY.GLOB) + Dim nCrvNum As Integer = 0 + Dim nCrvIds(EgtGetSelectedObjNbr() - 1) As Integer + Dim nId As Integer = EgtGetFirstSelectedObj() + While nId <> GDB_ID.NULL + Select Case EgtGetType(nId) + Case GDB_TY.CRV_LINE, GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_COMPO + nCrvIds(nCrvNum) = nId + nCrvNum = nCrvNum + 1 + End Select + nId = EgtGetNextSelectedObj() + End While + ' eseguo + If Not m_bLast Then + EgtCreateSurfTriMeshByExtrusion(m_Scene.GetDragGroup(), nCrvNum, nCrvIds, VtExtr, + EPS_STM_DRAG, REF_TY.GLOB) + Else + EgtCreateSurfTriMeshByRegionExtrusion(m_Scene.GetDragGroup(), nCrvNum, nCrvIds, VtExtr, + EPS_STM_DRAG, REF_TY.GLOB) + End If EgtDraw() End If End Sub @@ -3047,6 +3107,37 @@ Public Class Controller EgtSplitCurveAtPoint(nId, m_ptLast.Loc(GDB_ID.GRID), REF_TY.GRID) DisableCommandLog() ' reset stato scena + EgtDeselectObj(nId) + m_Scene.ResetStatus() + ' aggiorno stato + m_nStep = 0 + RaiseEvent UpdateUI(Me, False) + Case Else + m_nStep = 0 + Return False + End Select + Return True + End Function + + Private Function ProcessSplitCurve() As Boolean + Select Case m_nStep + Case 0 + ' imposto stato a numero di pezzi + m_nStep = 1 + m_Scene.SetStatusNull() + ' abilito dialogo + RaiseEvent PrepareInputBox("SPLIT", "Insert Pieces Number", "", False, False) + m_nInpType = IBT.TY_INTEGER + m_nLast = 2 + SetInputBoxInteger(m_nLast) + Case 1 + ' eseguo spezzatura in parti + Dim nId As Integer = EgtGetLastSelectedObj() + EnableCommandLog() + EgtSplitCurve(nId, m_nLast) + DisableCommandLog() + ' reset stato scena + EgtDeselectObj(nId) m_Scene.ResetStatus() ' aggiorno stato m_nStep = 0 diff --git a/EgtInterface.vb b/EgtInterface.vb index f052d29..c4a852f 100644 --- a/EgtInterface.vb +++ b/EgtInterface.vb @@ -498,6 +498,12 @@ Structure Color3d B = nBlue A = nAlpha End Sub + Sub New(ByRef colSou As Color3d) + R = colSou.R + G = colSou.G + B = colSou.B + A = colSou.A + End Sub ' Inizializzatori Sub Setup(ByVal nRed As Integer, ByVal nGreen As Integer, ByVal nBlue As Integer, Optional ByVal nAlpha As Integer = 100) R = nRed @@ -535,7 +541,7 @@ Const EgtIntDll As String = "EgtInterfaceR32.dll" '---------- General ------------------------------------------------------------ -Public Function EgtInit(ByVal nDebug As Integer, ByVal sLogFile As String) As Boolean +Public Function EgtInit(ByVal nDebug As Integer, ByVal sLogFile As String, Optional ByVal sLogMsg As String = "") As Boolean End Function @@ -910,12 +916,23 @@ Public Function EgtCreatePolygonFromSide(ByVal nParentId As Integer, ByVal nNumS End Function -Public Function EgtCreateSurfTriMeshByContour(ByVal nParentId As Integer, ByVal nCrvId As Integer, ByVal dLinTol As Double) As Integer +Public Function EgtCreateSurfTriMeshByFlatContour(ByVal nParentId As Integer, ByVal nCrvId As Integer, ByVal dLinTol As Double) As Integer End Function -Public Function EgtCreateSurfTriMeshByExtrusion(ByVal nParentId As Integer, ByVal nCrvId As Integer, ByRef VtExtr As Vector3d, - ByVal bCapEnds As Boolean, ByVal dLinTol As Double, Optional ByVal nRefType As REF_TY = REF_TY.LOC) As Integer +Public Function EgtCreateSurfTriMeshByRegion(ByVal nParentId As Integer, ByVal nNumCrv As Integer, ByVal nCrvId() As Integer, ByVal dLinTol As Double) As Integer +End Function + + +Public Function EgtCreateSurfTriMeshByExtrusion(ByVal nParentId As Integer, ByVal nNumCrv As Integer, ByVal nCrvId() As Integer, + ByRef VtExtr As Vector3d, ByVal dLinTol As Double, + Optional ByVal nRefType As REF_TY = REF_TY.LOC) As Integer +End Function + + +Public Function EgtCreateSurfTriMeshByRegionExtrusion(ByVal nParentId As Integer, ByVal nNumCrv As Integer, ByVal nCrvId() As Integer, + ByRef VtExtr As Vector3d, ByVal dLinTol As Double, + Optional ByVal nRefType As REF_TY = REF_TY.LOC) As Integer End Function @@ -1018,6 +1035,10 @@ End Function Public Function EgtTrimExtendCurveByLen(ByVal nId As Integer, ByVal dLen As Double, ByRef PtNear As Point3d, Optional ByVal nRefType As REF_TY = REF_TY.LOC) As Boolean End Function + +Public Function EgtSplitCurve(ByVal nId As Integer, ByVal nParts As Integer) As Boolean +End Function + Public Function EgtSplitCurveAtPoint(ByVal nId As Integer, ByRef PtOn As Point3d, Optional ByVal nRefType As REF_TY = REF_TY.LOC) As Boolean End Function diff --git a/Form1.Designer.vb b/Form1.Designer.vb index ec06410..a259ca5 100644 --- a/Form1.Designer.vb +++ b/Form1.Designer.vb @@ -25,6 +25,7 @@ Partial Class Form1 Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.Scene1 = New TestEIn.Scene() Me.TabControl1 = New System.Windows.Forms.TabControl() Me.TabHome = New System.Windows.Forms.TabPage() Me.btnInsert = New System.Windows.Forms.Button() @@ -106,6 +107,7 @@ Partial Class Form1 Me.btnPoint = New System.Windows.Forms.Button() Me.btnLine2P = New System.Windows.Forms.Button() Me.TabConstruct = New System.Windows.Forms.TabPage() + Me.btnRevolve = New System.Windows.Forms.Button() Me.btnRuled = New System.Windows.Forms.Button() Me.btnScrew = New System.Windows.Forms.Button() Me.btnExtrude = New System.Windows.Forms.Button() @@ -154,8 +156,7 @@ Partial Class Form1 Me.ObjTreeTimer = New System.Windows.Forms.Timer(Me.components) Me.ColorDialog1 = New System.Windows.Forms.ColorDialog() Me.FormTimer = New System.Windows.Forms.Timer(Me.components) - Me.btnRevolve = New System.Windows.Forms.Button() - Me.Scene1 = New TestEIn.Scene() + Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components) Me.TableLayoutPanel1.SuspendLayout() Me.TabControl1.SuspendLayout() Me.TabHome.SuspendLayout() @@ -201,6 +202,17 @@ Partial Class Form1 Me.TableLayoutPanel1.Size = New System.Drawing.Size(1096, 641) Me.TableLayoutPanel1.TabIndex = 0 ' + 'Scene1 + ' + Me.Scene1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D + Me.Scene1.Cursor = System.Windows.Forms.Cursors.Default + Me.Scene1.Dock = System.Windows.Forms.DockStyle.Fill + Me.Scene1.Location = New System.Drawing.Point(89, 82) + Me.Scene1.Margin = New System.Windows.Forms.Padding(0) + Me.Scene1.Name = "Scene1" + Me.Scene1.Size = New System.Drawing.Size(787, 537) + Me.Scene1.TabIndex = 1 + ' 'TabControl1 ' Me.TableLayoutPanel1.SetColumnSpan(Me.TabControl1, 3) @@ -1503,6 +1515,24 @@ Partial Class Form1 Me.TabConstruct.TabIndex = 4 Me.TabConstruct.Text = "Construct" ' + 'btnRevolve + ' + Me.btnRevolve.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control + Me.btnRevolve.FlatAppearance.BorderSize = 0 + Me.btnRevolve.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.Control + Me.btnRevolve.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.GradientInactiveCaption + Me.btnRevolve.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnRevolve.Image = CType(resources.GetObject("btnRevolve.Image"), System.Drawing.Image) + Me.btnRevolve.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnRevolve.Location = New System.Drawing.Point(3, 96) + Me.btnRevolve.Margin = New System.Windows.Forms.Padding(0) + Me.btnRevolve.Name = "btnRevolve" + Me.btnRevolve.Size = New System.Drawing.Size(56, 48) + Me.btnRevolve.TabIndex = 37 + Me.btnRevolve.Text = "Revolve" + Me.btnRevolve.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnRevolve.UseVisualStyleBackColor = False + ' 'btnRuled ' Me.btnRuled.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control @@ -1608,7 +1638,7 @@ Partial Class Form1 Me.btnInvertSurf.Name = "btnInvertSurf" Me.btnInvertSurf.Size = New System.Drawing.Size(56, 48) Me.btnInvertSurf.TabIndex = 41 - Me.btnInvertSurf.Text = "Invert S" + Me.btnInvertSurf.Text = "Flip Surf" Me.btnInvertSurf.TextAlign = System.Drawing.ContentAlignment.BottomCenter Me.btnInvertSurf.UseVisualStyleBackColor = False ' @@ -2083,34 +2113,11 @@ Partial Class Form1 ' Me.FormTimer.Interval = 50 ' - 'btnRevolve + 'ToolTip1 ' - Me.btnRevolve.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control - Me.btnRevolve.FlatAppearance.BorderSize = 0 - Me.btnRevolve.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.Control - Me.btnRevolve.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.GradientInactiveCaption - Me.btnRevolve.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnRevolve.Image = CType(resources.GetObject("btnRevolve.Image"), System.Drawing.Image) - Me.btnRevolve.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnRevolve.Location = New System.Drawing.Point(3, 96) - Me.btnRevolve.Margin = New System.Windows.Forms.Padding(0) - Me.btnRevolve.Name = "btnRevolve" - Me.btnRevolve.Size = New System.Drawing.Size(56, 48) - Me.btnRevolve.TabIndex = 37 - Me.btnRevolve.Text = "Revolve" - Me.btnRevolve.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnRevolve.UseVisualStyleBackColor = False - ' - 'Scene1 - ' - Me.Scene1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D - Me.Scene1.Cursor = System.Windows.Forms.Cursors.Default - Me.Scene1.Dock = System.Windows.Forms.DockStyle.Fill - Me.Scene1.Location = New System.Drawing.Point(89, 82) - Me.Scene1.Margin = New System.Windows.Forms.Padding(0) - Me.Scene1.Name = "Scene1" - Me.Scene1.Size = New System.Drawing.Size(787, 537) - Me.Scene1.TabIndex = 1 + Me.ToolTip1.ShowAlways = True + Me.ToolTip1.StripAmpersands = True + Me.ToolTip1.UseFading = False ' 'Form1 ' @@ -2290,5 +2297,6 @@ End Sub Friend WithEvents btnPolygonSide As System.Windows.Forms.Button Friend WithEvents tsStatusReg As System.Windows.Forms.ToolStripStatusLabel Friend WithEvents btnRevolve As System.Windows.Forms.Button + Friend WithEvents ToolTip1 As System.Windows.Forms.ToolTip End Class diff --git a/Form1.resx b/Form1.resx index e794912..a0d0f7f 100644 --- a/Form1.resx +++ b/Form1.resx @@ -871,7 +871,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4 - DQAAAk1TRnQBSQFMAgEBDgEAAeABDgHgAQ4BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DQAAAk1TRnQBSQFMAgEBDgEAARgBDwEYAQ8BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -939,45 +939,45 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADU - CAAAAk1TRnQBSQFMAgEBAgIAAQYBAAEGARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA - AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA - AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA - AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm - AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ - AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm - AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz - AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm - AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm - AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA - ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm - AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm - ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm - AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA - AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ - AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz - AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ - AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA - AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM - AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm - ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ - AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ - ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM - ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm - AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM - AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA - AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA - ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 - Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/+EAAL/AQAB/wIHAf8BAAP/ - CAAB/wEHAbwB/ykAA/8B8QLyAfEE/wgAAfEC8gHxJgAB/wIAA/8B8gHxAfIB8wT/BwAB/wHxAhoB8gH/ - JQAB/wIAAv8BAAHzAbwB8AH0BP8HAAH/AZoCMgEaAf8lAAH/AgAB/wEAAf8B8gLwAfIB/wEAAv8HAAH/ - AXoCUwGaAf8lAAH/AgAB/wEAAfQB8QHyAvEB9AEAAv8HAAHzAVMBegFZAVMB8yUAAf8DAAH/AfIC8wLy - AfAB/wEAAf8GAAH/AVkDegFZATIB/yQAAf8DAAH0AfMB9ALzAvIB9AEAAf8GAAEaApoDegFZARokAAH/ - AwAF9ALzAfQBAAH/BgABGgR6ApoBGiQAAf8DAAX/AvQB/wEAAf8GAAH/BnoB/yQAAf8CAAv/BgAB/wEa - AZoCegGaARsB/yQAAf8CAAH/AQAG/wEAAv8HAAL/AvQC/yUAAf8/AAH/PwABQgFNAT4HAAE+AwABKAMA - AUADAAEQAwABAQEAAQEFAAGAFwAD/wEABP8EAAT/BAAB5AEjAfwBPwQAAeABAwH8AT8EAAFgAQMB+AEf - BAABZAEDAfgBHwQAAWgBEwH4AR8EAAFoARMB+AEfBAABcAELAfABDwQAAXABCwHwAQ8EAAFwAQsB8AEP - BAABcAELAfABDwQAAWABAwHwAQ8EAAFoARMB+AEfBAABfwP/BAABfwP/BAAL + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADW + CAAAAk1TRnQBSQFMAgEBAgEAATgBBgE4AQYBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/4QAAv8BAAH/AgcB/wEA + A/8IAAH/AQcBvAH/KQAD/wHxAvIB8QT/CAAB8QLyAfEmAAH/AgAD/wHyAfEB8gHzBP8HAAH/AfECGgHy + Af8lAAH/AgAC/wEAAfMBvAHwAfQE/wcAAf8BmgIyARoB/yUAAf8CAAH/AQAB/wHyAvAB8gH/AQAC/wcA + Af8BegJTAZoB/yUAAf8CAAH/AQAB9AHxAfIC8QH0AQAC/wcAAfMBUwF6AVkBUwHzJQAB/wMAAf8B8gLz + AvIB8AH/AQAB/wYAAf8BWQN6AVkBMgH/JAAB/wMAAfQB8wH0AvMC8gH0AQAB/wYAARoCmgN6AVkBGiQA + Af8DAAX0AvMB9AEAAf8GAAEaBHoCmgEaJAAB/wMABf8C9AH/AQAB/wYAAf8GegH/JAAB/wIAC/8GAAH/ + ARoBmgJ6AZoBGwH/JAAB/wIAAf8BAAb/AQAC/wcAAv8C9AL/JQAB/z8AAf8/AAFCAU0BPgcAAT4DAAEo + AwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAE/wQABP8EAAHkASMB/AE/BAAB4AEDAfwBPwQAAWABAwH4 + AR8EAAFkAQMB+AEfBAABaAETAfgBHwQAAWgBEwH4AR8EAAFwAQsB8AEPBAABcAELAfABDwQAAXABCwHw + AQ8EAAFwAQsB8AEPBAABYAEDAfABDwQAAWgBEwH4AR8EAAF/A/8EAAF/A/8EAAs= @@ -1101,23 +1101,23 @@ - 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 + BcKd4KYRgNnpAAAAAElFTkSuQmCC @@ -1144,21 +1144,21 @@ - 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 + yn8P4S+2trph1iUvVQAAAABJRU5ErkJggg== @@ -1233,11 +1233,12 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - xAAADsQBlSsOGwAAAAd0SU1FB94LCwoGNUlPh5wAAADtSURBVFhHxZMNDoIwFMY4mKf1dN5iUiPmObvx - N54mTaSQ9CPAVEr5KyozUZmJypHMv9sMf+ZDOW9yFDGePqCOc6zXmTwLsRBuxkGlMd0fZaE+FyEWwtCM - g0ojDmiNIBbC0I2DSqMeUI8gFsKwGgeVLVojiIUwbIqDyh424mgcVK7RGbErDiq3YCPqa7agcg3u9HXH - A0ao7PGJL5wcobLFT/z9zM+MUGkQC2H4euGOjlBZQyyEQd/2SwYQC2HofmpDBxALYdj9na+hEoiF8CVx - cJkUB5dJcXCZFAeVmajMRGUmKjNRmYnKTFTmUaYn/UkKulyAFpwAAAAASUVORK5CYII= + xAAADsQBlSsOGwAAAAd0SU1FB98CBwoZH9M0TrgAAAEdSURBVFhHxZOLEcIgEAVTmMWlFquzC7zF4Jzk + AfkwJzOr5AHui8YlpfRXZBiJDCOR4UxsPAwmdinWVTgLLw8vUMu5lvtUeBdkTtyUgwwVy/OVCvWaB5kT + Q1MOMlT4Aq0SyJwYunKQoaIuUJdA5sQwlIMMW7RKIHNiOCQHGfZQJa7KQYYjOiVOyUGGR1Al6j1HkOEI + 7jTf8YQSMuzxlRdulpBhi518+83vlJChApkTw88Dd7WEDGuQOTHIp/1oAX9+t1jDZoNJoftXGxXgvLGW + z9lt8GybmRS68hGcN9ZtnkvIjZAXJ8rBBlJfYG1tnC4v2PgWyO9+sWCDl8I0Odg4VWCqHGx8vvpegUhk + GIkMI5FhJDKMRIaRyDCOtLwBKHXaEPcPyGkAAAAASUVORK5CYII= @@ -1439,6 +1440,9 @@ 568, 14 + + 17, 53 + 43 diff --git a/Form1.vb b/Form1.vb index 360f1e7..b7b9607 100644 --- a/Form1.vb +++ b/Form1.vb @@ -59,28 +59,12 @@ Public Class Form1 ' Impostazione path Ini file m_sIniFile = m_sDataRoot & "\TestEIn.ini" ' Verifico indice di istanza - m_objMutex = New Mutex(False, "Global\TestEIn") - If m_objMutex.WaitOne(0, False) Then - ' Prima istanza - m_nInstance = 1 - ' Aggiorno stato istanze attive - WritePrivateProfileString("General", "Instances", m_nInstance, m_sIniFile) - Else - ' Cerco il primo indice di istanza libero (max 32) - Dim nTmp As Integer = GetPrivateProfileInt("General", "Instances", 0, m_sIniFile) - m_nInstance = 1 - Dim nMask As Integer = 1 - While (nTmp And nMask) <> 0 And m_nInstance < 32 - m_nInstance += 1 - nMask *= 2 - End While - ' Aggiorno stato istanze attive - nTmp += (1 << (m_nInstance - 1)) - WritePrivateProfileString("General", "Instances", nTmp, m_sIniFile) - End If + ManageIstance() ' Inizializzazione generale di EgtInterface Dim sIniFile As String = m_sDataRoot & "\EInGenlog" & m_nInstance.ToString() & ".txt" - EgtInit(0, sIniFile) + Dim sLogMsg As String = "User " & SystemInformation.UserName & "\" & SystemInformation.ComputerName & " (" & GetInstance() & ")" & vbLf & + My.Application.Info.Description.ToString() & " ver. " & My.Application.Info.Version.ToString() + EgtInit(0, sIniFile, sLogMsg) ' imposto chiave di protezione Dim sKey As String = String.Empty GetPrivateProfileString("General", "Key", "", sKey, m_sIniFile) @@ -105,7 +89,7 @@ Public Class Form1 ' imposto colori sfondo Dim BackTopColor As New Color3d(192, 192, 192) GetPrivateProfileColor("Scene", "BackTop", BackTopColor, m_sIniFile) - Dim BackBotColor As New Color3d(192, 192, 192) + Dim BackBotColor As New Color3d(BackTopColor) GetPrivateProfileColor("Scene", "BackBottom", BackBotColor, m_sIniFile) Scene1.SetViewBackground(BackTopColor, BackBotColor) ' imposto colore di evidenziazione @@ -208,6 +192,65 @@ Public Class Form1 End If ' Apro progetto vuoto m_Controller.NewProject(True) + ' Impostazione ToolTips + SetToolTips() + End Sub + + Private Sub ManageIstance() + Dim bCreated As Boolean + Try + m_objMutex = New Mutex(False, "Global\TestEIn", bCreated) + Catch + bCreated = False + End Try + If bCreated Then + ' Prima istanza + m_nInstance = 1 + ' Aggiorno stato istanze attive + WritePrivateProfileString("General", "Instances", m_nInstance, m_sIniFile) + Else + ' Leggo il massimo numero di istanze ammesse + Dim nMaxInst As Integer = GetPrivateProfileInt("General", "MaxInstances", 1, m_sIniFile) + nMaxInst = Max(1, Min(nMaxInst, 32)) + ' Cerco il primo indice di istanza libero (max 32) + Dim nTmp As Integer = GetPrivateProfileInt("General", "Instances", 0, m_sIniFile) + m_nInstance = 1 + Dim nMask As Integer = 1 + While (nTmp And nMask) <> 0 And m_nInstance <= m_nInstance + m_nInstance += 1 + nMask *= 2 + End While + ' Se l'indice supera il massimo + If m_nInstance > nMaxInst Then + ' porto in primo piano la prima istanza + Dim bFound As Boolean = False + ' processi del programma a 32 bit + Dim localProc As Process() = Process.GetProcessesByName("TestEInR32") + For Each p As Process In localProc + If p.Id <> Process.GetCurrentProcess().Id Then + bFound = True + ShowWindow(p.MainWindowHandle, SW.SHOWMAXIMIZED) + Exit For + End If + Next + ' se non trovati processi a 32 bit provo a 64 bit + If Not bFound Then + localProc = Process.GetProcessesByName("TestEInR64") + For Each p As Process In localProc + If p.Id <> Process.GetCurrentProcess().Id Then + bFound = True + ShowWindow(p.MainWindowHandle, SW.SHOWMAXIMIZED) + Exit For + End If + Next + End If + ' esco dal programma + End + End If + ' Aggiorno stato istanze attive + nTmp += (1 << (m_nInstance - 1)) + WritePrivateProfileString("General", "Instances", nTmp, m_sIniFile) + End If End Sub Private Sub Form1_Shown(sender As System.Object, e As EventArgs) Handles MyBase.Shown @@ -254,6 +297,10 @@ Public Class Form1 EgtExit() ' Rilascio mutex m_objMutex.Close() + ' Aggiorno istanze usate + Dim nTmp As Integer = GetPrivateProfileInt("General", "Instances", 0, m_sIniFile) + nTmp -= (1 << (m_nInstance - 1)) + WritePrivateProfileString("General", "Instances", nTmp, m_sIniFile) ' Disabilito gestore Idle RemoveHandler Application.Idle, AddressOf Application_Idle End Sub @@ -466,6 +513,44 @@ Public Class Form1 btnOffset.Enabled = bSelOk End Sub + Private Sub SetToolTips() + ' Draw + ToolTip1.SetToolTip(btnPoint, "Point") + ToolTip1.SetToolTip(btnLine2P, "Line : 2 points") + ToolTip1.SetToolTip(btnLinePDL, "Line : point, direction, length") + ToolTip1.SetToolTip(btnCircleCP, "Circle : center, point") + ToolTip1.SetToolTip(btnCircleCD, "Circle : center, diameter") + ToolTip1.SetToolTip(btnArcCSE, "Arc : center, start, end") + ToolTip1.SetToolTip(btnArc3P, "Arc : 3 points") + ToolTip1.SetToolTip(btnArcPDP, "Arc : start, direction, end") + ToolTip1.SetToolTip(btnRectangle2P, "Rectangle : 2 points") + ToolTip1.SetToolTip(btnPolygonSide, "Polygon : side with 2 points") + ToolTip1.SetToolTip(btnText, "Text" & vbCrLf & "Advanced Text (Shift)") + ' Construct + ToolTip1.SetToolTip(btnPlane, "Surface : between planar curves") + ToolTip1.SetToolTip(btnExtrude, "Surface : curve extrusion") + ToolTip1.SetToolTip(btnRevolve, "Surface : curve revolution") + ToolTip1.SetToolTip(btnScrew, "Surface : curve screwing") + ToolTip1.SetToolTip(btnRuled, "Surface : ruled between 2 curves") + ' Edit + ToolTip1.SetToolTip(btnDelete, "Delete Objects") + ToolTip1.SetToolTip(btnChangeLayer, "Change Object Layer to Current") + ToolTip1.SetToolTip(btnChangeColor, "Change Color" & vbCrLf & "Remove Color (Shift)") + ToolTip1.SetToolTip(btnInvertCurve, "Invert Curve") + ToolTip1.SetToolTip(btnExtendCurve, "Trim or Extend Curve") + ToolTip1.SetToolTip(btnBreakCurve, "Break Curve" & vbCrLf & "Split Curve in Pieces (Shift)") + ToolTip1.SetToolTip(btnJoinCurve, "Join Curves") + ToolTip1.SetToolTip(btnExplodeCurve, "Explode Text or Curve in Components") + ToolTip1.SetToolTip(btnSetCurveTh, "Set Curve Thickness and Extrusion") + ToolTip1.SetToolTip(btnInvertSurf, "Flip Surface Outside") + ' Transform + ToolTip1.SetToolTip(btnMove, "Object Move") + ToolTip1.SetToolTip(btnRotate, "Object Rotate" & vbCrLf & "3D Object Rotate (Shift)") + ToolTip1.SetToolTip(btnMirror, "Object Mirror" & vbCrLf & "3D Object Mirror (Shift)") + ToolTip1.SetToolTip(btnScale, "Object Scale" & vbCrLf & "3D Object Scale (Shift)") + ToolTip1.SetToolTip(btnOffset, "Curve Offset") + End Sub + '-------------------------------- Buttons -------------------------------------------------------- Private Sub btnNew_Click(sender As System.Object, e As System.EventArgs) Handles btnNew.Click @@ -493,14 +578,20 @@ Public Class Form1 Dim sFile As String = String.Empty GetPrivateProfileString("General", "LastNgeDir", "", sFile, m_sIniFile) sFile.TrimEnd("\"c) - sFile += "\New.nge" + sFile += "\New" & m_nInstance.ToString() & ".nge" m_Controller.SaveAsProject(sFile, nType) End If End Sub Private Sub btnSaveAs_Click(sender As System.Object, e As System.EventArgs) Handles btnSaveAs.Click Dim nType As NGE = GetPrivateProfileInt("GeomDB", "SaveType", NGE.CMPTEXT, m_sIniFile) - m_Controller.SaveAsProject(m_Controller.GetCurrFile(), nType) + Dim sFile As String = m_Controller.GetCurrFile() + If String.IsNullOrWhiteSpace(sFile) Then + GetPrivateProfileString("General", "LastNgeDir", "", sFile, m_sIniFile) + sFile.TrimEnd("\"c) + sFile += "\New" & m_nInstance.ToString() & ".nge" + End If + m_Controller.SaveAsProject(sFile, nType) End Sub Private Sub btnImport_Click(sender As System.Object, e As System.EventArgs) Handles btnImport.Click @@ -762,7 +853,11 @@ Public Class Form1 End Sub Private Sub btnBreakCurve_Click(sender As System.Object, e As System.EventArgs) Handles btnBreakCurve.Click - m_Controller.ExecuteCommand(CMD.BREAKCURVE) + If (ModifierKeys And Keys.Shift) <> Keys.Shift Then + m_Controller.ExecuteCommand(CMD.BREAKCURVE) + Else + m_Controller.ExecuteCommand(CMD.SPLITCURVE) + End If End Sub Private Sub btnJoinCurve_Click(sender As System.Object, e As System.EventArgs) Handles btnJoinCurve.Click @@ -1279,7 +1374,7 @@ Public Class Form1 ' nome file Dim sTitle As String = m_Controller.GetCurrFile() If String.IsNullOrEmpty(sTitle) Then - sTitle = "New" + sTitle = "New" & m_nInstance.ToString() End If ' indicazione di modificato If m_Controller.GetModified() Then diff --git a/GenInterface.vb b/GenInterface.vb index 52961b2..4735fbe 100644 --- a/GenInterface.vb +++ b/GenInterface.vb @@ -145,4 +145,15 @@ Public Const MF_SEPARATOR As UInt32 = &H800 Public Const WM_SYSCOMMAND As UInt32 = &H112 Public Const IDM_ABOUTBOX As UInt32 = &H10 +'-------------------------------- Windows -------------------------------------------------------- + +Public Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean +End Function +Public Enum SW As Integer + HIDE = 0 + SHOWMAXIMIZED = 3 + RESTORE = 9 +End Enum + + End Module diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index c9cbdf8..51a415e 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -11,17 +11,20 @@ Imports System.Runtime.InteropServices #If PLATFORM = "x64" Then #If DEBUG Then + #Else + #End If #Else #If DEBUG Then + #Else + #End If #End If - @@ -43,5 +46,5 @@ Imports System.Runtime.InteropServices ' utilizzando l'asterisco (*) come descritto di seguito: ' - - + + diff --git a/Resources/BreakCurve.png b/Resources/BreakCurve.png index a68906b..87a1b89 100644 Binary files a/Resources/BreakCurve.png and b/Resources/BreakCurve.png differ diff --git a/TestEIn.sln b/TestEIn.sln index d00a23f..e90dbbb 100644 --- a/TestEIn.sln +++ b/TestEIn.sln @@ -1,6 +1,8 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestEIn", "TestEIn.vbproj", "{579B15B3-63F6-4805-B293-7B8FB6CCD17C}" EndProject Global