From 9c07c563a8a30648131ba9b3a83947fdf5fd11be Mon Sep 17 00:00:00 2001 From: Mans Date: Thu, 29 Apr 2021 12:00:54 +0200 Subject: [PATCH] Fixes to support beams (recesses etc) --- HLCt/Parts/START.SLDPRT | Bin 49887 -> 49800 bytes HLCt/Parts/~$START.SLDPRT | Bin 0 -> 6 bytes Wardrobe/SolidWorks/Multiple_3D.vb | 249 +++++++++++++--- Wardrobe/SolidWorks/Multiple_3D_Simplified.vb | 268 ++++++++++-------- 4 files changed, 357 insertions(+), 160 deletions(-) create mode 100644 HLCt/Parts/~$START.SLDPRT diff --git a/HLCt/Parts/START.SLDPRT b/HLCt/Parts/START.SLDPRT index 3805f03d63f4d8dffa927692c8872c1409613825..ba78825919748511abd624f5164323276f57c1b5 100644 GIT binary patch delta 24630 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 Sa#rJ_O@f3h<>#XJF8=}3k#>#% delta 24664 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 diff --git a/HLCt/Parts/~$START.SLDPRT b/HLCt/Parts/~$START.SLDPRT new file mode 100644 index 0000000000000000000000000000000000000000..b07f2ee735073c92fc341c66f5066b7db22efc93 GIT binary patch literal 6 NcmazjNG(cX000O00t5g6 literal 0 HcmV?d00001 diff --git a/Wardrobe/SolidWorks/Multiple_3D.vb b/Wardrobe/SolidWorks/Multiple_3D.vb index 61a7b21..65aa6f7 100644 --- a/Wardrobe/SolidWorks/Multiple_3D.vb +++ b/Wardrobe/SolidWorks/Multiple_3D.vb @@ -61,6 +61,24 @@ Public Class Multiple_3D Frame_3D.Build_Frame(gratingParameters, parentID) End If + If Calculate_Fill_Grid.withSupportBeam = True Then + For i = 0 To Calculate_Fill_Grid.supportBeamsDT.Rows.Count - 1 + inst_ = ExternalClass.instantiate_parts(parentID, "support_beam", "") + ExternalClass.modify_parameter_value("DP_HEIGHT_OFFSET", inst_, gratingParameters("LOADBAR_HEIGHT")) + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, Calculate_Fill_Grid.supportBeamsDT.Rows(i)("LENGTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_TOP", inst_, Calculate_Fill_Grid.supportBeamsDT.Rows(i)("OFFSET_TOP")) + ExternalClass.modify_parameter_value("DP_OFFSET_BOTTOM", inst_, Calculate_Fill_Grid.supportBeamsDT.Rows(i)("OFFSET_BOTTOM")) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, Calculate_Fill_Grid.supportBeamsDT.Rows(i)("ROTATION")) + If Calculate_Fill_Grid.supportBeamsDT.Rows(i)("ROTATION") = 0 Then + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Calculate_Fill_Grid.supportBeamsDT.Rows(i)("GLOBAL_OFFSET")) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) + Else + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, Calculate_Fill_Grid.supportBeamsDT.Rows(i)("GLOBAL_OFFSET")) + End If + Next + End If + importClass.copyGroupsByDataSet(ExternalClass.groupds_new) Dim grNr = groupClass.NewGroupID Dim designTable = designModel.selectDesign("*") @@ -70,6 +88,7 @@ Public Class Multiple_3D Delete_Obsolete() Recess_Indent() + SupportBeams_Indent() Save_Assembly() End Sub @@ -299,6 +318,15 @@ Public Class Multiple_3D Dim components = Assembly.GetComponents(True) 'Indent + Dim listOfBeams As New List(Of DataRow) + For i = 0 To partDT.Rows.Count - 1 + Dim partName As String + partName = partDT.Rows(i)("partName") + If partName.Split("_")(0) = "SUPPORT" Then + listOfBeams.Add(partDT.Rows(i)) + End If + Next + Dim recessParentName As String = partDT.Rows(Calculate_Fill_Grid.numOfHorizontal * (Calculate_Fill_Grid.numOfVertical - 1))("partName") Dim recessParts = partDT.Select("parentName = '" & recessParentName & "'") For i = 0 To recessParts.Count - 1 @@ -326,61 +354,101 @@ Public Class Multiple_3D Dim recessFace = recessBodies(indexBody).GetFirstFace - For j = 0 To Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal - 1 + For j = 0 To Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal - 1 + Calculate_Fill_Grid.supportBeamsDT.Rows.Count Assembly.ClearSelection2(True) + If j < Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal Then + 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) - 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 - Assembly.EditPart + boolstatus = AssemblyExtension.SelectByID2("HorizontalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) + modelDoc.EditSuppress2() + boolstatus = AssemblyExtension.SelectByID2("VerticalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) + modelDoc.EditSuppress2() - boolstatus = AssemblyExtension.SelectByID2("HorizontalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) - modelDoc.EditSuppress2() - boolstatus = AssemblyExtension.SelectByID2("VerticalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) - modelDoc.EditSuppress2() + 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 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 gratingComponent As SldWorks.Component2 = components(indexGrating) + Dim bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") + For k = 0 To bodiesToCut.Length - 1 + Assembly.ClearSelection2(True) - 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 = 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) - sldata.Mark = 4 - recessFace.Select4(True, sldata) + Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) + Assembly.ClearSelection2(True) + Next - 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) + Dim a = 1 + 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) - Dim a = 1 - Next + boolstatus = AssemblyExtension.SelectByID2("HorizontalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) + modelDoc.EditUnsuppress2() + boolstatus = AssemblyExtension.SelectByID2("VerticalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) + modelDoc.EditUnsuppress2() + Assembly.EditAssembly + End If + + Else + Dim j2 As Integer = j - Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal + Dim beamName As String = listOfBeams(j2)("partName") + boolstatus = AssemblyExtension.SelectByID2(beamName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + If boolstatus = True Then + Dim gratingPart = SelMgr.GetSelectedObject6(1, -1) + + Assembly.EditPart + + Dim indexBeam As Integer + For k = 0 To components.Length - 1 + If components(k).Name2 = beamName & "-1" Then + indexBeam = k + Exit For + End If + Next + + Dim beamComponent As SldWorks.Component2 = components(indexBeam) + + Dim bodiesToCut = Check_Interference(beamComponent, recessComponent, beamName & "-1") + + For k = 0 To bodiesToCut.Length - 1 + Assembly.ClearSelection2(True) + + sldata.Mark = 1 + Dim bodyName As String = bodiesToCut(k).Name & "@" & beamName & "-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 + Assembly.EditAssembly + End If - boolstatus = AssemblyExtension.SelectByID2("HorizontalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) - modelDoc.EditUnsuppress2() - boolstatus = AssemblyExtension.SelectByID2("VerticalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) - modelDoc.EditUnsuppress2() - Assembly.EditAssembly End If + Next Assembly.ClearSelection2(True) @@ -494,6 +562,99 @@ Public Class Multiple_3D End Sub + Private Shared Sub SupportBeams_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 components = Assembly.GetComponents(True) + + 'Indent + Dim listOfHorizBeams As New List(Of DataRow) + Dim listOfVertBeams As New List(Of DataRow) + Dim counter As Integer = 1 + For i = 0 To partDT.Rows.Count - 1 + Dim partName As String + partName = partDT.Rows(i)("partName") + If partName.Split("_")(0) = "SUPPORT" Then + If counter < Calculate_Fill_Grid.numOfVertical Then + listOfHorizBeams.Add(partDT.Rows(i)) + counter += 1 + Else + listOfVertBeams.Add(partDT.Rows(i)) + End If + End If + Next + + For i = 0 To listOfHorizBeams.Count - 1 + Dim nameOfHorizBeam As String = listOfHorizBeams(i)("partName") + Dim indexBeamHoriz As Integer + For j = 0 To components.Length - 1 + If components(j).Name2 = nameOfHorizBeam & "-1" Then + indexBeamHoriz = j + Exit For + End If + Next + + Dim horizBeamBodies = components(indexBeamHoriz).GetBodies2(0) + Dim horizBeamComponent As SldWorks.Component2 = components(indexBeamHoriz) + + Dim horizBeamFace = horizBeamBodies(0).GetFirstFace + + For j = 0 To listOfVertBeams.Count - 1 + Dim nameOfVertBeam As String = listOfVertBeams(j)("partName") + Dim indexBeamVert As Integer + For k = 0 To components.Length - 1 + If components(k).Name2 = nameOfVertBeam & "-1" Then + indexBeamVert = k + Exit For + End If + Next + Dim vertBeamBodies = components(indexBeamVert).GetBodies2(0) + Dim vertBeamComponent As SldWorks.Component2 = components(indexBeamVert) + + Dim bodiesToCut = Check_Interference(vertBeamComponent, horizBeamComponent, nameOfVertBeam & "-1") + If bodiesToCut Is Nothing Then + Assembly.EditAssembly + Continue For + End If + Assembly.ClearSelection2(True) + boolstatus = AssemblyExtension.SelectByID2(nameOfVertBeam & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + Assembly.EditPart + For k = 0 To bodiesToCut.Length - 1 + Assembly.ClearSelection2(True) + + sldata.Mark = 1 + Dim bodyName As String = bodiesToCut(k).Name & "@" & nameOfVertBeam & "-1@" & designName + boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0) + + sldata.Mark = 4 + horizBeamFace.Select4(True, sldata) + + Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) + Assembly.ClearSelection2(True) + Next + Assembly.EditAssembly + Next + Next + + Assembly.EditAssembly + boolstatus = modelDoc.EditRebuild3() + + + End Sub Private Shared Sub Delete_Obsolete() Dim listOfObsolete As List(Of Integer) @@ -746,7 +907,9 @@ Public Class Multiple_3D vCompArray = CompArray swAssy.ToolsCheckInterference2(2, (vCompArray), interfering, vIntCompArray, vIntFaceArray) - + If vIntFaceArray Is Nothing Then + Return Nothing + End If Dim Bodies(UBound(vIntFaceArray)) As Object Dim BodyNames(UBound(vIntFaceArray)) As String Dim CompNames(UBound(vIntFaceArray)) As String diff --git a/Wardrobe/SolidWorks/Multiple_3D_Simplified.vb b/Wardrobe/SolidWorks/Multiple_3D_Simplified.vb index 83d3ec2..02aa964 100644 --- a/Wardrobe/SolidWorks/Multiple_3D_Simplified.vb +++ b/Wardrobe/SolidWorks/Multiple_3D_Simplified.vb @@ -394,6 +394,16 @@ Public Class Multiple_3D_Simplified Dim components = Assembly.GetComponents(True) 'Indent + + Dim listOfBeams As New List(Of DataRow) + For i = 0 To partDT.Rows.Count - 1 + Dim partName As String + partName = partDT.Rows(i)("partName") + If partName.Split("_")(0) = "SUPPORT" Then + listOfBeams.Add(partDT.Rows(i)) + End If + Next + Dim recessParentName As String = partDT.Rows(Calculate_Fill_Grid.numOfHorizontal * (Calculate_Fill_Grid.numOfVertical - 1))("partName") Dim recessParts = partDT.Select("parentName = '" & recessParentName & "'") For i = 0 To recessParts.Count - 1 @@ -421,52 +431,89 @@ Public Class Multiple_3D_Simplified Dim recessFace = recessBodies(indexBody).GetFirstFace - For j = 0 To Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal - 1 + For j = 0 To Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal - 1 + Calculate_Fill_Grid.supportBeamsDT.Rows.Count Assembly.ClearSelection2(True) + If j < Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal Then + 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) - 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 - 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 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 gratingComponent As SldWorks.Component2 = components(indexGrating) + Dim bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") - Dim bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") + For k = 0 To bodiesToCut.Length - 1 + Assembly.ClearSelection2(True) - 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 = 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) - sldata.Mark = 4 - recessFace.Select4(True, sldata) + Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) + Assembly.ClearSelection2(True) + Next - Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) - Assembly.ClearSelection2(True) - Next + bodiesToCut = Check_Interference(gratingComponent, recessComponent, gratingPartName & "-1") - 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 - 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 + Else + Dim j2 As Integer = j - Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.numOfHorizontal + Dim beamName As String = listOfBeams(j2)("partName") + boolstatus = AssemblyExtension.SelectByID2(beamName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + If boolstatus = True Then + Dim gratingPart = SelMgr.GetSelectedObject6(1, -1) - Assembly.EditAssembly + Assembly.EditPart + + Dim indexBeam As Integer + For k = 0 To components.Length - 1 + If components(k).Name2 = beamName & "-1" Then + indexBeam = k + Exit For + End If + Next + + Dim beamComponent As SldWorks.Component2 = components(indexBeam) + + Dim bodiesToCut = Check_Interference(beamComponent, recessComponent, beamName & "-1") + + For k = 0 To bodiesToCut.Length - 1 + Assembly.ClearSelection2(True) + + sldata.Mark = 1 + Dim bodyName As String = bodiesToCut(k).Name & "@" & beamName & "-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 + Assembly.EditAssembly + End If End If Next Assembly.ClearSelection2(True) @@ -476,7 +523,6 @@ Public Class Multiple_3D_Simplified Next End Sub - 'FORTSÄTT HÄR: FIXA ATT SKÄRA VERTICAL MED HORIZONTAL BEAMS Private Shared Sub SupportBeams_Indent() Dim swApp As SldWorks.SldWorks swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) @@ -494,94 +540,80 @@ Public Class Multiple_3D_Simplified partDT = partModel.selectPart("*") - Dim gratingParts = partDT.Select("parentName = 'START'") - Dim components = Assembly.GetComponents(True) 'Indent - Dim beamParentName As String = partDT.Rows(Calculate_Fill_Grid.numOfHorizontal * (Calculate_Fill_Grid.numOfVertical - 1))("partName") - Dim beamParts = partDT.Select("parentName = '" & beamParentName & "'") - - For i = 0 To beamParts.Count - 1 - Dim beamPartName As String = beamParts(i)("partName") - If beamPartName.Split("_")(0) = "RECESS" Then - - Dim indexRecess As Integer - For k = 0 To components.Length - 1 - If components(k).Name2 = beamPartName & "-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 Calculate_Fill_Grid.numOfVertical * Calculate_Fill_Grid.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) + Dim listOfHorizBeams As New List(Of DataRow) + Dim listOfVertBeams As New List(Of DataRow) + Dim counter As Integer = 1 + For i = 0 To partDT.Rows.Count - 1 + Dim partName As String + partName = partDT.Rows(i)("partName") + If partName.Split("_")(0) = "SUPPORT" Then + If counter < Calculate_Fill_Grid.numOfVertical Then + listOfHorizBeams.Add(partDT.Rows(i)) + counter += 1 + Else + listOfVertBeams.Add(partDT.Rows(i)) + End If End If - Assembly.EditAssembly - boolstatus = modelDoc.EditRebuild3() Next - Dim a = 1 + For i = 0 To listOfHorizBeams.Count - 1 + Dim nameOfHorizBeam As String = listOfHorizBeams(i)("partName") + Dim indexBeamHoriz As Integer + For j = 0 To components.Length - 1 + If components(j).Name2 = nameOfHorizBeam & "-1" Then + indexBeamHoriz = j + Exit For + End If + Next + + Dim horizBeamBodies = components(indexBeamHoriz).GetBodies2(0) + Dim horizBeamComponent As SldWorks.Component2 = components(indexBeamHoriz) + + Dim horizBeamFace = horizBeamBodies(0).GetFirstFace + + For j = 0 To listOfVertBeams.Count - 1 + Dim nameOfVertBeam As String = listOfVertBeams(j)("partName") + Dim indexBeamVert As Integer + For k = 0 To components.Length - 1 + If components(k).Name2 = nameOfVertBeam & "-1" Then + indexBeamVert = k + Exit For + End If + Next + Dim vertBeamBodies = components(indexBeamVert).GetBodies2(0) + Dim vertBeamComponent As SldWorks.Component2 = components(indexBeamVert) + + Dim bodiesToCut = Check_Interference(vertBeamComponent, horizBeamComponent, nameOfVertBeam & "-1") + If bodiesToCut Is Nothing Then + Assembly.EditAssembly + Continue For + End If + Assembly.ClearSelection2(True) + boolstatus = AssemblyExtension.SelectByID2(nameOfVertBeam & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + Assembly.EditPart + For k = 0 To bodiesToCut.Length - 1 + Assembly.ClearSelection2(True) + + sldata.Mark = 1 + Dim bodyName As String = bodiesToCut(k).Name & "@" & nameOfVertBeam & "-1@" & designName + boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0) + + sldata.Mark = 4 + horizBeamFace.Select4(True, sldata) + + Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) + Assembly.ClearSelection2(True) + Next + Assembly.EditAssembly + Next + Next + + Assembly.EditAssembly + boolstatus = modelDoc.EditRebuild3() + End Sub Private Shared Sub Delete_Obsolete() @@ -834,7 +866,9 @@ Public Class Multiple_3D_Simplified vCompArray = CompArray swAssy.ToolsCheckInterference2(2, (vCompArray), interfering, vIntCompArray, vIntFaceArray) - + If vIntFaceArray Is Nothing Then + Return Nothing + End If Dim Bodies(UBound(vIntFaceArray)) As Object Dim BodyNames(UBound(vIntFaceArray)) As String Dim CompNames(UBound(vIntFaceArray)) As String