diff --git a/HLCt/recess_angle.SLDPRT b/HLCt/recess_angle.SLDPRT index 1addea2..275d4cb 100644 Binary files a/HLCt/recess_angle.SLDPRT and b/HLCt/recess_angle.SLDPRT differ diff --git a/HLCt/recess_middle_square.SLDPRT b/HLCt/recess_middle_square.SLDPRT index 8f0f185..04255d5 100644 Binary files a/HLCt/recess_middle_square.SLDPRT and b/HLCt/recess_middle_square.SLDPRT differ diff --git a/HLCt/recess_rectangle.SLDPRT b/HLCt/recess_rectangle.SLDPRT index ad167fe..5991b3f 100644 Binary files a/HLCt/recess_rectangle.SLDPRT and b/HLCt/recess_rectangle.SLDPRT differ diff --git a/HLCt/recess_side_square.SLDPRT b/HLCt/recess_side_square.SLDPRT index 24c4434..65e6d58 100644 Binary files a/HLCt/recess_side_square.SLDPRT and b/HLCt/recess_side_square.SLDPRT differ diff --git a/HLCt/simplified_floor_grating.SLDPRT b/HLCt/simplified_floor_grating.SLDPRT index d444b02..df705d9 100644 Binary files a/HLCt/simplified_floor_grating.SLDPRT and b/HLCt/simplified_floor_grating.SLDPRT differ diff --git a/Wardrobe/GUI/Individual.vb b/Wardrobe/GUI/Individual.vb index eb2d041..7f55cf7 100644 --- a/Wardrobe/GUI/Individual.vb +++ b/Wardrobe/GUI/Individual.vb @@ -244,9 +244,10 @@ Public Class Individual If AppForm.fillMode Then Grating_Fill.Calculate_Grid() - Multiple_Drawing.Build_Grid() ' Ska flyttas till sist i if satsen + 'Multiple_3D.BuildGrid() - Multiple_3D.BuildGrid() + Multiple_3D_Simplified.Build_Grid() + Multiple_Drawing.Generate_Drawing() Else Individual_3D.BuildGrating() Individual_Drawing.Create_Model_For_Drawing() diff --git a/Wardrobe/SolidWorks/Multiple_3D_Simplified.vb b/Wardrobe/SolidWorks/Multiple_3D_Simplified.vb new file mode 100644 index 0000000..2025493 --- /dev/null +++ b/Wardrobe/SolidWorks/Multiple_3D_Simplified.vb @@ -0,0 +1,635 @@ +Imports XCCLibrary +Imports SldWorks +Public Class Multiple_3D_Simplified + Private Shared gratingParameters As DataRow + Private Shared designName As String + + Public Shared partDT As New DataTable + Public Shared Sub Build_Grid() + Dim exportTable As DataTable + exportTable = User_Input.Create_ExportTable() + + XCCBaseClass.newDesign() + ExternalClass.PopulateTamplateXMLGroup() + + Dim inst_ As Integer + Dim parentID As Integer = 0 + gratingParameters = exportTable.Rows(0) + + For i = 0 To Grating_Fill.gratingDimensions.Rows.Count - 1 + inst_ = ExternalClass.instantiate_parts(parentID, "simplified_floor_grating", "") + ExternalClass.modify_parameter_value("DP_LOADBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) + ExternalClass.modify_parameter_value("DP_GRATING_WIDTH", inst_, Grating_Fill.gratingDimensions.Rows(i)("WIDTH")) + ExternalClass.modify_parameter_value("DP_GRATING_LENGTH", inst_, Grating_Fill.gratingDimensions.Rows(i)("LENGTH")) + Dim offsetX As Integer = 0 + For j = 1 To Grating_Fill.gratingDimensions.Rows(i)("COLUMN") + offsetX += Grating_Fill.gratingDimensions.Rows(i - j)("LENGTH") + Next + + Dim offsetY As Integer = 0 + For j = 1 To Grating_Fill.gratingDimensions.Rows(i)("ROW") + offsetY += Grating_Fill.gratingDimensions.Rows(i - Grating_Fill.numOfHorizontal * j)("WIDTH") + Next + + ExternalClass.modify_parameter_value("DP_OFFSET_X", inst_, (Grating_Fill.gratingDimensions.Rows(i)("LENGTH") / 2) + offsetX) + ExternalClass.modify_parameter_value("DP_OFFSET_Y", inst_, (Grating_Fill.gratingDimensions.Rows(i)("WIDTH") / 2) + offsetY) + Next + + parentID = Grating_Fill.numOfHorizontal * (Grating_Fill.numOfVertical - 1) + 1 + For Each recessDR As DataRow In Data.recessData.Rows + Inst_Recesses(parentID, gratingParameters, recessDR) + Next + + importClass.copyGroupsByDataSet(ExternalClass.groupds_new) + Dim grNr = groupClass.NewGroupID + Dim designTable = designModel.selectDesign("*") + designName = designTable.rows(0)("designName") + groupClass.InstantiateGroup(designName, grNr, "START") + + Delete_Obsolete() + Recess_Indent() + Suppress_Bodies() + + Save_Assembly() + End Sub + + Private Shared Sub Suppress_Bodies() + Dim swApp As SldWorks.SldWorks + swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) + + Dim boolstatus As Boolean + Dim AssemblyExtension As SldWorks.ModelDocExtension + + Dim Assembly = swApp.ActiveDoc + Dim modelDoc As IModelDoc2 + modelDoc = Assembly + + Dim SelMgr = Assembly.SelectionManager() + AssemblyExtension = Assembly.Extension + Dim sldata = SelMgr.CreateSelectData + + Dim partDT As New DataTable + partDT = partModel.selectPart("*") + + Dim gratingParts = partDT.Select("parentName = 'START'") + + Dim components = Assembly.GetComponents(True) + + For i = 0 To components.Length - 1 + Dim compName As String = components(i).Name2 + If compName.Split("_")(0) = "RECESS" Then + Assembly.ClearSelection2(True) + boolstatus = AssemblyExtension.SelectByID2(compName & "@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + Assembly.EditPart + + Dim recessBodies = components(i).GetBodies2(0) + Dim recessBodyList As New List(Of String) + For j = 0 To recessBodies.Length - 1 + Dim bodyName As String = recessBodies(j).Name + If Not bodyName = "Cut-Body" Then + recessBodyList.Add(bodyName) + End If + Next + For j = 0 To recessBodyList.Count - 1 + Assembly.ClearSelection2(True) + boolstatus = AssemblyExtension.SelectByID2(recessBodyList(j) & "@" & compName & "@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) + modelDoc.EditSuppress2() + Next + Assembly.EditAssembly + End If + Next + End Sub + + Private Shared Sub Save_Assembly() + Dim swApp As SldWorks.SldWorks + swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) + + Dim status As Boolean + + Dim Assebmly = swApp.ActiveDoc() + status = Assebmly.SaveAs3(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\gratings_assembly_simplified.SLDASM", 0, 4) + End Sub + + Private Shared Sub Inst_Recesses(parentID As Integer, gratingParameters As DataRow, recessDR As DataRow) + Dim inst_ As Integer + + If recessDR("RECESS TYPE") = "SQUARE" Then + Dim squareL As Integer = recessDR("LENGTH") + gratingParameters("LOADBAR_THICKNESS") + Dim squareW As Integer = recessDR("WIDTH") + gratingParameters("LOADBAR_THICKNESS") + + inst_ = ExternalClass.instantiate_parts(parentID, "recess_rectangle", "") + + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, squareL + gratingParameters("LOADBAR_THICKNESS")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, squareW) + ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) + ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) + ExternalClass.modify_parameter_value("DP_BOX_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) + + If recessDR("CORNER") = 1 Then + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - squareW) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) + + 'Position + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, squareL) + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, gratingParameters("LOADBAR_THICKNESS")) + ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, 0) + ElseIf recessDR("CORNER") = 2 Then + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - squareW) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL - squareL - gratingParameters("LOADBAR_THICKNESS")) + + 'Position + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, 0) + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, gratingParameters("LOADBAR_THICKNESS")) + ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, 0) + ElseIf recessDR("CORNER") = 3 Then + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL - squareL - gratingParameters("LOADBAR_THICKNESS")) + + 'Position + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, 0) + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, 0) + ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, squareW - gratingParameters("LOADBAR_THICKNESS")) + Else + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) + + 'Position + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, squareL) + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, 0) + ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, squareW - gratingParameters("LOADBAR_THICKNESS")) + End If + + ElseIf recessDR("RECESS TYPE") = "ANGLE" Then + inst_ = ExternalClass.instantiate_parts(parentID, "recess_angle", "") + + ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) + ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) + + If recessDR("CORNER") = 1 Then + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 90) + + ElseIf recessDR("CORNER") = 2 Then + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 180) + + ElseIf recessDR("CORNER") = 3 Then + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 270) + + Else + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 0) + + End If + + ElseIf recessDR("RECESS TYPE") = "SIDE SQUARE" Then + inst_ = ExternalClass.instantiate_parts(parentID, "recess_side_square", "") + + ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) + ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) + + If recessDR("SIDE") = 1 Then + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, recessDR("OFFSET")) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 90) + + ElseIf recessDR("SIDE") = 2 Then + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - recessDR("OFFSET")) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 180) + + ElseIf recessDR("SIDE") = 3 Then + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL - recessDR("OFFSET")) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 270) + + Else + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, recessDR("OFFSET")) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 0) + + End If + + ElseIf recessDR("RECESS TYPE") = "MIDDLE SQUARE" Then + inst_ = ExternalClass.instantiate_parts(parentID, "recess_middle_square", "") + + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) + ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) + ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, recessDR("OFFSET Y")) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, recessDR("OFFSET X")) + End If + End Sub + + Private Shared Sub Recess_Indent() + Dim swApp As SldWorks.SldWorks + swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) + + Dim boolstatus As Boolean + Dim AssemblyExtension As SldWorks.ModelDocExtension + + Dim Assembly = swApp.ActiveDoc + Dim modelDoc As IModelDoc2 + modelDoc = Assembly + + Dim SelMgr = Assembly.SelectionManager() + AssemblyExtension = Assembly.Extension + Dim sldata = SelMgr.CreateSelectData + + partDT = partModel.selectPart("*") + + Dim gratingParts = partDT.Select("parentName = 'START'") + + Dim components = Assembly.GetComponents(True) + + 'Indent + Dim recessParentName As String = partDT.Rows(Grating_Fill.numOfHorizontal * (Grating_Fill.numOfVertical - 1))("partName") + Dim recessParts = partDT.Select("parentName = '" & recessParentName & "'") + For i = 0 To recessParts.Count - 1 + Dim recessPartName As String = recessParts(i)("partName") + If recessPartName.Split("_")(0) = "RECESS" Then + + Dim indexRecess As Integer + For k = 0 To components.Length - 1 + If components(k).Name2 = recessPartName & "-1" Then + indexRecess = k + Exit For + End If + Next + + Dim recessBodies = components(indexRecess).GetBodies2(0) + Dim recessComponent As SldWorks.Component2 = components(indexRecess) + + Dim indexBody As Integer + For l = 0 To recessBodies.Length - 1 + If recessBodies(l).Name = "Cut-Body" Then + indexBody = l + Exit For + End If + Next + + Dim recessFace = recessBodies(indexBody).GetFirstFace + + For j = 0 To Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal - 1 + Assembly.ClearSelection2(True) + + Dim gratingPartName As String = partDT.Rows(j)("partName") + boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + If boolstatus = True Then + Dim gratingPart = SelMgr.GetSelectedObject6(1, -1) + + Assembly.EditPart + + Dim indexGrating As Integer + For k = 0 To components.Length - 1 + If components(k).Name2 = gratingPartName & "-1" Then + indexGrating = k + Exit For + End If + Next + + Dim gratingComponent As SldWorks.Component2 = components(indexGrating) + + Dim bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") + + For k = 0 To bodiesToCut.Length - 1 + Assembly.ClearSelection2(True) + + sldata.Mark = 1 + Dim bodyName As String = bodiesToCut(k).Name & "@" & gratingPartName & "-1@" & designName + boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0) + + sldata.Mark = 4 + recessFace.Select4(True, sldata) + + Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) + Assembly.ClearSelection2(True) + Next + + bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") + + For k = 0 To bodiesToCut.Length - 1 + boolstatus = AssemblyExtension.SelectByID2(bodiesToCut(k).Name & "@" & gratingPartName & "-1@" & designName, "SOLIDBODY", 0, 0, 0, True, 0, Nothing, 0) + Dim myFeature As Object + Dim modelFeat As FeatureManager = modelDoc.FeatureManager + myFeature = modelFeat.InsertDeleteBody2(False) + Next + + Assembly.EditAssembly + End If + Next + Assembly.ClearSelection2(True) + End If + Assembly.EditAssembly + boolstatus = modelDoc.EditRebuild3() + Next + End Sub + + + Private Shared Sub Delete_Obsolete() + Dim listOfObsolete As List(Of Integer) + listOfObsolete = Find_Obsolete() + + Dim swApp As SldWorks.SldWorks + swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) + Dim boolstatus As Boolean + Dim Assembly = swApp.ActiveDoc + Dim AssemblyExtension As SldWorks.ModelDocExtension + AssemblyExtension = Assembly.Extension + + Dim partDT As New DataTable + partDT = partModel.selectPart("*") + + Dim gratingParts = partDT.Select("parentName = 'START'") + + For i = 0 To listOfObsolete.Count - 1 + Dim gratingPartName As String = gratingParts(listOfObsolete(i))("partName") + + Assembly.ClearSelection2(True) + boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + Assembly.EditDelete + Next + End Sub + + Public Shared Function Find_Obsolete() + Dim listOfObsolete As New List(Of Integer) + + For i = 0 To Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal - 1 + Dim gratingDR As DataRow = Grating_Fill.gratingDimensions.Rows(i) + Dim origo(2) As Integer + origo(0) = Data.gratingL / 2 + origo(1) = Data.gratingW / 2 + + Dim GP As New List(Of Integer()) + Dim p1(1), p2(1), p3(1), p4(1) As Integer + p1(0) = -origo(0) + p2(0) = -origo(0) + gratingDR("LENGTH") + For j = 1 To gratingDR("COLUMN") + p1(0) += Grating_Fill.gratingDimensions.Rows(i - j)("LENGTH") + p2(0) += Grating_Fill.gratingDimensions.Rows(i - j)("LENGTH") + Next + p1(1) = origo(1) + p3(1) = origo(1) - gratingDR("WIDTH") + For j = 1 To gratingDR("ROW") + p1(1) -= Grating_Fill.gratingDimensions.Rows(i - Grating_Fill.numOfHorizontal * j)("WIDTH") + p3(1) -= Grating_Fill.gratingDimensions.Rows(i - Grating_Fill.numOfHorizontal * j)("WIDTH") + Next + + p2(1) = p1(1) + p3(0) = p1(0) + p4(0) = p2(0) + p4(1) = p3(1) + + GP.Add(p1) + GP.Add(p2) + GP.Add(p3) + GP.Add(p4) + + Dim cornerAngleCounter As Integer = 1 + Dim cornerRectangleCounter As Integer = 1 + Dim numOfSideRectangles As Integer = 0 + Dim numOfMiddleRectangles As Integer = 0 + For j = 0 To Data.recessData.Rows.Count - 1 + If Data.recessData.Rows(j)("RECESS TYPE") = "ANGLE" Then + Dim RP As New List(Of Integer()) + Dim rec1(1), rec2(1), rec3(1) As Integer + + rec1(0) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("X") * 1000 + rec1(1) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("Y") * 1000 + + Dim rowIndex As Integer + For k = 0 To Data.gratingPoints.Rows.Count - 1 + If Data.gratingPoints.Rows(k)("NAME") = "CA" & cornerAngleCounter & "_" & 1 Then + rowIndex = k + End If + Next + + rec2(0) = Data.gratingPoints.Rows(rowIndex)("X") * 1000 + rec2(1) = Data.gratingPoints.Rows(rowIndex)("Y") * 1000 + + rec3(0) = Data.gratingPoints.Rows(rowIndex + 1)("X") * 1000 + rec3(1) = Data.gratingPoints.Rows(rowIndex + 1)("Y") * 1000 + + RP.Add(rec1) + RP.Add(rec2) + RP.Add(rec3) + + Dim gratingObsolete As Boolean = True + For k = 0 To 3 + Dim pInTriangle As Boolean = Calculate_Triangle_Bool(GP(k), RP(0), RP(1), RP(2)) + If pInTriangle = False Then + gratingObsolete = False + Exit For + End If + Next + If gratingObsolete = True Then + listOfObsolete.Add(i) + End If + + cornerAngleCounter += 1 + + ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" OrElse Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" _ + OrElse Data.recessData.Rows(j)("RECESS TYPE") = "MIDDLE SQUARE" Then + Dim RP As New List(Of Integer()) + Dim rec1(1), rec2(1), rec3(1), rec4(1) As Integer + + Dim rowIndex As Integer + If Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" Then + For k = 0 To Data.gratingPoints.Rows.Count - 1 + If Data.gratingPoints.Rows(k)("NAME") = "CR" & cornerRectangleCounter & "_" & 1 Then + rowIndex = k + End If + Next + cornerRectangleCounter += 1 + ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" Then + For k = 0 To Data.gratingPoints.Rows.Count - 1 + If Data.gratingPoints.Rows(k)("NAME") = "CS" & numOfSideRectangles & "_" & 1 Then + rowIndex = k + End If + Next + numOfSideRectangles += 1 + End If + + If Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" OrElse Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" Then + rec1(0) = Data.gratingPoints.Rows(rowIndex)("X") * 1000 + rec1(1) = Data.gratingPoints.Rows(rowIndex)("Y") * 1000 + + rec2(0) = Data.gratingPoints.Rows(rowIndex + 1)("X") * 1000 + rec2(1) = Data.gratingPoints.Rows(rowIndex + 1)("Y") * 1000 + + rec3(0) = Data.gratingPoints.Rows(rowIndex + 2)("X") * 1000 + rec3(1) = Data.gratingPoints.Rows(rowIndex + 2)("Y") * 1000 + + If Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" Then + rec4(0) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("X") * 1000 + rec4(1) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("Y") * 1000 + ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" Then + rec4(0) = Data.gratingPoints.Rows(rowIndex + 3)("X") * 1000 + rec4(1) = Data.gratingPoints.Rows(rowIndex + 3)("Y") * 1000 + + End If + + ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "MIDDLE SQUARE" Then + numOfMiddleRectangles += 1 + + rec1(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 4)("X") * 1000 + rec1(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 4)("Y") * 1000 + + rec2(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 3)("X") * 1000 + rec2(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 3)("Y") * 1000 + + rec3(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 2)("X") * 1000 + rec3(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 2)("Y") * 1000 + + rec4(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 1)("X") * 1000 + rec4(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 1)("Y") * 1000 + End If + + RP.Add(rec1) + RP.Add(rec2) + RP.Add(rec3) + RP.Add(rec4) + + Dim gratingObsolete As Boolean = True + For k = 0 To 3 + Dim pInSquare As Boolean = Calculate_Square_Bool(GP(k), RP(0), RP(1), RP(2), RP(3)) + If pInSquare = False Then + gratingObsolete = False + Exit For + End If + Next + If gratingObsolete = True Then + listOfObsolete.Add(i) + End If + + End If + + Next + + Next + Return listOfObsolete + End Function + + Private Shared Function Calculate_Triangle_Bool(gp As Integer(), p0 As Integer(), p1 As Integer(), p2 As Integer()) + + Dim s As Double = p0(1) * p2(0) - p0(0) * p2(1) + (p2(1) - p0(1)) * gp(0) + (p0(0) - p2(0)) * gp(1) + Dim t As Double = 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 Double = -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 + + Private Shared Function Calculate_Square_Bool(gp As Integer(), p0 As Integer(), p1 As Integer(), p2 As Integer(), p3 As Integer()) + Dim squareArea As Double = Math.Abs(p0(0) - p1(0)) * Math.Abs(p1(1) - p2(1)) + If squareArea = 0 Then + squareArea = Math.Abs(p0(1) - p1(1)) * Math.Abs(p1(0) - p2(0)) + End If + + Dim area1 As Double = Math.Abs(gp(0) * p0(1) + gp(1) * p1(0) + p0(0) * p1(1) - p0(1) * p1(0) - gp(1) * p0(0) - gp(0) * p1(1)) / 2 + Dim area2 As Double = Math.Abs(gp(0) * p1(1) + gp(1) * p2(0) + p1(0) * p2(1) - p1(1) * p2(0) - gp(1) * p1(0) - gp(0) * p2(1)) / 2 + Dim area3 As Double = Math.Abs(gp(0) * p2(1) + gp(1) * p3(0) + p2(0) * p3(1) - p2(1) * p3(0) - gp(1) * p2(0) - gp(0) * p3(1)) / 2 + Dim area4 As Double = Math.Abs(gp(0) * p3(1) + gp(1) * p0(0) + p3(0) * p0(1) - p3(1) * p0(0) - gp(1) * p3(0) - gp(0) * p0(1)) / 2 + Dim compArea As Double = area1 + area2 + area3 + area4 + + If compArea > squareArea Then + Return False + Else + Return True + End If + End Function + + Private Shared Function Check_Interference(comp1 As SldWorks.Component2, comp2 As SldWorks.Component2, comp1Name As String) + + Dim swApp As SldWorks.SldWorks + Dim swModel As SldWorks.ModelDoc2 + Dim swAssy As SldWorks.AssemblyDoc + Dim CompArray(1) As SldWorks.Component2 + Dim vCompArray + Dim vIntCompArray + Dim vIntFaceArray + + Dim interfering + + swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) + swModel = swApp.ActiveDoc + swAssy = swModel + + CompArray(0) = comp1 + CompArray(1) = comp2 + + vCompArray = CompArray + swAssy.ToolsCheckInterference2(2, (vCompArray), interfering, vIntCompArray, vIntFaceArray) + + Dim Bodies(UBound(vIntFaceArray)) As Object + Dim BodyNames(UBound(vIntFaceArray)) As String + Dim CompNames(UBound(vIntFaceArray)) As String + + For i = 0 To UBound(vIntFaceArray) + + Bodies(i) = vIntFaceArray(i).GetBody + BodyNames(i) = Bodies(i).Name + CompNames(i) = vIntCompArray(i).Name2 + + Next + + Dim bodiesToCutList As New List(Of Object) + + If CompNames(0) = comp1Name Then + bodiesToCutList.Add(Bodies(0)) + End If + For i = 1 To CompNames.Length - 1 + If CompNames(i) <> comp1Name Then + Exit For + ElseIf BodyNames(i) <> BodyNames(i - 1) Then + bodiesToCutList.Add(Bodies(i)) + End If + Next + + Dim bodiesToCut() As Object + bodiesToCut = bodiesToCutList.ToArray() + + Return bodiesToCut + + End Function + + +End Class diff --git a/Wardrobe/SolidWorks/Multiple_Drawing.vb b/Wardrobe/SolidWorks/Multiple_Drawing.vb index e696dba..65be093 100644 --- a/Wardrobe/SolidWorks/Multiple_Drawing.vb +++ b/Wardrobe/SolidWorks/Multiple_Drawing.vb @@ -1,635 +1,158 @@ -Imports XCCLibrary -Imports SldWorks +Imports SldWorks Public Class Multiple_Drawing - Private Shared gratingParameters As DataRow - Private Shared designName As String - Public Shared Sub Build_Grid() - Dim exportTable As DataTable - exportTable = User_Input.Create_ExportTable() - - XCCBaseClass.newDesign() - ExternalClass.PopulateTamplateXMLGroup() - - Dim inst_ As Integer - Dim parentID As Integer = 0 - gratingParameters = exportTable.Rows(0) - - For i = 0 To Grating_Fill.gratingDimensions.Rows.Count - 1 - inst_ = ExternalClass.instantiate_parts(parentID, "simplified_floor_grating", "") ' Ange pressure_welded eller type A, Serrated? - ExternalClass.modify_parameter_value("DP_LOADBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) - ExternalClass.modify_parameter_value("DP_GRATING_WIDTH", inst_, Grating_Fill.gratingDimensions.Rows(i)("WIDTH")) - ExternalClass.modify_parameter_value("DP_GRATING_LENGTH", inst_, Grating_Fill.gratingDimensions.Rows(i)("LENGTH")) - Dim offsetX As Integer = 0 - For j = 1 To Grating_Fill.gratingDimensions.Rows(i)("COLUMN") - offsetX += Grating_Fill.gratingDimensions.Rows(i - j)("LENGTH") - Next - - Dim offsetY As Integer = 0 - For j = 1 To Grating_Fill.gratingDimensions.Rows(i)("ROW") - offsetY += Grating_Fill.gratingDimensions.Rows(i - Grating_Fill.numOfHorizontal * j)("WIDTH") - Next - - ExternalClass.modify_parameter_value("DP_OFFSET_X", inst_, (Grating_Fill.gratingDimensions.Rows(i)("LENGTH") / 2) + offsetX) - ExternalClass.modify_parameter_value("DP_OFFSET_Y", inst_, (Grating_Fill.gratingDimensions.Rows(i)("WIDTH") / 2) + offsetY) - Next - - parentID = Grating_Fill.numOfHorizontal * (Grating_Fill.numOfVertical - 1) + 1 - For Each recessDR As DataRow In Data.recessData.Rows - Inst_Recesses(parentID, gratingParameters, recessDR) - Next - - importClass.copyGroupsByDataSet(ExternalClass.groupds_new) - Dim grNr = groupClass.NewGroupID - Dim designTable = designModel.selectDesign("*") - designName = designTable.rows(0)("designName") - groupClass.InstantiateGroup(designName, grNr, "START") - - Delete_Obsolete() - Recess_Indent() - Suppress_Bodies() - - Save_Assembly() - End Sub - - Private Shared Sub Suppress_Bodies() - Dim swApp As SldWorks.SldWorks - swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) - - Dim boolstatus As Boolean - Dim AssemblyExtension As SldWorks.ModelDocExtension - - Dim Assembly = swApp.ActiveDoc - Dim modelDoc As IModelDoc2 - modelDoc = Assembly - - Dim SelMgr = Assembly.SelectionManager() - AssemblyExtension = Assembly.Extension - Dim sldata = SelMgr.CreateSelectData - - Dim partDT As New DataTable - partDT = partModel.selectPart("*") - - Dim gratingParts = partDT.Select("parentName = 'START'") - - Dim components = Assembly.GetComponents(True) - - For i = 0 To components.Length - 1 - Dim compName As String = components(i).Name2 - If compName.Split("_")(0) = "RECESS" Then - Assembly.ClearSelection2(True) - boolstatus = AssemblyExtension.SelectByID2(compName & "@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) - Assembly.EditPart - - Dim recessBodies = components(i).GetBodies2(0) - Dim recessBodyList As New List(Of String) - For j = 0 To recessBodies.Length - 1 - Dim bodyName As String = recessBodies(j).Name - If Not bodyName = "Cut-Body" Then - recessBodyList.Add(bodyName) - End If - Next - For j = 0 To recessBodyList.Count - 1 - Assembly.ClearSelection2(True) - boolstatus = AssemblyExtension.SelectByID2(recessBodyList(j) & "@" & compName & "@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) - modelDoc.EditSuppress2() - Next - Assembly.EditAssembly - End If - Next - End Sub - - Private Shared Sub Save_Assembly() + Public Shared Sub Generate_Drawing() Dim swApp As SldWorks.SldWorks swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) Dim status As Boolean - Dim Assebmly = swApp.ActiveDoc() - status = Assebmly.SaveAs3(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\gratings_assembly_simplified.SLDASM", 0, 4) + Dim iDrawing As DrawingDoc + Dim swSheetWidth As Double + swSheetWidth = 0.42 + Dim swSheetHeight As Double + swSheetHeight = 0.297 + iDrawing = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2020\templates\Drawing.drwdot", 12, swSheetWidth, swSheetHeight) + + Dim swSheet As Sheet + swSheet = iDrawing.GetCurrentSheet() + swSheet.SetProperties2(12, 12, 1, 1, False, swSheetWidth, swSheetHeight, True) + swSheet.SetTemplateName(Settings.HLCtFolder & "\Files Needed\A3 Part.slddrt") + swSheet.ReloadTemplate(True) + swSheet.SetScale(1, 10, False, False) ' FIXA + swSheet.SetName("Assembly") + + Dim layMgr As LayerMgr + layMgr = iDrawing.GetLayerManager() + status = layMgr.SetCurrentLayer("Svenska") + + Dim myView As View + myView = iDrawing.CreateDrawViewFromModelView3(Settings.folderPaths("object_" & Data.objectNum & "_models3D_frames_sw_support") & "\gratings_assembly_simplified.SLDASM", + "*Front", swSheetWidth / 2, swSheetHeight / 2, 0) + myView.UseSheetScale() = True + myView.SetDisplayTangentEdges2(2) + + Dim swExtensions As SldWorks.ModelDocExtension + swExtensions = iDrawing.Extension + Dim RootComp = myView.RootDrawingComponent + Dim CompName = RootComp.Name + + Dim OutLine = myView.GetOutline + + Dim modelsDT As DataTable = Multiple_3D_Simplified.partDT + Dim gratingName, plane1Name, plane2Name As String + Dim counter As Integer + Dim measurement As IDisplayDimension + ' -- Loop Horizontal -- + For i = 0 To Grating_Fill.numOfHorizontal - 1 + status = False + counter = 0 + While status = False + gratingName = modelsDT.Rows(i + counter * Grating_Fill.numOfHorizontal)("partName") + iDrawing.ClearSelection2(True) + plane1Name = "L1@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane1Name, "PLANE", 0, 0, 0, False, 0, Nothing, 0) + plane2Name = "L2@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane2Name, "PLANE", 0, 0, 0, True, 0, Nothing, 0) + counter += 1 + End While + + measurement = iDrawing.AddHorizontalDimension2(0, OutLine(3) + 0.005, 0) + + iDrawing.ClearSelection2(True) + measurement.SetUnits2(False, 0, 1, 0, True, 12) + measurement.CenterText = True + measurement.SetPrecision3(0, 0, 0, 0) + measurement.OffsetText = True + measurement.OffsetText = False ' Helps center the text + Next + + status = False + counter = 0 + While status = False + gratingName = modelsDT.Rows(counter * Grating_Fill.numOfHorizontal)("partName") + iDrawing.ClearSelection2(True) + plane1Name = "L1@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane1Name, "PLANE", 0, 0, 0, False, 0, Nothing, 0) + counter += 1 + End While + + status = False + counter = 0 + While status = False + gratingName = modelsDT.Rows(Grating_Fill.numOfHorizontal - 1 + counter * Grating_Fill.numOfHorizontal)("partName") + plane2Name = "L2@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane2Name, "PLANE", 0, 0, 0, True, 0, Nothing, 0) + counter += 1 + End While + + measurement = iDrawing.AddHorizontalDimension2(0, OutLine(3) + 0.005 + 0.01, 0) + + measurement.SetUnits2(False, 0, 1, 0, True, 12) + measurement.CenterText = True + measurement.SetPrecision3(0, 0, 0, 0) + measurement.ShowParenthesis = True + measurement.OffsetText = True + measurement.OffsetText = False + + ' -- Loop Vertical -- + For i = 0 To Grating_Fill.numOfVertical - 1 + status = False + counter = 0 + While status = False + gratingName = modelsDT.Rows(i * Grating_Fill.numOfHorizontal + counter)("partName") + iDrawing.ClearSelection2(True) + plane1Name = "W1@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane1Name, "PLANE", 0, 0, 0, False, 0, Nothing, 0) + plane2Name = "W2@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane2Name, "PLANE", 0, 0, 0, True, 0, Nothing, 0) + counter += 1 + End While + + measurement = iDrawing.AddVerticalDimension2(OutLine(0) - 0.005, 0, 0) + + iDrawing.ClearSelection2(True) + measurement.SetUnits2(False, 0, 1, 0, True, 12) + measurement.CenterText = True + measurement.SetPrecision3(0, 0, 0, 0) + measurement.OffsetText = True + measurement.OffsetText = False ' Helps center the text + Next + + status = False + counter = 0 + While status = False + gratingName = modelsDT.Rows(counter)("partName") + iDrawing.ClearSelection2(True) + plane1Name = "W1@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane1Name, "PLANE", 0, 0, 0, False, 0, Nothing, 0) + counter += 1 + End While + + status = False + counter = 0 + While status = False + gratingName = modelsDT.Rows(Grating_Fill.numOfHorizontal * (Grating_Fill.numOfVertical - 1) + counter)("partName") + plane2Name = "W2@" & CompName & "@" & myView.GetName2 & "/" & gratingName & "-1@" & CompName.Split("-")(0) + status = swExtensions.SelectByID2(plane2Name, "PLANE", 0, 0, 0, True, 0, Nothing, 0) + counter += 1 + End While + + measurement = iDrawing.AddVerticalDimension2(OutLine(0) - 0.005 - 0.01, 0, 0) + + measurement.SetUnits2(False, 0, 1, 0, True, 12) + measurement.CenterText = True + measurement.SetPrecision3(0, 0, 0, 0) + measurement.ShowParenthesis = True + measurement.OffsetText = True + measurement.OffsetText = False + + + Dim a = 1 + + + + + End Sub - Private Shared Sub Inst_Recesses(parentID As Integer, gratingParameters As DataRow, recessDR As DataRow) - Dim inst_ As Integer - - If recessDR("RECESS TYPE") = "SQUARE" Then - Dim squareL As Integer = recessDR("LENGTH") + gratingParameters("LOADBAR_THICKNESS") - Dim squareW As Integer = recessDR("WIDTH") + gratingParameters("LOADBAR_THICKNESS") - - inst_ = ExternalClass.instantiate_parts(parentID, "recess_rectangle", "") - - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, squareL + gratingParameters("LOADBAR_THICKNESS")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, squareW) - ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) - ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) - ExternalClass.modify_parameter_value("DP_BOX_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) - - - If recessDR("CORNER") = 1 Then - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - squareW) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) - - 'Position - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, squareL) - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, gratingParameters("LOADBAR_THICKNESS")) - ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, 0) - ElseIf recessDR("CORNER") = 2 Then - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - squareW) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL - squareL - gratingParameters("LOADBAR_THICKNESS")) - - 'Position - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, 0) - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, gratingParameters("LOADBAR_THICKNESS")) - ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, 0) - ElseIf recessDR("CORNER") = 3 Then - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL - squareL - gratingParameters("LOADBAR_THICKNESS")) - - 'Position - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, 0) - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, 0) - ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, squareW - gratingParameters("LOADBAR_THICKNESS")) - Else - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) - - 'Position - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, squareL) - ExternalClass.modify_parameter_value("DP_V_EDGEBAR_BOTTOM", inst_, 0) - ExternalClass.modify_parameter_value("DP_H_EDGEBAR_POS", inst_, squareW - gratingParameters("LOADBAR_THICKNESS")) - End If - - ElseIf recessDR("RECESS TYPE") = "ANGLE" Then - inst_ = ExternalClass.instantiate_parts(parentID, "recess_angle", "") - - ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) - ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) - - If recessDR("CORNER") = 1 Then - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 90) - - ElseIf recessDR("CORNER") = 2 Then - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 180) - - ElseIf recessDR("CORNER") = 3 Then - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 270) - - Else - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 0) - - End If - - ElseIf recessDR("RECESS TYPE") = "SIDE SQUARE" Then - inst_ = ExternalClass.instantiate_parts(parentID, "recess_side_square", "") - - ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) - ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) - - If recessDR("SIDE") = 1 Then - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, recessDR("OFFSET")) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 90) - - ElseIf recessDR("SIDE") = 2 Then - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - recessDR("OFFSET")) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 180) - - ElseIf recessDR("SIDE") = 3 Then - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Data.gratingL - recessDR("OFFSET")) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 270) - - Else - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, recessDR("OFFSET")) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) - ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 0) - - End If - - ElseIf recessDR("RECESS TYPE") = "MIDDLE SQUARE" Then - inst_ = ExternalClass.instantiate_parts(parentID, "recess_middle_square", "") - - ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("LENGTH")) - ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH")) - ExternalClass.modify_parameter_value("DP_EDGEBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) - ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) - ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, recessDR("OFFSET Y")) - ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, recessDR("OFFSET X")) - End If - End Sub - - Private Shared Sub Recess_Indent() - Dim swApp As SldWorks.SldWorks - swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) - - Dim boolstatus As Boolean - Dim AssemblyExtension As SldWorks.ModelDocExtension - - Dim Assembly = swApp.ActiveDoc - Dim modelDoc As IModelDoc2 - modelDoc = Assembly - - Dim SelMgr = Assembly.SelectionManager() - AssemblyExtension = Assembly.Extension - Dim sldata = SelMgr.CreateSelectData - - Dim partDT As New DataTable - partDT = partModel.selectPart("*") - - Dim gratingParts = partDT.Select("parentName = 'START'") - - Dim components = Assembly.GetComponents(True) - - 'Indent - Dim recessParentName As String = partDT.Rows(Grating_Fill.numOfHorizontal * (Grating_Fill.numOfVertical - 1))("partName") - Dim recessParts = partDT.Select("parentName = '" & recessParentName & "'") - For i = 0 To recessParts.Count - 1 - Dim recessPartName As String = recessParts(i)("partName") - If recessPartName.Split("_")(0) = "RECESS" Then - - Dim indexRecess As Integer - For k = 0 To components.Length - 1 - If components(k).Name2 = recessPartName & "-1" Then - indexRecess = k - Exit For - End If - Next - - Dim recessBodies = components(indexRecess).GetBodies2(0) - Dim recessComponent As SldWorks.Component2 = components(indexRecess) - - Dim indexBody As Integer - For l = 0 To recessBodies.Length - 1 - If recessBodies(l).Name = "Cut-Body" Then - indexBody = l - Exit For - End If - Next - - Dim recessFace = recessBodies(indexBody).GetFirstFace - - For j = 0 To Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal - 1 - Assembly.ClearSelection2(True) - - Dim gratingPartName As String = partDT.Rows(j)("partName") - boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) - If boolstatus = True Then - Dim gratingPart = SelMgr.GetSelectedObject6(1, -1) - - Assembly.EditPart - - Dim indexGrating As Integer - For k = 0 To components.Length - 1 - If components(k).Name2 = gratingPartName & "-1" Then - indexGrating = k - Exit For - End If - Next - - Dim gratingComponent As SldWorks.Component2 = components(indexGrating) - - Dim bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") - - For k = 0 To bodiesToCut.Length - 1 - Assembly.ClearSelection2(True) - - sldata.Mark = 1 - Dim bodyName As String = bodiesToCut(k).Name & "@" & gratingPartName & "-1@" & designName - boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0) - - sldata.Mark = 4 - recessFace.Select4(True, sldata) - - Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) - Assembly.ClearSelection2(True) - Next - - bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") - - For k = 0 To bodiesToCut.Length - 1 - boolstatus = AssemblyExtension.SelectByID2(bodiesToCut(k).Name & "@" & gratingPartName & "-1@" & designName, "SOLIDBODY", 0, 0, 0, True, 0, Nothing, 0) - Dim myFeature As Object - Dim modelFeat As FeatureManager = modelDoc.FeatureManager - myFeature = modelFeat.InsertDeleteBody2(False) - Next - - Assembly.EditAssembly - End If - Next - Assembly.ClearSelection2(True) - End If - Assembly.EditAssembly - boolstatus = modelDoc.EditRebuild3() - Next - End Sub - - - Private Shared Sub Delete_Obsolete() - Dim listOfObsolete As List(Of Integer) - listOfObsolete = Find_Obsolete() - - Dim swApp As SldWorks.SldWorks - swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) - Dim boolstatus As Boolean - Dim Assembly = swApp.ActiveDoc - Dim AssemblyExtension As SldWorks.ModelDocExtension - AssemblyExtension = Assembly.Extension - - Dim partDT As New DataTable - partDT = partModel.selectPart("*") - - Dim gratingParts = partDT.Select("parentName = 'START'") - - For i = 0 To listOfObsolete.Count - 1 - Dim gratingPartName As String = gratingParts(listOfObsolete(i))("partName") - - Assembly.ClearSelection2(True) - boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) - Assembly.EditDelete - Next - End Sub - - Public Shared Function Find_Obsolete() - Dim listOfObsolete As New List(Of Integer) - - For i = 0 To Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal - 1 - Dim gratingDR As DataRow = Grating_Fill.gratingDimensions.Rows(i) - Dim origo(2) As Integer - origo(0) = Data.gratingL / 2 - origo(1) = Data.gratingW / 2 - - Dim GP As New List(Of Integer()) - Dim p1(1), p2(1), p3(1), p4(1) As Integer - p1(0) = -origo(0) - p2(0) = -origo(0) + gratingDR("LENGTH") - For j = 1 To gratingDR("COLUMN") - p1(0) += Grating_Fill.gratingDimensions.Rows(i - j)("LENGTH") - p2(0) += Grating_Fill.gratingDimensions.Rows(i - j)("LENGTH") - Next - p1(1) = origo(1) - p3(1) = origo(1) - gratingDR("WIDTH") - For j = 1 To gratingDR("ROW") - p1(1) -= Grating_Fill.gratingDimensions.Rows(i - Grating_Fill.numOfHorizontal * j)("WIDTH") - p3(1) -= Grating_Fill.gratingDimensions.Rows(i - Grating_Fill.numOfHorizontal * j)("WIDTH") - Next - - p2(1) = p1(1) - p3(0) = p1(0) - p4(0) = p2(0) - p4(1) = p3(1) - - GP.Add(p1) - GP.Add(p2) - GP.Add(p3) - GP.Add(p4) - - Dim cornerAngleCounter As Integer = 1 - Dim cornerRectangleCounter As Integer = 1 - Dim numOfSideRectangles As Integer = 0 - Dim numOfMiddleRectangles As Integer = 0 - For j = 0 To Data.recessData.Rows.Count - 1 - If Data.recessData.Rows(j)("RECESS TYPE") = "ANGLE" Then - Dim RP As New List(Of Integer()) - Dim rec1(1), rec2(1), rec3(1) As Integer - - rec1(0) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("X") * 1000 - rec1(1) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("Y") * 1000 - - Dim rowIndex As Integer - For k = 0 To Data.gratingPoints.Rows.Count - 1 - If Data.gratingPoints.Rows(k)("NAME") = "CA" & cornerAngleCounter & "_" & 1 Then - rowIndex = k - End If - Next - - rec2(0) = Data.gratingPoints.Rows(rowIndex)("X") * 1000 - rec2(1) = Data.gratingPoints.Rows(rowIndex)("Y") * 1000 - - rec3(0) = Data.gratingPoints.Rows(rowIndex + 1)("X") * 1000 - rec3(1) = Data.gratingPoints.Rows(rowIndex + 1)("Y") * 1000 - - RP.Add(rec1) - RP.Add(rec2) - RP.Add(rec3) - - Dim gratingObsolete As Boolean = True - For k = 0 To 3 - Dim pInTriangle As Boolean = Calculate_Triangle_Bool(GP(k), RP(0), RP(1), RP(2)) - If pInTriangle = False Then - gratingObsolete = False - Exit For - End If - Next - If gratingObsolete = True Then - listOfObsolete.Add(i) - End If - - cornerAngleCounter += 1 - - ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" OrElse Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" _ - OrElse Data.recessData.Rows(j)("RECESS TYPE") = "MIDDLE SQUARE" Then - Dim RP As New List(Of Integer()) - Dim rec1(1), rec2(1), rec3(1), rec4(1) As Integer - - Dim rowIndex As Integer - If Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" Then - For k = 0 To Data.gratingPoints.Rows.Count - 1 - If Data.gratingPoints.Rows(k)("NAME") = "CR" & cornerRectangleCounter & "_" & 1 Then - rowIndex = k - End If - Next - cornerRectangleCounter += 1 - ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" Then - For k = 0 To Data.gratingPoints.Rows.Count - 1 - If Data.gratingPoints.Rows(k)("NAME") = "CS" & numOfSideRectangles & "_" & 1 Then - rowIndex = k - End If - Next - numOfSideRectangles += 1 - End If - - If Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" OrElse Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" Then - rec1(0) = Data.gratingPoints.Rows(rowIndex)("X") * 1000 - rec1(1) = Data.gratingPoints.Rows(rowIndex)("Y") * 1000 - - rec2(0) = Data.gratingPoints.Rows(rowIndex + 1)("X") * 1000 - rec2(1) = Data.gratingPoints.Rows(rowIndex + 1)("Y") * 1000 - - rec3(0) = Data.gratingPoints.Rows(rowIndex + 2)("X") * 1000 - rec3(1) = Data.gratingPoints.Rows(rowIndex + 2)("Y") * 1000 - - If Data.recessData.Rows(j)("RECESS TYPE") = "SQUARE" Then - rec4(0) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("X") * 1000 - rec4(1) = Data.grossAreaPoints.Rows(Data.recessData.Rows(j)("CORNER") - 1)("Y") * 1000 - ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "SIDE SQUARE" Then - rec4(0) = Data.gratingPoints.Rows(rowIndex + 3)("X") * 1000 - rec4(1) = Data.gratingPoints.Rows(rowIndex + 3)("Y") * 1000 - - End If - - ElseIf Data.recessData.Rows(j)("RECESS TYPE") = "MIDDLE SQUARE" Then - numOfMiddleRectangles += 1 - - rec1(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 4)("X") * 1000 - rec1(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 4)("Y") * 1000 - - rec2(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 3)("X") * 1000 - rec2(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 3)("Y") * 1000 - - rec3(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 2)("X") * 1000 - rec3(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 2)("Y") * 1000 - - rec4(0) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 1)("X") * 1000 - rec4(1) = Data.gratingMiddlePoints.Rows(numOfMiddleRectangles * 4 - 1)("Y") * 1000 - End If - - RP.Add(rec1) - RP.Add(rec2) - RP.Add(rec3) - RP.Add(rec4) - - Dim gratingObsolete As Boolean = True - For k = 0 To 3 - Dim pInSquare As Boolean = Calculate_Square_Bool(GP(k), RP(0), RP(1), RP(2), RP(3)) - If pInSquare = False Then - gratingObsolete = False - Exit For - End If - Next - If gratingObsolete = True Then - listOfObsolete.Add(i) - End If - - End If - - Next - - Next - Return listOfObsolete - End Function - - Private Shared Function Calculate_Triangle_Bool(gp As Integer(), p0 As Integer(), p1 As Integer(), p2 As Integer()) - - Dim s As Double = p0(1) * p2(0) - p0(0) * p2(1) + (p2(1) - p0(1)) * gp(0) + (p0(0) - p2(0)) * gp(1) - Dim t As Double = 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 Double = -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 - - Private Shared Function Calculate_Square_Bool(gp As Integer(), p0 As Integer(), p1 As Integer(), p2 As Integer(), p3 As Integer()) - Dim squareArea As Double = Math.Abs(p0(0) - p1(0)) * Math.Abs(p1(1) - p2(1)) - If squareArea = 0 Then - squareArea = Math.Abs(p0(1) - p1(1)) * Math.Abs(p1(0) - p2(0)) - End If - - Dim area1 As Double = Math.Abs(gp(0) * p0(1) + gp(1) * p1(0) + p0(0) * p1(1) - p0(1) * p1(0) - gp(1) * p0(0) - gp(0) * p1(1)) / 2 - Dim area2 As Double = Math.Abs(gp(0) * p1(1) + gp(1) * p2(0) + p1(0) * p2(1) - p1(1) * p2(0) - gp(1) * p1(0) - gp(0) * p2(1)) / 2 - Dim area3 As Double = Math.Abs(gp(0) * p2(1) + gp(1) * p3(0) + p2(0) * p3(1) - p2(1) * p3(0) - gp(1) * p2(0) - gp(0) * p3(1)) / 2 - Dim area4 As Double = Math.Abs(gp(0) * p3(1) + gp(1) * p0(0) + p3(0) * p0(1) - p3(1) * p0(0) - gp(1) * p3(0) - gp(0) * p0(1)) / 2 - Dim compArea As Double = area1 + area2 + area3 + area4 - - If compArea > squareArea Then - Return False - Else - Return True - End If - End Function - - Private Shared Function Check_Interference(comp1 As SldWorks.Component2, comp2 As SldWorks.Component2, comp1Name As String) - - Dim swApp As SldWorks.SldWorks - Dim swModel As SldWorks.ModelDoc2 - Dim swAssy As SldWorks.AssemblyDoc - Dim CompArray(1) As SldWorks.Component2 - Dim vCompArray - Dim vIntCompArray - Dim vIntFaceArray - - Dim interfering - - swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) - swModel = swApp.ActiveDoc - swAssy = swModel - - CompArray(0) = comp1 - CompArray(1) = comp2 - - vCompArray = CompArray - swAssy.ToolsCheckInterference2(2, (vCompArray), interfering, vIntCompArray, vIntFaceArray) - - Dim Bodies(UBound(vIntFaceArray)) As Object - Dim BodyNames(UBound(vIntFaceArray)) As String - Dim CompNames(UBound(vIntFaceArray)) As String - - For i = 0 To UBound(vIntFaceArray) - - Bodies(i) = vIntFaceArray(i).GetBody - BodyNames(i) = Bodies(i).Name - CompNames(i) = vIntCompArray(i).Name2 - - Next - - Dim bodiesToCutList As New List(Of Object) - - If CompNames(0) = comp1Name Then - bodiesToCutList.Add(Bodies(0)) - End If - For i = 1 To CompNames.Length - 1 - If CompNames(i) <> comp1Name Then - Exit For - ElseIf BodyNames(i) <> BodyNames(i - 1) Then - bodiesToCutList.Add(Bodies(i)) - End If - Next - - Dim bodiesToCut() As Object - bodiesToCut = bodiesToCutList.ToArray() - - Return bodiesToCut - - End Function - - End Class diff --git a/Wardrobe/Wardrobe.vbproj b/Wardrobe/Wardrobe.vbproj index 016a1aa..66ad6d6 100644 --- a/Wardrobe/Wardrobe.vbproj +++ b/Wardrobe/Wardrobe.vbproj @@ -124,6 +124,7 @@ +