X2021/Wardrobe/SolidWorks/Multiple_Drawing.vb

620 lines
28 KiB
VB.net

Imports SldWorks
Public Class Multiple_Drawing
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
Model = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2020\templates\Assembly.asmdot", 0, 0, 0)
assembly = Model
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))
longstatus = Model.SaveAs3(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\simplified_grating_assembly.SLDASM", 0, 0)
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
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)
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 & "'")
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 & "'")
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 & "'")
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(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
Dim index As Integer = 0
If rowName = "" Then
index = Get_RowIndex(pDT, side - 1, 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)
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)
'If Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") = GApDT.Select("NAME = 'GA_2'")(0)("X") OrElse
' Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") = GApDT.Select("NAME = 'GA_4'")(0)("X") Then
' If Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") > GApDT.Select("NAME = 'GA_3'")(0)("Y") AndAlso
' Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") < GApDT.Select("NAME = 'GA_2'")(0)("Y") Then
' Exit Sub
' ElseIf Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") > GApDT.Select("NAME = 'GA_4'")(0)("Y") AndAlso
' Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") < GApDT.Select("NAME = 'GA_1'")(0)("Y") Then
' Exit Sub
' End If
'End If
ElseIf rpDR("SIDE") = 2 OrElse rpDR("SIDE") = 4 Then
p1(0) = p0(0)
p1(1) = p2(1)
'If Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") = GApDT.Select("NAME = 'GA_3'")(0)("Y") OrElse
' Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") = GApDT.Select("NAME = 'GA_1'")(0)("Y") Then
' If Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") < GApDT.Select("NAME = 'GA_3'")(0)("X") AndAlso
' Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") > GApDT.Select("NAME = 'GA_4'")(0)("X") Then
' Exit Sub
' ElseIf Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") > GApDT.Select("NAME = 'GA_1'")(0)("X") AndAlso
' Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") < GApDT.Select("NAME = 'GA_2'")(0)("X") Then
' Exit Sub
' End If
'End If
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 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")
Else
x = GApDT.Select("NAME = 'GA_2'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
End If
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")
newDR("X") = GApDT.Select("NAME = 'GA_1'")(0)("X") + c * x / z ' Triangle likformighet
newDR("Y") = GApDT.Select("NAME = 'GA_1'")(0)("Y")
ElseIf side = 2 Then
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")
Else
x = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_3'")(0)("Y")
End If
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")
newDR("X") = GApDT.Select("NAME = 'GA_2'")(0)("X")
newDR("Y") = GApDT.Select("NAME = 'GA_2'")(0)("Y") - c * x / z ' Triangle likformighet
ElseIf side = 3 Then
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")
Else
x = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_4'")(0)("X")
End If
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")
newDR("X") = GApDT.Select("NAME = 'GA_3'")(0)("X") - c * x / z ' Triangle likformighet
newDR("Y") = GApDT.Select("NAME = 'GA_3'")(0)("Y")
Else
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")
Else
x = GApDT.Select("NAME = 'GA_1'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
End If
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")
newDR("X") = GApDT.Select("NAME = 'GA_4'")(0)("X")
newDR("Y") = GApDT.Select("NAME = 'GA_4'")(0)("Y") + c * x / z ' Triangle likformighet
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 b As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - GApDT.Select("NAME = 'GA_1'")(0)("Y")
Dim y As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y") - rpDR("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
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 b As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - GApDT.Select("NAME = 'GA_2'")(0)("X")
Dim y As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - rpDR("X")
newDR("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")) ' Triangle likformighet
ElseIf side = 3 Then
Dim x As Decimal = Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X") - rpDR("X")
Dim b As Decimal = GApDT.Select("NAME = 'GA_3'")(0)("Y") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("Y")
Dim y As Decimal = rpDR("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")) ' Triangle likformighet
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 b As Decimal = GApDT.Select("NAME = 'GA_4'")(0)("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
Dim y As Decimal = rpDR("X") - Data.gratingPoints.Select("NAME = '" & newDR("NAME") & "'")(0)("X")
newDR("X") = GApDT.Select("NAME = 'GA_4'")(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")) ' Triangle likformighet
End If
insertIndex = Get_RowIndex(pDT, side, newDR("X"), newDR("Y"), GApDT)
If pointName.Split("_")(1) = 1 Then
pDT.Rows.RemoveAt(insertIndex)
Else
If pDT.Rows.Count > insertIndex + 1 Then
pDT.Rows.RemoveAt(insertIndex + 1)
insertIndex += 1
Else
pDT.Rows.RemoveAt(0)
insertIndex = 0
End If
End If
End If
pDT.Rows.InsertAt(newDR, insertIndex)
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