diff --git a/Controller.vb b/Controller.vb index 151b371..b8d4357 100644 --- a/Controller.vb +++ b/Controller.vb @@ -83,7 +83,7 @@ Public Class Controller PLANE EXTRUDE REVOLVE - REVOLVEPLUS + SCREW RULED DELETE CHANGELAYER @@ -841,8 +841,8 @@ Public Class Controller Case CMD.REVOLVE Return ProcessRevolve() ' Revolve Plus - Case CMD.REVOLVEPLUS - Return ProcessRevolvePlus() + Case CMD.SCREW + Return ProcessScrew() ' Ruled Case CMD.RULED Return ProcessRuled() @@ -940,8 +940,8 @@ Public Class Controller DragExtrude() Case CMD.REVOLVE DragRevolve() - Case CMD.REVOLVEPLUS - DragRevolvePlus() + Case CMD.SCREW + DragScrew() Case CMD.TRIMEXTENDCURVE DragExtendCurve() Case CMD.SETCURVETHICKNESS @@ -1031,6 +1031,7 @@ Public Class Controller ' imposto stato a lunghezza per elevazione griglia m_nStep = 1 ' abilito dialogo + m_Scene.SetStatusNull() RaiseEvent PrepareInputBox("GRID", "Insert Elevation", "", False, False) m_nInpType = IBT.TY_DOUBLE Case 1 @@ -1157,6 +1158,7 @@ Public Class Controller Case 2 m_ptP2 = m_ptLast m_nStep = 3 + m_Scene.SetStatusNull() RaiseEvent PrepareInputBox("GRID ROTATE 3D", "Insert angle", "", False, False) m_nInpType = IBT.TY_DOUBLE Case 3 @@ -1996,6 +1998,7 @@ Public Class Controller m_ptP1 = m_ptLast m_dLast = DIAM_STD m_nStep = 2 + m_Scene.SetStatusNull() m_Scene.DisableDrag() RaiseEvent PrepareInputBox("CIRCLE CD", "Insert Diameter", "", False, True) m_nInpType = IBT.TY_DOUBLE @@ -2350,6 +2353,7 @@ Public Class Controller End If ' imposto stato a numero lati per PolygonSide m_nStep = 1 + m_Scene.SetStatusNull() ' abilito dialogo RaiseEvent PrepareInputBox("POLYGON SIDE", "Insert Side Nbr", "", False, False) m_nInpType = IBT.TY_INTEGER @@ -2415,11 +2419,13 @@ Public Class Controller Case 1 m_ptP1 = m_ptLast m_nStep = 2 + m_Scene.SetStatusNull() RaiseEvent PrepareInputBox("TEXT", "Insert Text", "", False, True) m_nInpType = IBT.TY_STRING m_sLast = String.Empty Case 2 m_nStep = 3 + m_Scene.SetStatusNull() RaiseEvent PrepareInputBox("TEXT", "Insert Height", "", False, True) m_nInpType = IBT.TY_DOUBLE SetInputBoxDouble(10) @@ -2491,11 +2497,13 @@ Public Class Controller m_ptP2.x += 10 End If m_nStep = 3 + m_Scene.SetStatusNull() RaiseEvent PrepareInputBox("TEXT+", "Insert Text", "", False, True) m_nInpType = IBT.TY_STRING m_sLast = String.Empty Case 3 m_nStep = 4 + m_Scene.SetStatusNull() RaiseEvent PrepareInputBox("TEXT+", "Insert Height", "Italic", True, True) m_nInpType = IBT.TY_DOUBLE m_dLast = 10 @@ -2597,8 +2605,10 @@ Public Class Controller ' imposto stato a lunghezza di estrusione m_nStep = 1 m_dLast = EXTRUDE_STD + m_Scene.SetStatusNull() ' abilito dialogo - RaiseEvent PrepareInputBox("EXTRUSION", "Insert length", "", False, True) + RaiseEvent PrepareInputBox("EXTRUSION", "Insert length", "CapEnds", False, True) + RaiseEvent SetInputBoxCheck(False) m_nInpType = IBT.TY_DOUBLE SetInputBoxDouble(m_dLast) DragExtrude() @@ -2608,7 +2618,8 @@ Public Class Controller ' creo la superficie di estrusione (a partire da un contorno selezionato) Dim VtExtr As Vector3d = Vector3d.Z_AX * m_dLast EnableCommandLog() - EgtCreateSurfTriMeshByExtrusion(GetCurrLayer(), EgtGetLastSelectedObj(), VtExtr, EPS_STM, REF_TY.GRID) + EgtCreateSurfTriMeshByExtrusion(GetCurrLayer(), EgtGetLastSelectedObj(), VtExtr, + m_bLast, EPS_STM, REF_TY.GRID) DisableCommandLog() EgtDraw() ' aggiorno stato @@ -2624,10 +2635,11 @@ Public Class Controller Private Sub DragExtrude() If m_nStep = 1 Then ' cancello eventuale vecchia superficie di estrusione - EgtErase(EgtGetFirstInGroup(m_Scene.GetDragGroup())) + EgtEmptyGroup(m_Scene.GetDragGroup()) ' creo la superficie di estrusione (a partire da un contorno selezionato) Dim VtExtr As Vector3d = EgtGetGridVersZ() * m_dLast - EgtCreateSurfTriMeshByExtrusion(m_Scene.GetDragGroup(), EgtGetLastSelectedObj(), VtExtr, EPS_STM_DRAG, REF_TY.GLOB) + EgtCreateSurfTriMeshByExtrusion(m_Scene.GetDragGroup(), EgtGetLastSelectedObj(), VtExtr, + m_bLast, EPS_STM_DRAG, REF_TY.GLOB) EgtDraw() End If End Sub @@ -2643,13 +2655,14 @@ Public Class Controller m_Scene.SetStatusSelPoint() m_nStep = 1 ' abilito dialogo - RaiseEvent PrepareInputBox("REVOLVE", "Insert First Point on Axis", "", False, False) + RaiseEvent PrepareInputBox("REVOLVE", "Insert First Point on Axis", "CapEnds", False, False) + RaiseEvent SetInputBoxCheck(False) m_nInpType = IBT.TY_POINT3D Case 1 m_ptP1 = m_ptLast m_nStep = 2 m_Scene.EnableDrag() - RaiseEvent PrepareInputBox("REVOLVE", "Insert Second Point on Axis", "", False, True) + RaiseEvent PrepareInputBox("REVOLVE", "Insert Second Point on Axis", "CapEnds", False, True) m_nInpType = IBT.TY_POINT3D Case 2 ' reset scena @@ -2657,9 +2670,9 @@ Public Class Controller ' creo la superficie di rivoluzione (i punti sono in globale) EnableCommandLog() Dim vtAx As Vector3d = m_ptLast - m_ptP1 - EgtCreateSurfTriMeshByScrewing(GetCurrLayer(), EgtGetLastSelectedObj(), - m_ptP1.Loc(GDB_ID.GRID), vtAx.Loc(GDB_ID.GRID), - 360, 0, EPS_STM, REF_TY.GRID) + EgtCreateSurfTriMeshByRevolve(GetCurrLayer(), EgtGetLastSelectedObj(), + m_ptP1.Loc(GDB_ID.GRID), vtAx.Loc(GDB_ID.GRID), + m_bLast, EPS_STM, REF_TY.GRID) DisableCommandLog() EgtDraw() ' aggiorno stato @@ -2675,11 +2688,18 @@ Public Class Controller Private Sub DragRevolve() If m_nStep = 2 Then EgtSetGeoLine(m_ptP1, m_ptLast) + ' cancello eventuale vecchia superficie + EgtEmptyGroup(m_Scene.GetDragGroup()) + ' creo la superficie di rivoluzione (i punti sono in globale) + Dim vtAx As Vector3d = m_ptLast - m_ptP1 + EgtCreateSurfTriMeshByRevolve(m_Scene.GetDragGroup(), EgtGetLastSelectedObj(), + m_ptP1, vtAx, m_bLast, EPS_STM_DRAG, REF_TY.GLOB) + EgtDraw() EgtDraw() End If End Sub - Private Function ProcessRevolvePlus() As Boolean + Private Function ProcessScrew() As Boolean Select Case m_nStep Case 0 ' deve esistere un gruppo corrente e devo poter creare il gruppo di drag @@ -2690,20 +2710,21 @@ Public Class Controller m_Scene.SetStatusSelPoint() m_nStep = 1 ' abilito dialogo - RaiseEvent PrepareInputBox("REVOLVE+", "Insert First Point on Axis", "", False, False) + RaiseEvent PrepareInputBox("SCREW", "Insert First Point on Axis", "", False, False) m_nInpType = IBT.TY_POINT3D Case 1 m_ptP1 = m_ptLast m_nStep = 2 m_Scene.EnableDrag() - RaiseEvent PrepareInputBox("REVOLVE+", "Insert Second Point on Axis", "", False, False) + RaiseEvent PrepareInputBox("SCREW", "Insert Second Point on Axis", "", False, False) m_nInpType = IBT.TY_POINT3D Case 2 m_ptP2 = m_ptLast m_dLast = 360 m_nStep = 3 + m_Scene.SetStatusNull() m_Scene.DisableDrag() - RaiseEvent PrepareInputBox("REVOLVE+", "Insert Angle", "", False, True) + RaiseEvent PrepareInputBox("SCREW", "Insert Angle", "", False, True) m_nInpType = IBT.TY_DOUBLE SetInputBoxDouble(m_dLast) Case 3 @@ -2711,8 +2732,9 @@ Public Class Controller m_dPrev = m_dLast m_dLast = 0 m_nStep = 4 + m_Scene.SetStatusNull() m_Scene.DisableDrag() - RaiseEvent PrepareInputBox("REVOLVE+", "Insert Move", "", False, True) + RaiseEvent PrepareInputBox("SCREW", "Insert Move", "", False, True) m_nInpType = IBT.TY_DOUBLE SetInputBoxDouble(m_dLast) Case 4 @@ -2736,7 +2758,7 @@ Public Class Controller Return True End Function - Private Sub DragRevolvePlus() + Private Sub DragScrew() If m_nStep = 2 Then EgtSetGeoLine(m_ptP1, m_ptLast) EgtDraw() @@ -3085,7 +3107,7 @@ Public Class Controller EgtExplodeCurveCompo(nId) Case GDB_TY.CRV_BEZ ' approssimo la curva di Bezier con archi - EgtExplodeCurveBezier(nId, 10 * EPS_SMALL, True) + EgtExplodeCurveBezier(nId, True, 10 * EPS_SMALL) Case GDB_TY.EXT_TEXT ' esplodo il testo nei suoi contorni EgtExplodeText(nId) @@ -3111,6 +3133,7 @@ Public Class Controller End If ' imposto stato a impostazione spessore curva m_nStep = 1 + m_Scene.SetStatusNull() ' abilito dialogo RaiseEvent PrepareInputBox("CURVE THICKNESS", "Insert Thickness", "Extraction from CPlane", False, True) m_nInpType = IBT.TY_DOUBLE @@ -3339,6 +3362,7 @@ Public Class Controller m_ptP2 = m_ptLast m_nStep = 3 m_dLast = 0 + m_Scene.SetStatusNull() ' abilito dialogo RaiseEvent PrepareInputBox("ROTATE 3D", "Insert angle", "Copy", False, True) m_nInpType = IBT.TY_DOUBLE @@ -3560,6 +3584,7 @@ Public Class Controller m_dPrev = 1 m_dLast = 1 m_nStep = 2 + m_Scene.SetStatusNull() RaiseEvent PrepareInputBox("SCALE", "Insert Factor", "Copy", False, True) m_nInpType = IBT.TY_DOUBLE SetInputBoxDouble(m_dLast) @@ -3630,6 +3655,7 @@ Public Class Controller m_d3Last(1) = 1 m_d3Last(2) = 1 m_nStep = 2 + m_Scene.SetStatusNull() m_Scene.DisableDrag() RaiseEvent PrepareInputBox("SCALE 3D", "Insert Factor", "Copy", False, True) m_nInpType = IBT.TY_3DOUBLE diff --git a/EgtInterface.vb b/EgtInterface.vb index 2782a8b..f052d29 100644 --- a/EgtInterface.vb +++ b/EgtInterface.vb @@ -915,7 +915,14 @@ End Function Public Function EgtCreateSurfTriMeshByExtrusion(ByVal nParentId 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 + ByVal bCapEnds As Boolean, ByVal dLinTol As Double, Optional ByVal nRefType As REF_TY = REF_TY.LOC) As Integer +End Function + + +Public Function EgtCreateSurfTriMeshByRevolve(ByVal nParentId As Integer, ByVal nCrvId As Integer, + ByRef PtAx As Point3d, ByRef VtAx As Vector3d, + ByVal bCapEnds As Boolean, ByVal dLinTol As Double, + Optional ByVal nRefType As REF_TY = REF_TY.LOC) As Integer End Function @@ -1040,7 +1047,7 @@ Public Function EgtExplodeCurveCompo(ByVal nId As Integer) As Boolean End Function -Public Function EgtExplodeCurveBezier(ByVal nId As Integer, ByVal dTolLin As Double, ByVal bArcsVsLines As Boolean) As Boolean +Public Function EgtExplodeCurveBezier(ByVal nId As Integer, ByVal bArcsVsLines As Boolean, ByVal dLinTol As Double) As Boolean End Function @@ -1183,6 +1190,10 @@ End Function Public Function EgtErase(ByVal nId As Integer) As Boolean End Function + +Public Function EgtEmptyGroup(ByVal nId As Integer) As Boolean +End Function + Public Function EgtGetType(ByVal nId As Integer) As GDB_TY End Function diff --git a/Form1.Designer.vb b/Form1.Designer.vb index f69ff5d..ec06410 100644 --- a/Form1.Designer.vb +++ b/Form1.Designer.vb @@ -25,7 +25,6 @@ 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() @@ -108,7 +107,7 @@ Partial Class Form1 Me.btnLine2P = New System.Windows.Forms.Button() Me.TabConstruct = New System.Windows.Forms.TabPage() Me.btnRuled = New System.Windows.Forms.Button() - Me.btnRevolve = New System.Windows.Forms.Button() + Me.btnScrew = New System.Windows.Forms.Button() Me.btnExtrude = New System.Windows.Forms.Button() Me.btnPlane = New System.Windows.Forms.Button() Me.TabEdit = New System.Windows.Forms.TabPage() @@ -155,6 +154,8 @@ 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.TableLayoutPanel1.SuspendLayout() Me.TabControl1.SuspendLayout() Me.TabHome.SuspendLayout() @@ -200,17 +201,6 @@ 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) @@ -1502,8 +1492,9 @@ Partial Class Form1 'TabConstruct ' Me.TabConstruct.BackColor = System.Drawing.SystemColors.Control - Me.TabConstruct.Controls.Add(Me.btnRuled) Me.TabConstruct.Controls.Add(Me.btnRevolve) + Me.TabConstruct.Controls.Add(Me.btnRuled) + Me.TabConstruct.Controls.Add(Me.btnScrew) Me.TabConstruct.Controls.Add(Me.btnExtrude) Me.TabConstruct.Controls.Add(Me.btnPlane) Me.TabConstruct.Location = New System.Drawing.Point(23, 4) @@ -1521,7 +1512,8 @@ Partial Class Form1 Me.btnRuled.FlatStyle = System.Windows.Forms.FlatStyle.Flat Me.btnRuled.Image = CType(resources.GetObject("btnRuled.Image"), System.Drawing.Image) Me.btnRuled.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnRuled.Location = New System.Drawing.Point(0, 144) + Me.btnRuled.Location = New System.Drawing.Point(0, 192) + Me.btnRuled.Margin = New System.Windows.Forms.Padding(0) Me.btnRuled.Name = "btnRuled" Me.btnRuled.Size = New System.Drawing.Size(56, 48) Me.btnRuled.TabIndex = 36 @@ -1529,22 +1521,23 @@ Partial Class Form1 Me.btnRuled.TextAlign = System.Drawing.ContentAlignment.BottomCenter Me.btnRuled.UseVisualStyleBackColor = False ' - 'btnRevolve + 'btnScrew ' - 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(0, 96) - Me.btnRevolve.Name = "btnRevolve" - Me.btnRevolve.Size = New System.Drawing.Size(56, 48) - Me.btnRevolve.TabIndex = 35 - Me.btnRevolve.Text = "Revolve" - Me.btnRevolve.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnRevolve.UseVisualStyleBackColor = False + Me.btnScrew.FlatAppearance.BorderColor = System.Drawing.SystemColors.Control + Me.btnScrew.FlatAppearance.BorderSize = 0 + Me.btnScrew.FlatAppearance.MouseDownBackColor = System.Drawing.SystemColors.Control + Me.btnScrew.FlatAppearance.MouseOverBackColor = System.Drawing.SystemColors.GradientInactiveCaption + Me.btnScrew.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnScrew.Image = CType(resources.GetObject("btnScrew.Image"), System.Drawing.Image) + Me.btnScrew.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnScrew.Location = New System.Drawing.Point(0, 144) + Me.btnScrew.Margin = New System.Windows.Forms.Padding(0) + Me.btnScrew.Name = "btnScrew" + Me.btnScrew.Size = New System.Drawing.Size(56, 48) + Me.btnScrew.TabIndex = 35 + Me.btnScrew.Text = "Screw" + Me.btnScrew.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnScrew.UseVisualStyleBackColor = False ' 'btnExtrude ' @@ -1556,6 +1549,7 @@ Partial Class Form1 Me.btnExtrude.Image = CType(resources.GetObject("btnExtrude.Image"), System.Drawing.Image) Me.btnExtrude.ImageAlign = System.Drawing.ContentAlignment.TopCenter Me.btnExtrude.Location = New System.Drawing.Point(0, 48) + Me.btnExtrude.Margin = New System.Windows.Forms.Padding(0) Me.btnExtrude.Name = "btnExtrude" Me.btnExtrude.Size = New System.Drawing.Size(56, 48) Me.btnExtrude.TabIndex = 34 @@ -1573,6 +1567,7 @@ Partial Class Form1 Me.btnPlane.Image = CType(resources.GetObject("btnPlane.Image"), System.Drawing.Image) Me.btnPlane.ImageAlign = System.Drawing.ContentAlignment.TopCenter Me.btnPlane.Location = New System.Drawing.Point(0, 0) + Me.btnPlane.Margin = New System.Windows.Forms.Padding(0) Me.btnPlane.Name = "btnPlane" Me.btnPlane.Size = New System.Drawing.Size(56, 48) Me.btnPlane.TabIndex = 33 @@ -2088,6 +2083,35 @@ Partial Class Form1 ' Me.FormTimer.Interval = 50 ' + '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 + ' + '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 + ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -2209,7 +2233,7 @@ End Sub Friend WithEvents InputCheck As System.Windows.Forms.CheckBox Friend WithEvents InputText As System.Windows.Forms.TextBox Friend WithEvents btnCircleCP As System.Windows.Forms.Button - Friend WithEvents btnRevolve As System.Windows.Forms.Button + Friend WithEvents btnScrew As System.Windows.Forms.Button Friend WithEvents ImageList2 As System.Windows.Forms.ImageList Friend WithEvents btnCPlane As System.Windows.Forms.Button Friend WithEvents TabCPlane As System.Windows.Forms.TabPage @@ -2265,5 +2289,6 @@ End Sub Friend WithEvents btnText As System.Windows.Forms.Button Friend WithEvents btnPolygonSide As System.Windows.Forms.Button Friend WithEvents tsStatusReg As System.Windows.Forms.ToolStripStatusLabel + Friend WithEvents btnRevolve As System.Windows.Forms.Button End Class diff --git a/Form1.resx b/Form1.resx index cbb78fd..e794912 100644 --- a/Form1.resx +++ b/Form1.resx @@ -871,7 +871,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4 - DQAAAk1TRnQBSQFMAgEBDgEAAdABDgHQAQ4BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DQAAAk1TRnQBSQFMAgEBDgEAAeABDgHgAQ4BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -939,45 +939,45 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADW - CAAAAk1TRnQBSQFMAgEBAgEAAfABBQHwAQUBEAEAARABAAT/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= + 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 @@ -1097,6 +1097,27 @@ 7jjsWENEgupQHHZ0iEhQHY7DjjkiElSn4rCjIiJBdToOO0ZEJKi6xFEO9WjULY70EOPlf7GoaxzpIY+n l+geR3pYuYA+11N6+IML1H4HLvn4UQ7xEovL4rDjSHYcyY4j2XEkO45kx3HC4w3Q1q4ttTanIgAAAABJ RU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQffAR8POQ1hz9wZAAADZElEQVRYR8WUSUxTURSG + f924cOVGdyYmLtm50hBNXKALF8aFQxyIYSpgoaUUASuTQ4xgTCAu1MSdcaUxyEJjjFExUWsAkaBgocjk + AILUkeH1+N8OBOspNMY8m3x97X/vPcN95xyIyH9FFVMDy+FoG4RndLO+nhqqmArIau1H4XtB9idBfucG + bU8qqOJSYM+N6yh4JygbF5R/FuSNCdY7V2h7l0IVFwMbnVtwoCfq2FD5dRrekMAzMqbtXwpVXAwceizw + 8torvwmOkZqZz/B9n0UBNWfPIe3MYqhiMrDzci5ygnT+ReD7KTg+IzgbDqJubhxe3oZrmNv0s8lQxWQg + 894UPHzvvh+CqlliCZqkGw3Si6NTAgeLsuBlhnY2GaqogdVpa7C/W1BBR8Z5dZjXTy5KB3mGct6Ki8VY + 1HdHO58MVdTA7mtFyBuIvvdqZl5DsZY0yRtckHaUhyyUMgBHgNt1GxqqqMG+vwnnaPT6TebxAM7JKM5L + D1/BHLwfBZl9goz6lZoNDVXUYADt8LDSTfZ1FE6SE6RBxhjEQDSAD4IsFunB5nWaDQ1VjJO+Fquw6+oV + 7GsOIvs5B067KTJB4SvTcnzfbwTFzLi4Pxx7Co4EqAcmUNT7AIVdezW7C1FFA7aedGDbLWbzRJDzgk5Z + gM7eqEMXs3SxHkqGOYA4EUuZuZfdUcYbOjrB38TN/7lccw1M0twyzYdBF9N927HjPrNhpsaZZ4RG6cSM + XuPgNyJOLVSwCCtCYcJOMbBbzKQsZmG6gyHNj0EX997lVb9mhkN0SgPGmKn+yPCZjg4gQ9WchTorhAYr + iEbrJeqtAGqsKY5nKzqqJ6NB59BOfudh1dcfQsapNOzu4JUzczer2sz5clZ+JXv/GKvft4BqHjgt02iU + IVySTj4DqA1/RRmdl9Cxm8G7OJwcg+YVdiX6ivj7QzjQsolF1IuSQT+v18/M/aia8XPw+Nl2iTxlJ7Ti + jNxlN7QwmNts04e8tafwvvdHKB31w/22jQX5KNFXxJ8m2okq2okq/gv4MV/zJK7HUUVD7GANSdfWUyF2 + /q8DmD8c+51SIGZfbP/Cs1xKsl8T4/CTaCxOJKAY2vr8npgdPpL40MREFhhaNKDEc6mginaiinaiinai + inaiinaiinaiivYh+AXCneCmEYDZ6QAAAABJRU5ErkJggg== @@ -1121,25 +1142,23 @@ KAWuTvelAAAAAElFTkSuQmCC - + - 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 @@ -1371,12 +1390,12 @@ - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQffARMLMg3P5BK2AAAA4UlEQVRYR+2OwQ0CMQwE - UwAlUQ91RKIRRBv34U0ldBFsQ6I4LCGOwPfgIo1yXke3E1JKqwJDT2A4Ah268M4CDEdwEwi75ZJReSMQ - zreUqfNPwLBGyo9LGhI4XQ+bwFcFSrlFwCgBQ0aVWwUMEjhsy2cEBiVeA1Q+KzAgoYd35cysANOR0MMm - sAn8iwCdfflWCwcBLici3zLnhQw/FuBSIj6/RaL8QEIW6KDeIoEO8uZRWgvE8gMrdOjCux5cqu56aYEO - XXjXoxSvKZCRuX3gDQw9gaEnMPQEhp7A0BMY+pHCHcN+uyEht9XQAAAAAElFTkSuQmCC + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAAd0SU1FB98BEwsyDc/kErYAAADhSURBVFhH7Y7BDQIxDARTACVRD3VEohFEG/fh + TSV0EWxDojgsIY7A9+AijXJeR7cTUkqrAkNPYDgCHbrwzgIMR3ATCLvlklF5IxDOt5Sp80/AsEbKj0sa + EjhdD5vAVwVKuUXAKAFDRpVbBQwSOGzLZwQGJV4DVD4rMCChh3flzKwA05HQwyawCfyLAJ19+VYLBwEu + JyLfMueFDD8W4FIiPr9FovxAQhbooN4igQ7y5lFaC8TyAyt06MK7Hlyq7nppgQ5deNejFK8pkJG5feAN + DD2BoScw9ASGnsDQExj6kcIdw367ISG31dAAAAAASUVORK5CYII= diff --git a/Form1.vb b/Form1.vb index e66a7df..360f1e7 100644 --- a/Form1.vb +++ b/Form1.vb @@ -445,6 +445,7 @@ Public Class Form1 btnPlane.Enabled = bLayerOk And bSelOk btnExtrude.Enabled = bLayerOk And bSelOk btnRevolve.Enabled = bLayerOk And bSelOk + btnScrew.Enabled = bLayerOk And bSelOk btnRuled.Enabled = bLayerOk And bSelOk ' Edit btnDelete.Enabled = bSelOk @@ -724,11 +725,11 @@ Public Class Form1 End Sub Private Sub btnRevolve_Click(sender As System.Object, e As System.EventArgs) Handles btnRevolve.Click - If (ModifierKeys And Keys.Shift) <> Keys.Shift Then - m_Controller.ExecuteCommand(CMD.REVOLVE) - Else - m_Controller.ExecuteCommand(CMD.REVOLVEPLUS) - End If + m_Controller.ExecuteCommand(CMD.REVOLVE) + End Sub + + Private Sub btnScrew_Click(sender As System.Object, e As System.EventArgs) Handles btnScrew.Click + m_Controller.ExecuteCommand(CMD.SCREW) End Sub Private Sub btnRuled_Click(sender As System.Object, e As System.EventArgs) Handles btnRuled.Click diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index f6f68d6..c9cbdf8 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -43,5 +43,5 @@ Imports System.Runtime.InteropServices ' utilizzando l'asterisco (*) come descritto di seguito: ' - - + + diff --git a/Resources/Revolve.png b/Resources/Revolve.png index 95be9ef..0132430 100644 Binary files a/Resources/Revolve.png and b/Resources/Revolve.png differ diff --git a/Resources/Screw.png b/Resources/Screw.png new file mode 100644 index 0000000..89d167c Binary files /dev/null and b/Resources/Screw.png differ diff --git a/Scene.vb b/Scene.vb index cd7efa9..32399df 100644 --- a/Scene.vb +++ b/Scene.vb @@ -27,6 +27,7 @@ Public Class Scene Private m_nOldStatus As ST Private Enum ST As Integer NULL = 0 + SEL PAN ROT ZOOMWIN @@ -68,8 +69,8 @@ Public Class Scene SetStyle(ControlStyles.UserPaint, True) SetStyle(ControlStyles.AllPaintingInWmPaint, True) m_nGseContext = 0 - m_nStatus = ST.NULL - m_nOldStatus = ST.NULL + m_nStatus = ST.SEL + m_nOldStatus = ST.SEL m_nSnapType = SP.PT_GRID RaiseEvent OnChangedSnapPointType(Me, m_nSnapType) m_bAlsoSelDir = False @@ -87,7 +88,7 @@ Public Class Scene m_bZwOutline = True m_ZwColor.Setup(0, 0, 0) m_DstLnColor.Setup(255, 0, 0) - Cursor = Cursors.Default + Cursor = New Cursor(Me.GetType(), "Select.cur") End Sub '---- Initials -------- @@ -206,14 +207,14 @@ Public Class Scene EgtSetCurrentContext(m_nGseContext) ' --- Pressione tasto sinistro --- If e.Button = Windows.Forms.MouseButtons.Left Then - ' se stato WINSEL oppure NULL e premuto SHIFT allora inizio selezione a finestra + ' se stato WINSEL oppure SEL e premuto SHIFT allora inizio selezione a finestra If m_nStatus = ST.WINSEL Or - (m_nStatus = ST.NULL And (ModifierKeys And Keys.Shift) = Keys.Shift) Then + (m_nStatus = ST.SEL And (ModifierKeys And Keys.Shift) = Keys.Shift) Then Cursor = New Cursor(Me.GetType(), "WinSelect.cur") m_PrevPoint = e.Location m_nStatus = ST.WINSEL - ' se stato NULL (selezione), SELPART, SELLAYER o ANALYZE - ElseIf m_nStatus = ST.NULL Or m_nStatus = ST.SELPART Or + ' se stato SEL, SELPART, SELLAYER o ANALYZE + ElseIf m_nStatus = ST.SEL Or m_nStatus = ST.SELPART Or m_nStatus = ST.SELLAYER Or m_nStatus = ST.ANALYZE Then If m_nStatus <> ST.ANALYZE Then Cursor = New Cursor(Me.GetType(), "Select.cur") @@ -238,14 +239,14 @@ Public Class Scene If nId <> GDB_ID.NULL Then ' evento per entità selezionate Select Case m_nStatus - Case ST.NULL + Case ST.SEL RaiseEvent OnMouseSelectedObj(Me, nId, True) Case ST.SELPART RaiseEvent OnMouseSelectedPart(Me, nId) - m_nStatus = ST.NULL + m_nStatus = ST.SEL Case ST.SELLAYER RaiseEvent OnMouseSelectedLayer(Me, nId) - m_nStatus = ST.NULL + m_nStatus = ST.SEL Case Else RaiseEvent OnMouseAnalyzed(Me, nId) End Select @@ -287,7 +288,7 @@ Public Class Scene ' lancio l'evento per visualizzare la distanza RaiseEvent OnShowDistance(Me, sOut.ToString()) m_nStatus = ST.GETDIST - m_nOldStatus = ST.NULL + m_nOldStatus = ST.SEL End If ' se stato selezione punto ElseIf m_nStatus = ST.SELPOINT Then @@ -406,8 +407,8 @@ Public Class Scene RaiseEvent OnMouseSelectedObj(Me, nId, (nNextId = GDB_ID.NULL)) nId = nNextId End While - ' ritorno allo stato NULL - m_nStatus = ST.NULL + ' ritorno allo stato SEL + m_nStatus = ST.SEL Cursor = New Cursor(Me.GetType(), "Select.cur") End If ' --- Rilascio tasto medio (rotella) --- @@ -419,9 +420,9 @@ Public Class Scene ' eventuale ripristino vecchio stato If RestoreStatus() Then ' non devo fare alcunché - ' reset dello stato se non NULL - ElseIf m_nStatus <> ST.NULL Then - m_nStatus = ST.NULL + ' reset dello stato se non SEL + ElseIf m_nStatus <> ST.SEL Then + m_nStatus = ST.SEL Cursor = New Cursor(Me.GetType(), "Select.cur") End If ' --- Rilascio tasto destro --- @@ -445,8 +446,9 @@ Public Class Scene EgtSetCurrentContext(m_nGseContext) End If ' Se sono abbastanza all'interno della scena (10% della dimensione), imposto il focus - If e.Location.X > 0.1 * Size.Width AndAlso e.Location.X < 0.9 * Size.Width AndAlso - e.Location.Y > 0.1 * Size.Height AndAlso e.Location.Y < 0.9 * Size.Height Then + Const BordPu As Double = 0.10000000000000001 + If e.Location.X > BordPu * Size.Width AndAlso e.Location.X < (1 - BordPu) * Size.Width AndAlso + e.Location.Y > BordPu * Size.Height AndAlso e.Location.Y < (1 - BordPu) * Size.Height Then Focus() End If ' Visualizzo le coordinate del mouse @@ -472,7 +474,7 @@ Public Class Scene EgtPanCamera(m_PrevPoint, e.Location, True) m_PrevPoint = e.Location Else - m_nStatus = ST.NULL + m_nStatus = ST.SEL End If ' --- Altri casi dipendenti dallo stato --- ElseIf m_nStatus = ST.WINSEL Then @@ -508,6 +510,8 @@ Public Class Scene MyBase.OnMouseMove(e) End If If m_nStatus = ST.NULL Then + Cursor = Cursors.Default + ElseIf m_nStatus = ST.SEL Then Cursor = New Cursor(Me.GetType(), "Select.cur") End If ' Ripristino il contesto originale @@ -527,7 +531,7 @@ Public Class Scene End If ' calcolo coefficiente Const WHEEL_DELTA As Double = 120 - Dim dCoeff As Double = 1 - 0.1 * Abs(e.Delta) / WHEEL_DELTA + Dim dCoeff As Double = 1 - 0.10000000000000001 * Abs(e.Delta) / WHEEL_DELTA If e.Delta < 0 Then dCoeff = 1 / dCoeff End If @@ -673,7 +677,7 @@ Public Class Scene Private Sub PrepareMenuScene() ' per selezione oggetti - If m_nStatus = ST.NULL Then + If m_nStatus = ST.SEL Then MenuScene.Visible = True For Each i As ToolStripItem In MenuScene.Items If i.Name = "cmdSelectAll" Then @@ -822,7 +826,7 @@ Public Class Scene '---- Status management ------------- Private Function IsRestorableCurrStatus() As Boolean Select Case m_nStatus - Case ST.NULL, ST.ANALYZE, ST.SELPART, ST.SELLAYER, ST.GETDIST, ST.GETDIST2, ST.SELPOINT, ST.SELPOINTZ + Case ST.NULL, ST.SEL, ST.ANALYZE, ST.SELPART, ST.SELLAYER, ST.GETDIST, ST.GETDIST2, ST.SELPOINT, ST.SELPOINTZ Return True Case Else Return False @@ -837,7 +841,11 @@ Public Class Scene Private Function RestoreStatus() As Boolean ' eventuale ripristino vecchio stato - If m_nOldStatus = ST.NULL Or m_nOldStatus = ST.SELPART Or m_nOldStatus = ST.SELLAYER Then + If m_nOldStatus = ST.NULL Then + m_nStatus = m_nOldStatus + Cursor = Cursors.Default + Return True + ElseIf m_nOldStatus = ST.SEL Or m_nOldStatus = ST.SELPART Or m_nOldStatus = ST.SELLAYER Then m_nStatus = m_nOldStatus Cursor = New Cursor(Me.GetType(), "Select.cur") Return True @@ -857,6 +865,10 @@ Public Class Scene Return False End Function + Public Sub SetStatusNull() + m_nStatus = ST.NULL + End Sub + Public Sub SetStatusAnalyze() m_nStatus = ST.ANALYZE End Sub @@ -879,8 +891,8 @@ Public Class Scene ' reset entità non selezionabili EgtUnselectableClearAll() ' imposto lo stato - m_nStatus = ST.NULL - m_nOldStatus = ST.NULL + m_nStatus = ST.SEL + m_nOldStatus = ST.SEL ' disabilito scelta punto tangente, perpendicolare e minima distanza DisableTangentPoint() DisablePerpendicularPoint() @@ -895,15 +907,15 @@ Public Class Scene Public Sub ResetStatusAnalyze() If m_nStatus = ST.ANALYZE Then - m_nStatus = ST.NULL - m_nOldStatus = ST.NULL + m_nStatus = ST.SEL + m_nOldStatus = ST.SEL End If End Sub Public Sub ResetStatusGetDistance() If m_nStatus = ST.GETDIST Or m_nStatus = ST.GETDIST2 Then - m_nStatus = ST.NULL - m_nOldStatus = ST.NULL + m_nStatus = ST.SEL + m_nOldStatus = ST.SEL End If EgtResetGeoLine() RaiseEvent OnCloseGetDist(Me) diff --git a/TestEIn.vbproj b/TestEIn.vbproj index 1581196..f631ec1 100644 --- a/TestEIn.vbproj +++ b/TestEIn.vbproj @@ -494,6 +494,9 @@ + + + IF "$(PlatformName)"=="x86" IF "$(ConfigurationName)" == "Release" copy $(TargetPath) c:\EgtProg\TestEIn\TestEInR32.exe