HLCt simplified grating

This commit is contained in:
Mans 2021-04-19 11:06:10 +02:00
parent a7e7b47633
commit 1e3300e232
14 changed files with 1357 additions and 724 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -244,7 +244,7 @@ Public Class Individual
If AppForm.fillMode Then
Grating_Fill.Calculate_Grid()
Multiple_Drawing.Create_Models_For_Drawing() ' Ska flyttas till sist i if satsen
Multiple_Drawing.Build_Grid() ' Ska flyttas till sist i if satsen
Multiple_3D.BuildGrid()
Else

View File

@ -10,9 +10,6 @@ Public Class Multiple_3D
Dim pointTable1 As DataTable
pointTable1 = Data.grossAreaPoints
Dim exportTable As DataTable
exportTable = User_Input.Create_ExportTable()

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,786 @@
Imports SldWorks
Public Class Multiple_Drawing2
Public Shared Sub Create_Models_For_Drawing()
Dim gratingsPointsDS As DataSet = Create_GratingPoints()
Dim gratingHeight As Decimal = User_Input.gratingHeight / 1000
Dim swApp As SldWorks.SldWorks
swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks)
Dim Model As ModelDoc2
Dim RootPoint(2) As Decimal
Dim Normal(2) As Decimal
swApp.UserControl = True
Dim swSkMgr As SketchManager
Dim longstatus As Integer
Dim boolstatus As Boolean
Dim swModelDocExtension As ModelDocExtension
Dim status As Boolean
Dim swFeatureMgr As FeatureManager
Dim swFeature As Feature
Dim iPart As PartDoc
Dim numOfGratings As Integer = Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal
For i = 0 To numOfGratings - 1
Model = swApp.NewDocument("C:\ProgramData\SOLIDWORKS\SOLIDWORKS 2020\templates\part.prtdot", 0, 0, 0)
swSkMgr = Model.SketchManager
swSkMgr.InsertSketch(True)
boolstatus = Model.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Model.ClearSelection2(True)
For Each DR As DataRow In gratingsPointsDS.Tables(i).Rows
Dim skPoint As SketchPoint
Dim pX = DR("X")
Dim pY = DR("Y")
skPoint = swSkMgr.CreatePoint(pX, pY, 0)
Next
For Each DR1 As DataRow In gratingsPointsDS.Tables(i).Rows
Dim skLine As SketchLine
Dim rowIndex = gratingsPointsDS.Tables(i).Rows.IndexOf(DR1)
Dim DR2 As DataRow
Try
DR2 = gratingsPointsDS.Tables(i).Rows(rowIndex + 1)
Catch ex As Exception
DR2 = gratingsPointsDS.Tables(i).Rows(0)
End Try
Dim pX1 = DR1("X")
Dim pY1 = DR1("Y")
Dim pX2 = DR2("X")
Dim pY2 = DR2("Y")
skLine = swSkMgr.CreateLine(pX1, pY1, 0, pX2, pY2, 0)
Next
swSkMgr.InsertSketch(True)
swModelDocExtension = Model.Extension
status = swModelDocExtension.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
swFeatureMgr = Model.FeatureManager
swFeature = swFeatureMgr.FeatureExtrusion3(True, False, False, 0, 0, gratingHeight, 0, False, False, False, False, 0, 0, False, False, False, False, True, True, True, 0, 0, False)
' MIddle points if needed
Model.ClearSelection2(True)
boolstatus = Model.Extension.SelectByID2("Front Plane", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Model.FeatureManager.InsertRefPlane(8, gratingHeight, 0, 0, 0, 0)
iPart = swApp.ActiveDoc
Dim newName As String
newName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\simplified_grating_" & i + 1 & ".SLDPRT"
' Title head data
longstatus = iPart.SaveAs3(newName, 0, 0)
swApp.CloseDoc(newName)
Next
' --- Assembly ---
Dim assembly As IAssemblyDoc
Dim AssemblyExtension As SldWorks.ModelDocExtension
Model = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2020\templates\Assembly.asmdot", 0, 0, 0)
assembly = Model
AssemblyExtension = assembly.Extension
Dim compNames(numOfGratings - 1) As String
Dim coordNames(numOfGratings - 1) As String
Dim transMatrix As Object = Nothing
For i = 0 To numOfGratings - 1
compNames(i) = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\simplified_grating_" & i + 1 & ".SLDPRT"
coordNames(i) = ""
Next
Dim assemComps As Object
assemComps = assembly.AddComponents3((compNames), (transMatrix), (coordNames))
Model.ViewZoomtofit2()
longstatus = Model.SaveAs3(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\simplified_grating_assembly.SLDASM", 0, 0)
' --- Delete Obsolete ---
Dim listOfObsolete As List(Of Integer)
listOfObsolete = Multiple_3D.Find_Obsolete()
For i = 0 To listOfObsolete.Count - 1
assembly.ClearSelection2(True)
boolstatus = AssemblyExtension.SelectByID2("simplified_grating_" & listOfObsolete(i) & "-1@simplified_grating_assembly", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
assembly.EditDelete
My.Computer.FileSystem.DeleteFile(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\simplified_grating_" & listOfObsolete(i) & ".SLDPRT")
Next
Dim swErrors As Integer
Dim swWarnings As Integer
boolstatus = assembly.Save3(1, swErrors, swWarnings)
End Sub
Private Shared Function Create_GratingPoints()
Dim pointsDS As New DataSet
Dim numOfGratings As Integer = Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal
For i = 0 To numOfGratings - 1
Dim pointsDT As New DataTable
pointsDT.Columns.Add("NAME", GetType(String))
pointsDT.Columns.Add("TYPE", GetType(String))
pointsDT.Columns.Add("X", GetType(Decimal))
pointsDT.Columns.Add("Y", GetType(Decimal))
Dim GAPointsDT As New DataTable
GAPointsDT.Columns.Add("NAME", GetType(String))
GAPointsDT.Columns.Add("X", GetType(Decimal))
GAPointsDT.Columns.Add("Y", GetType(Decimal))
' --- Determine grossArea points ----
Dim pX(3) As Decimal
Dim pY(3) As Decimal
Dim columnNum As Integer = (i + Grating_Fill.numOfHorizontal) Mod Grating_Fill.numOfHorizontal
If columnNum <> (Grating_Fill.numOfHorizontal - 1) Then
' Columnn: alla utom sista
pX(0) = Data.grossAreaPoints.Rows(0)("X") + Grating_Fill.minLength * columnNum / 1000
pX(1) = pX(0) + Grating_Fill.minLength / 1000
pX(2) = pX(1)
pX(3) = pX(0)
Else
' Column: sista
pX(0) = Data.grossAreaPoints.Rows(0)("X") + Grating_Fill.minLength * columnNum / 1000
pX(1) = Data.grossAreaPoints.Rows(1)("X")
pX(2) = pX(1)
pX(3) = pX(0)
End If
Dim rowNum As Integer = Math.Floor(i / Grating_Fill.numOfHorizontal)
If rowNum < Grating_Fill.numOfVertical - 2 Then
' Row: alla utom sista och näst sista
pY(0) = Data.grossAreaPoints.Rows(0)("Y") - Grating_Fill.maxSingleWidth * rowNum / 1000
pY(1) = pY(0)
pY(2) = pY(0) - Grating_Fill.maxSingleWidth / 1000
pY(3) = pY(2)
ElseIf rowNum < Grating_Fill.numOfVertical - 1 Then
' Row: Näst sista
pY(0) = Data.grossAreaPoints.Rows(0)("Y") - Grating_Fill.maxSingleWidth * rowNum / 1000
pY(1) = pY(0)
If Grating_Fill.widthRevNeeded = True Then
pY(2) = pY(0) - Grating_Fill.revWidth / 1000
Else
pY(2) = pY(0) - Grating_Fill.maxSingleWidth / 1000
End If
pY(3) = pY(2)
Else
' Row: Sista
If Grating_Fill.widthRevNeeded = True Then
pY(0) = Data.grossAreaPoints.Rows(0)("Y") - Grating_Fill.maxSingleWidth * (rowNum - 1) / 1000 - Grating_Fill.revWidth / 1000
Else
pY(0) = Data.grossAreaPoints.Rows(0)("Y") - Grating_Fill.maxSingleWidth * rowNum / 1000
End If
pY(1) = pY(0)
pY(2) = Data.grossAreaPoints.Rows(3)("Y")
pY(3) = pY(2)
End If
For j = 0 To 3
Dim DR As DataRow = pointsDT.NewRow()
DR("NAME") = "GA_" & j + 1
DR("TYPE") = "GA"
DR("X") = pX(j)
DR("Y") = pY(j)
pointsDT.Rows.Add(DR)
DR = GAPointsDT.NewRow()
DR("NAME") = "GA_" & j + 1
DR("X") = pX(j)
DR("Y") = pY(j)
GAPointsDT.Rows.Add(DR)
Next
' --- Add recess points ---
Dim recessPointsDT As New DataTable
recessPointsDT.Columns.Add("NAME", GetType(String))
recessPointsDT.Columns.Add("TYPE", GetType(String))
recessPointsDT.Columns.Add("SIDE", GetType(Integer))
recessPointsDT.Columns.Add("X", GetType(Decimal))
recessPointsDT.Columns.Add("Y", GetType(Decimal))
For j = 1 To 4
For Each DR As DataRow In Data.gratingPoints.Rows
Dim recessDR As DataRow = recessPointsDT.NewRow()
recessDR("NAME") = DR("NAME")
recessDR("SIDE") = j
recessDR("X") = DR("X")
recessDR("Y") = DR("Y")
Dim pointName As String = DR("NAME")
If pointName.Substring(0, 2) = "CA" Then
recessDR("TYPE") = "Corner Angle"
ElseIf pointName.Substring(0, 2) = "CR" Then
recessDR("TYPE") = "Corner Rectangle"
ElseIf pointName.Substring(0, 2) = "CS" Then
recessDR("TYPE") = "Side Rectangle"
Else
Continue For
End If
If j = 1 Then
If DR("Y") = pointsDT.Rows(0)("Y") Then
If DR("X") >= pointsDT.Rows(0)("X") AndAlso DR("X") <= pointsDT.Rows(1)("X") Then
recessPointsDT.Rows.Add(recessDR)
End If
End If
ElseIf j = 2 Then
If DR("X") = pointsDT.Rows(1)("X") Then
If DR("Y") <= pointsDT.Rows(1)("Y") AndAlso DR("Y") >= pointsDT.Rows(2)("Y") Then
recessPointsDT.Rows.Add(recessDR)
End If
End If
ElseIf j = 3 Then
If DR("Y") = pointsDT.Rows(2)("Y") Then
If DR("X") <= pointsDT.Rows(2)("X") AndAlso DR("X") >= pointsDT.Rows(3)("X") Then
recessPointsDT.Rows.Add(recessDR)
End If
End If
Else
If DR("X") = pointsDT.Rows(3)("X") Then
If DR("Y") >= pointsDT.Rows(3)("Y") AndAlso DR("Y") <= pointsDT.Rows(0)("Y") Then
recessPointsDT.Rows.Add(recessDR)
End If
End If
End If
Next
Next
' --- intersecting recesses ---
For Each DR As DataRow In Data.recessData.Rows
If DR("RECESS TYPE") = "ANGLE" Then
Dim recessName As String = DR("NAME")
Dim recessAlreadyOK As Boolean = False
For Each DR2 As DataRow In recessPointsDT.Rows
Dim pointName As String = DR2("NAME")
If pointName.Substring(0, 3) = recessName Then
recessAlreadyOK = True
Exit For
End If
Next
If recessAlreadyOK = True Then
Continue For
End If
' Recess points
Dim p0(1) As Decimal
Dim p1(1) As Decimal
Dim p2(1) As Decimal
p0(0) = Data.gratingPoints.Select("NAME = '" & recessName & "_1" & "'")(0)("X")
p0(1) = Data.gratingPoints.Select("NAME = '" & recessName & "_1" & "'")(0)("Y")
p1(0) = Data.gratingPoints.Select("NAME = '" & recessName & "_2" & "'")(0)("X")
p1(1) = Data.gratingPoints.Select("NAME = '" & recessName & "_2" & "'")(0)("Y")
If DR("CORNER") = 1 OrElse DR("CORNER") = 3 Then
p2(0) = p0(0)
p2(1) = p1(1)
Else
p2(0) = p1(0)
p2(1) = p0(1)
End If
Dim pointsInRecess As New Dictionary(Of String, Boolean)
For Each pDR As DataRow In pointsDT.Rows
Dim gp(1) As Decimal
gp(0) = pDR("X")
gp(1) = pDR("Y")
pointsInRecess.Add(pDR("NAME"), Calculate_Triangle_Bool(gp, p0, p1, p2))
Next
Dim numOfPInRec As Integer = 0
For Each bool As Boolean In pointsInRecess.Values
If bool = True Then
numOfPInRec += 1
End If
Next
If numOfPInRec = 0 OrElse numOfPInRec = 4 Then
Continue For
End If
' - Straight line equation: y = kx + m
Dim k As Decimal = (p1(1) - p0(1)) / (p1(0) - p0(0))
Dim m As Decimal = p0(1) - (k * p0(0))
Dim npDR As DataRow
Dim x1 As Decimal = (GAPointsDT.Rows(0)("Y") - m) / k
If x1 > GAPointsDT.Rows(0)("X") AndAlso x1 < GAPointsDT.Rows(1)("X") Then
' lägg till sida 1
npDR = pointsDT.NewRow()
npDR("NAME") = recessName & "_1" ' fixa
npDR("TYPE") = "Recess CA"
npDR("X") = x1
npDR("Y") = GAPointsDT.Rows(0)("Y")
Dim inIndex As Integer = Get_RowIndex(pointsDT, 1, npDR("X"), npDR("Y"), GAPointsDT)
pointsDT.Rows.InsertAt(npDR, inIndex + 1)
End If
Dim y2 As Decimal = k * GAPointsDT.Rows(1)("X") + m
If y2 < GAPointsDT.Rows(1)("Y") AndAlso y2 > GAPointsDT.Rows(2)("Y") Then
' lägg till sida 2
npDR = pointsDT.NewRow()
npDR("NAME") = recessName & "_2" ' fixa
npDR("TYPE") = "Recess CA"
npDR("X") = GAPointsDT.Rows(1)("X")
npDR("Y") = y2
Dim inIndex As Integer = Get_RowIndex(pointsDT, 2, npDR("X"), npDR("Y"), GAPointsDT)
pointsDT.Rows.InsertAt(npDR, inIndex + 1)
End If
Dim x3 As Decimal = (GAPointsDT.Rows(2)("Y") - m) / k
If x3 < GAPointsDT.Rows(2)("X") AndAlso x3 > GAPointsDT.Rows(3)("X") Then
' lägg till sida 3
npDR = pointsDT.NewRow()
npDR("NAME") = recessName & "_3" ' fixa
npDR("TYPE") = "Recess CA"
npDR("X") = x3
npDR("Y") = GAPointsDT.Rows(2)("Y")
Dim inIndex As Integer = Get_RowIndex(pointsDT, 3, npDR("X"), npDR("Y"), GAPointsDT)
pointsDT.Rows.InsertAt(npDR, inIndex + 1)
End If
Dim y4 As Decimal = k * GAPointsDT.Rows(3)("X") + m
If y4 > GAPointsDT.Rows(3)("Y") AndAlso y4 < GAPointsDT.Rows(0)("Y") Then
' lägg till sida 4
npDR = pointsDT.NewRow()
npDR("NAME") = recessName & "_4" ' fixa
npDR("TYPE") = "Recess CA"
npDR("X") = GAPointsDT.Rows(3)("X")
npDR("Y") = y4
Dim inIndex As Integer = Get_RowIndex(pointsDT, 4, npDR("X"), npDR("Y"), GAPointsDT)
pointsDT.Rows.InsertAt(npDR, inIndex + 1)
End If
For Each key As String In pointsInRecess.Keys
If pointsInRecess(key) = True Then
Dim removeIndex As Integer = 0
For k = 0 To pointsDT.Rows.Count - 1
If pointsDT.Rows(k)("NAME") = key Then
removeIndex = k
End If
Next
pointsDT.Rows.RemoveAt(removeIndex)
End If
Next
End If
Next
' --- Point on grating side - recesses ---
For Each DR As DataRow In recessPointsDT.Rows
If DR("TYPE") = "Corner Angle" Then
Dim pointName As String = DR("NAME")
If pointName.Split("_")(1) = 1 Then
Dim DR3 As DataRow = pointsDT.NewRow()
DR3("NAME") = DR("NAME")
DR3("TYPE") = "Recess CA"
DR3("X") = DR("X")
DR3("Y") = DR("Y")
Dim index As Integer = Get_RowIndex(pointsDT, DR("SIDE"), DR("X"), DR("Y"), GAPointsDT)
pointsDT.Rows.InsertAt(DR3, index + 1)
If pointsDT.Rows.Count > index + 2 Then
Dim temp As String = pointsDT.Rows(index + 2)("NAME")
If temp.Substring(0, 2) = "GA" Then
pointsDT.Rows.RemoveAt(index + 2)
End If
Else
Dim temp As String = pointsDT.Rows(0)("NAME")
If temp.Substring(0, 2) = "GA" Then
pointsDT.Rows.RemoveAt(0)
End If
End If
'Check if remove next point aswell (If angle crosses more than one grating)
Dim cornerPoint(1) As Decimal
Dim pointNumGA As Integer = DR("SIDE") + 2
If pointNumGA > 4 Then
pointNumGA -= 4
End If
cornerPoint(0) = GAPointsDT.Select("NAME = 'GA_" & pointNumGA & "'")(0)("X")
cornerPoint(1) = GAPointsDT.Select("NAME = 'GA_" & pointNumGA & "'")(0)("Y")
Create_SecondAnglePoint(pointsDT, DR, cornerPoint, GAPointsDT, recessPointsDT, "")
Else
Dim DR3 As DataRow = pointsDT.NewRow()
DR3("NAME") = DR("NAME")
DR3("TYPE") = "Recess CA"
DR3("X") = DR("X")
DR3("Y") = DR("Y")
Dim index As Integer = Get_RowIndex(pointsDT, DR("SIDE"), DR("X"), DR("Y"), GAPointsDT)
pointsDT.Rows.InsertAt(DR3, index + 1)
Dim temp As String = pointsDT.Rows(index)("NAME")
If temp.Substring(0, 2) = "GA" Then
pointsDT.Rows.RemoveAt(index)
End If
Dim cornerPoint(1) As Decimal
Dim pointNumGA As Integer = DR("SIDE") - 1
If pointNumGA < 1 Then
pointNumGA += 4
End If
cornerPoint(0) = GAPointsDT.Select("NAME = 'GA_" & pointNumGA & "'")(0)("X")
cornerPoint(1) = GAPointsDT.Select("NAME = 'GA_" & pointNumGA & "'")(0)("Y")
Create_SecondAnglePoint(pointsDT, DR, cornerPoint, GAPointsDT, recessPointsDT, "GA_" & pointNumGA)
End If
End If
Next
pointsDT.TableName = "Grating " & i & " - C" & columnNum & " R" & rowNum
pointsDS.Tables.Add(pointsDT)
Next
Return pointsDS
End Function
Private Shared Function Get_RowIndex(pDT As DataTable, side As Integer, pX As Decimal, pY As Decimal, GApDT As DataTable)
Dim rowName As String = ""
Dim newX As Decimal = pX
Dim newY As Decimal = pY
If side = 1 Then
Dim sidePoints = pDT.Select("Y = '" & pY & "'")
If sidePoints.Length = 0 Then
newX = GApDT.Select("NAME = 'GA_1'")(0)("X")
End If
For Each DR2 As DataRow In sidePoints
If DR2("X") < pX Then
rowName = DR2("NAME")
Else
newX = GApDT.Select("NAME = 'GA_1'")(0)("X")
Exit For
End If
Next
ElseIf side = 2 Then
Dim sidePoints = pDT.Select("X = '" & pX & "'")
If sidePoints.Length = 0 Then
newY = GApDT.Select("NAME = 'GA_2'")(0)("Y")
End If
For Each DR2 As DataRow In sidePoints
If DR2("Y") > pY Then
rowName = DR2("NAME")
Else
newY = GApDT.Select("NAME = 'GA_2'")(0)("Y")
Exit For
End If
Next
ElseIf side = 3 Then
Dim sidePoints = pDT.Select("Y = '" & pY & "'")
If sidePoints.Length = 0 Then
newX = GApDT.Select("NAME = 'GA_3'")(0)("X")
End If
For Each DR2 As DataRow In sidePoints
If DR2("X") > pX Then
rowName = DR2("NAME")
Else
newX = GApDT.Select("NAME = 'GA_3'")(0)("X")
Exit For
End If
Next
Else
Dim sidePoints = pDT.Select("X = '" & pX & "'")
If sidePoints.Length = 0 Then
newY = GApDT.Select("NAME = 'GA_4'")(0)("Y")
Else
If sidePoints(0)("NAME") = "GA_1" Then
Dim pointList As New List(Of DataRow)
For i = 1 To sidePoints.Length - 1
pointList.Add(sidePoints(i))
Next
pointList.Add(sidePoints(0))
For Each DR2 As DataRow In pointList
If DR2("Y") < pY Then
rowName = DR2("NAME")
Else
newY = GApDT.Select("NAME = 'GA_4'")(0)("Y")
Exit For
End If
Next
Else
For Each DR2 As DataRow In sidePoints
If DR2("Y") < pY Then
rowName = DR2("NAME")
Else
newY = GApDT.Select("NAME = 'GA_4'")(0)("Y")
Exit For
End If
Next
End If
End If
End If
Dim index As Integer = 0
If rowName = "" Then
Dim newSide As Integer = side - 1
If newSide = 0 Then
newSide = 4
End If
index = Get_RowIndex(pDT, newSide, newX, newY, GApDT)
Else
For j = 0 To pDT.Rows.Count - 1
If pDT.Rows(j)("NAME") = rowName Then
index = j
Exit For
End If
Next
End If
Return index
End Function
Private Shared Sub Create_SecondAnglePoint(pDT As DataTable, rpDR As DataRow, gp As Decimal(), GApDT As DataTable, rDT As DataTable, pNameToRemove As String)
Dim p0(1) As Decimal
Dim p1(1) As Decimal
Dim p2(1) As Decimal
Dim newDR As DataRow = pDT.NewRow
newDR("TYPE") = "Recess CA"
Dim side As Integer = 0
Dim pointName As String = rpDR("NAME")
If pointName.Split("_")(1) = 1 Then
Dim DR = Data.gratingPoints.Select("NAME = '" & pointName.Split("_")(0) & "_2" & "'")
newDR("NAME") = pointName.Split("_")(0) & "_2"
p0(0) = rpDR("X")
p0(1) = rpDR("Y")
p2(0) = DR(0)("X")
p2(1) = DR(0)("Y")
If rpDR("SIDE") + 1 > 4 Then
side = rpDR("SIDE") + 1 - 4
Else
side = rpDR("SIDE") + 1
End If
Else
Dim DR = Data.gratingPoints.Select("NAME = '" & pointName.Split("_")(0) & "_1" & "'")
newDR("NAME") = pointName.Split("_")(0) & "_1"
p0(0) = rpDR("X")
p0(1) = rpDR("Y")
p2(0) = DR(0)("X")
p2(1) = DR(0)("Y")
If rpDR("SIDE") - 1 < 1 Then
side = rpDR("SIDE") - 1 + 4
Else
side = rpDR("SIDE") - 1
End If
End If
For Each rDR As DataRow In rDT.Rows
If rDR("NAME") = newDR("NAME") Then
Exit Sub
End If
Next
If rpDR("SIDE") = 1 OrElse rpDR("SIDE") = 3 Then
p1(0) = p2(0)
p1(1) = p0(1)
ElseIf rpDR("SIDE") = 2 OrElse rpDR("SIDE") = 4 Then
p1(0) = p0(0)
p1(1) = p2(1)
End If
Dim gpInside As Boolean = Calculate_Triangle_Bool(gp, p0, p1, p2)
Dim insertIndex As Integer = 0
If gpInside = False Then
' If false => new point at side rpDR("SIDE")+1
If side = 1 Then
Dim c As Decimal = GApDT.Select("NAME = 'GA_1'")(0)("Y") - rpDR("Y")
Dim z As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - rpDR("Y")
Dim x As Decimal = 0
If pointName.Split("_")(1) = 1 Then
x = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_1'")(0)("X")
newDR("X") = GApDT.Select("NAME = 'GA_1'")(0)("X") + c * x / z ' Triangle likformighet
Else
x = GApDT.Select("NAME = 'GA_2'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
newDR("X") = GApDT.Select("NAME = 'GA_2'")(0)("X") - c * x / z ' Triangle likformighet
End If
newDR("Y") = GApDT.Select("NAME = 'GA_1'")(0)("Y")
ElseIf side = 2 Then
Dim c As Decimal = GApDT.Select("NAME = 'GA_2'")(0)("X") - rpDR("X")
Dim z As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - rpDR("X")
Dim x As Decimal = 0
If pointName.Split("_")(1) = 1 Then
x = GApDT.Select("NAME = 'GA_2'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
newDR("Y") = GApDT.Select("NAME = 'GA_2'")(0)("Y") - c * x / z ' Triangle likformighet
Else
x = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_3'")(0)("Y")
newDR("Y") = GApDT.Select("NAME = 'GA_3'")(0)("Y") + c * x / z ' Triangle likformighet
End If
newDR("X") = GApDT.Select("NAME = 'GA_2'")(0)("X")
ElseIf side = 3 Then
Dim c As Decimal = rpDR("Y") - GApDT.Select("NAME = 'GA_3'")(0)("Y")
Dim z As Decimal = rpDR("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
Dim x As Decimal = 0
If pointName.Split("_")(1) = 1 Then
x = GApDT.Select("NAME = 'GA_3'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
newDR("X") = GApDT.Select("NAME = 'GA_3'")(0)("X") - c * x / z ' Triangle likformighet
Else
x = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_4'")(0)("X")
newDR("X") = GApDT.Select("NAME = 'GA_4'")(0)("X") + c * x / z ' Triangle likformighet
End If
newDR("Y") = GApDT.Select("NAME = 'GA_3'")(0)("Y")
Else
Dim c As Decimal = rpDR("X") - GApDT.Select("NAME = 'GA_4'")(0)("X")
Dim z As Decimal = rpDR("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
Dim x As Decimal = 0
If pointName.Split("_")(1) = 1 Then
x = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_4'")(0)("Y")
newDR("Y") = GApDT.Select("NAME = 'GA_4'")(0)("Y") + c * x / z ' Triangle likformighet
Else
x = GApDT.Select("NAME = 'GA_1'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
newDR("Y") = GApDT.Select("NAME = 'GA_1'")(0)("Y") - c * x / z ' Triangle likformighet
End If
newDR("X") = GApDT.Select("NAME = 'GA_4'")(0)("X")
End If
newDR("X") = Math.Round(newDR("X"), 3)
newDR("Y") = Math.Round(newDR("Y"), 3)
insertIndex = Get_RowIndex(pDT, side, newDR("X"), newDR("Y"), GApDT) + 1
Else
' If true => remove point gp and new point at side rpDR("SIDE")+2
Dim temp As String = newDR("NAME")
If temp.Split("_")(1) = 1 Then
If side = 1 Then
side = 4
Else
side -= 1
End If
Else
If side = 4 Then
side = 1
Else
side += 1
End If
End If
If side = 1 Then
Dim x As Decimal = rpDR("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
Dim y As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - rpDR("Y")
Dim b As Decimal = 0
If pointName.Split("_")(1) = 1 Then
b = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_1'")(0)("Y")
newDR("X") = GApDT.Select("NAME = 'GA_1'")(0)("X") + x * b / y - (GApDT.Select("NAME = 'GA_1'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")) ' Triangle likformighet
Else
b = GApDT.Select("NAME = 'GA_2'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
newDR("X") = GApDT.Select("NAME = 'GA_2'")(0)("X") - x * b / y + (Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_2'")(0)("X")) ' Triangle likformighet
End If
newDR("Y") = GApDT.Select("NAME = 'GA_1'")(0)("Y")
ElseIf side = 2 Then
Dim x As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - rpDR("Y")
Dim y As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - rpDR("X")
Dim b As Decimal = 0
If pointName.Split("_")(1) = 1 Then
b = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_2'")(0)("X")
newDR("Y") = GApDT.Select("NAME = 'GA_2'")(0)("Y") - x * b / y + (Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_2'")(0)("Y"))
Else
b = GApDT.Select("NAME = 'GA_3'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
newDR("Y") = GApDT.Select("NAME = 'GA_3'")(0)("Y") + x * b / y - (GApDT.Select("NAME = 'GA_3'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y"))
End If
newDR("X") = GApDT.Select("NAME = 'GA_2'")(0)("X")
ElseIf side = 3 Then
Dim x As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - rpDR("X")
Dim y As Decimal = rpDR("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
Dim b As Decimal = 0
If pointName.Split("_")(1) = 1 Then
b = GApDT.Select("NAME = 'GA_3'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
newDR("X") = GApDT.Select("NAME = 'GA_3'")(0)("X") - x * b / y + (Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_3'")(0)("X"))
Else
b = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_4'")(0)("Y")
newDR("X") = GApDT.Select("NAME = 'GA_4'")(0)("X") + x * b / y - (GApDT.Select("NAME = 'GA_4'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X"))
End If
newDR("Y") = GApDT.Select("NAME = 'GA_3'")(0)("Y")
Else
Dim x As Decimal = rpDR("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
Dim y As Decimal = rpDR("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
Dim b As Decimal = 0
If pointName.Split("_")(1) = 1 Then
b = GApDT.Select("NAME = 'GA_4'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
newDR("Y") = GApDT.Select("NAME = 'GA_4'")(0)("Y") + x * b / y - (GApDT.Select("NAME = 'GA_4'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y"))
Else
b = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_1'")(0)("X")
newDR("Y") = GApDT.Select("NAME = 'GA_1'")(0)("Y") - x * b / y + (Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_1'")(0)("Y"))
End If
newDR("X") = GApDT.Select("NAME = 'GA_4'")(0)("X")
End If
insertIndex = Get_RowIndex(pDT, side, newDR("X"), newDR("Y"), GApDT)
pDT.Rows.InsertAt(newDR, insertIndex + 1)
Dim removeIndex As Integer = 0
For k = 0 To pDT.Rows.Count - 1
If pDT.Rows(k)("NAME") = pNameToRemove Then
removeIndex = k
End If
Next
pDT.Rows.RemoveAt(removeIndex)
End If
End Sub
Private Shared Function Calculate_Triangle_Bool(gp As Decimal(), p0 As Decimal(), p1 As Decimal(), p2 As Decimal())
Dim s As Decimal = p0(1) * p2(0) - p0(0) * p2(1) + (p2(1) - p0(1)) * gp(0) + (p0(0) - p2(0)) * gp(1)
Dim t As Decimal = p0(0) * p1(1) - p0(1) * p1(0) + (p0(1) - p1(1)) * gp(0) + (p1(0) - p0(0)) * gp(1)
If (s < 0 AndAlso t >= 0) OrElse (s >= 0 AndAlso t < 0) Then
Return False
End If
Dim area As Decimal = -p1(1) * p2(0) + p0(1) * (p2(0) - p1(0)) + p0(0) * (p1(1) - p2(1)) + p1(0) * p2(1)
If area < 0 Then
If s <= 0 AndAlso s + t >= area Then
Return True
Else
Return False
End If
Else
If s >= 0 AndAlso s + t <= area Then
Return True
Else
Return False
End If
End If
End Function
End Class

View File

@ -125,6 +125,7 @@
<Compile Include="SolidWorks\Individual_3D.vb" />
<Compile Include="SolidWorks\Multiple_3D.vb" />
<Compile Include="SolidWorks\Multiple_Drawing.vb" />
<Compile Include="SolidWorks\Multiple_Drawing2.vb" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="GUI\AppForm.resx">