Only indent interfering bodies fill function

This commit is contained in:
Mans 2021-04-09 15:44:13 +02:00
parent 4ace2261ca
commit 0d0bcab73c
7 changed files with 182 additions and 136 deletions

BIN
HLCt/Parts/~$START.SLDPRT Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -114,6 +114,7 @@ Public Class Model_3D
ExternalClass.modify_parameter_value("DP_WIDTH", inst_, squareW) 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_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT"))
ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) 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 If recessDR("CORNER") = 1 Then
ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, gratingParameters("WIDTH") - squareW) ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, gratingParameters("WIDTH") - squareW)
@ -326,7 +327,7 @@ Public Class Model_3D
Dim indexBody As Integer Dim indexBody As Integer
For k = 0 To recessBodies.Length - 1 For k = 0 To recessBodies.Length - 1
If recessBodies(k).Name = "Boss-Extrude1" Then If recessBodies(k).Name = "Cut-Body" Then
indexBody = k indexBody = k
Exit For Exit For
End If End If

View File

@ -55,9 +55,8 @@ Public Class Model_3D_Fill
designName = designTable.rows(0)("designName") designName = designTable.rows(0)("designName")
groupClass.InstantiateGroup(designName, grNr, "START") groupClass.InstantiateGroup(designName, grNr, "START")
Check_Interference()
Recess_Indent()
Delete_Obsolete() Delete_Obsolete()
Recess_Indent()
Save_Assembly() Save_Assembly()
End Sub End Sub
@ -86,6 +85,8 @@ Public Class Model_3D_Fill
ExternalClass.modify_parameter_value("DP_WIDTH", inst_, squareW) 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_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT"))
ExternalClass.modify_parameter_value("DP_EDGEBAR_THICKNESS", inst_, gratingParameters("LOADBAR_THICKNESS")) 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 If recessDR("CORNER") = 1 Then
ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - squareW) ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, Data.gratingW - squareW)
@ -224,44 +225,45 @@ Public Class Model_3D_Fill
Dim components = Assembly.GetComponents(True) Dim components = Assembly.GetComponents(True)
'Combine ''Combine
For i = 0 To gratingParts.Count - 1 'For i = 0 To gratingParts.Count - 1
Assembly.ClearSelection2(True) ' Assembly.ClearSelection2(True)
Dim indexGrating As Integer ' Dim indexGrating As Integer
Dim gratingPartName As String = gratingParts(i)("partName") ' Dim gratingPartName As String = gratingParts(i)("partName")
For k = 0 To components.Length - 1 ' For k = 0 To components.Length - 1
If components(k).Name2 = gratingPartName & "-1" Then ' If components(k).Name2 = gratingPartName & "-1" Then
indexGrating = k ' indexGrating = k
Exit For ' Exit For
End If ' End If
Next ' Next
boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) ' boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Assembly.EditPart ' Assembly.EditPart
Dim gratingBodies = components(indexGrating).GetBodies2(0) ' Dim gratingBodies = components(indexGrating).GetBodies2(0)
Assembly.ClearSelection2(True) ' Assembly.ClearSelection2(True)
For k = 0 To gratingBodies.Length - 1 ' For k = 0 To gratingBodies.Length - 1
If gratingBodies(k).Name <> "HorizontalSplitBody" AndAlso gratingBodies(k).Name <> "VerticalSplitBody" Then ' If gratingBodies(k).Name <> "HorizontalSplitBody" AndAlso gratingBodies(k).Name <> "VerticalSplitBody" Then
Dim bodyName As String = gratingBodies(k).Name & "@" & gratingPartName & "-1@" & designName ' Dim bodyName As String = gratingBodies(k).Name & "@" & gratingPartName & "-1@" & designName
boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0) ' boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0)
End If ' End If
Next ' Next
Dim combinedFeature As SldWorks.Feature ' Dim combinedFeature As SldWorks.Feature
Dim assemblyFeaMgr As SldWorks.IFeatureManager ' Dim assemblyFeaMgr As SldWorks.IFeatureManager
assemblyFeaMgr = Assembly.FeatureManager ' assemblyFeaMgr = Assembly.FeatureManager
combinedFeature = assemblyFeaMgr.InsertCombineFeature(15903, Nothing, Nothing) ' combinedFeature = assemblyFeaMgr.InsertCombineFeature(15903, Nothing, Nothing)
Assembly.EditAssembly ' Assembly.EditAssembly
Next 'Next
'Indent 'Indent
Dim recessParentName As String = partDT.Rows(Grating_Fill.numOfHorizontal * (Grating_Fill.numOfVertical - 1))("partName") Dim recessParentName As String = partDT.Rows(Grating_Fill.numOfHorizontal * (Grating_Fill.numOfVertical - 1))("partName")
Dim recessParts = partDT.Select("parentName = '" & recessParentName & "'") Dim recessParts = partDT.Select("parentName = '" & recessParentName & "'")
For i = 0 To recessParts.Count - 1 For i = 0 To recessParts.Count - 1
Dim recessPartName As String = recessParts(i)("partName") Dim recessPartName As String = recessParts(i)("partName")
If recessPartName.Split("_")(0) = "RECESS" Then
Dim indexRecess As Integer Dim indexRecess As Integer
For k = 0 To components.Length - 1 For k = 0 To components.Length - 1
@ -272,10 +274,11 @@ Public Class Model_3D_Fill
Next Next
Dim recessBodies = components(indexRecess).GetBodies2(0) Dim recessBodies = components(indexRecess).GetBodies2(0)
Dim recessComponent As SldWorks.Component2 = components(indexRecess)
Dim indexBody As Integer Dim indexBody As Integer
For l = 0 To recessBodies.Length - 1 For l = 0 To recessBodies.Length - 1
If recessBodies(l).Name = "Boss-Extrude1" Then If recessBodies(l).Name = "Cut-Body" Then
indexBody = l indexBody = l
Exit For Exit For
End If End If
@ -288,10 +291,18 @@ Public Class Model_3D_Fill
Dim gratingPartName As String = partDT.Rows(j)("partName") Dim gratingPartName As String = partDT.Rows(j)("partName")
boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) 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 gratingPart = SelMgr.GetSelectedObject6(1, -1)
Assembly.EditPart Assembly.EditPart
Dim modelDoc As IModelDoc2
modelDoc = Assembly
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 Dim indexGrating As Integer
For k = 0 To components.Length - 1 For k = 0 To components.Length - 1
If components(k).Name2 = gratingPartName & "-1" Then If components(k).Name2 = gratingPartName & "-1" Then
@ -300,28 +311,48 @@ Public Class Model_3D_Fill
End If End If
Next Next
Dim gratingBodies = components(indexGrating).GetBodies2(0) 'Dim gratingBodies = components(indexGrating).GetBodies2(0)
Dim gratingBodyIndex As Integer Dim gratingComponent As SldWorks.Component2 = components(indexGrating)
For k = 0 To gratingBodies.Length - 1
If gratingBodies(k).Name <> "VerticalSplitBody" AndAlso gratingBodies(k).Name <> "HorizontalSplitBody" Then
gratingBodyIndex = k
Exit For
End If
Next 'Dim gratingBodyIndex As Integer
'For k = 0 To gratingBodies.Length - 1
' If gratingBodies(k).Name <> "VerticalSplitBody" AndAlso gratingBodies(k).Name <> "HorizontalSplitBody" Then
' gratingBodyIndex = k
' Exit For
' End If
'Next
Dim bodiesToCut = Check_Interference(gratingComponent, recessComponent)
For k = 0 To bodiesToCut.Length - 1
Assembly.ClearSelection2(True) Assembly.ClearSelection2(True)
sldata.Mark = 1 sldata.Mark = 1
Dim bodyName As String = gratingBodies(gratingBodyIndex).Name & "@" & gratingPartName & "-1@" & designName Dim bodyName As String = bodiesToCut(k).Name & "@" & gratingPartName & "-1@" & designName
boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0) boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0)
sldata.Mark = 4 sldata.Mark = 4
recessFace.Select4(True, sldata) recessFace.Select4(True, sldata)
Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False)
Assembly.ClearSelection2(True) Assembly.ClearSelection2(True)
Next
bodiesToCut = Check_Interference(gratingComponent, recessComponent)
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 Assembly.EditAssembly
End If
Next Next
Assembly.ClearSelection2(True) Assembly.ClearSelection2(True)
@ -362,7 +393,7 @@ Public Class Model_3D_Fill
recessBodies = components(indexRecess).GetBodies2(0) recessBodies = components(indexRecess).GetBodies2(0)
For l = 0 To recessBodies.Length - 1 For l = 0 To recessBodies.Length - 1
If recessBodies(l).Name <> "Boss-Extrude1" Then If recessBodies(l).Name <> "Cut-Body" Then
Dim recessBody = recessBodies(l) Dim recessBody = recessBodies(l)
@ -384,6 +415,7 @@ Public Class Model_3D_Fill
Assembly.ClearSelection2(True) Assembly.ClearSelection2(True)
Next Next
Assembly.EditAssembly Assembly.EditAssembly
End If
Next Next
End Sub End Sub
@ -617,12 +649,12 @@ Public Class Model_3D_Fill
End If End If
End Function End Function
Private Shared Sub Check_Interference() ' Test Albins mocro för interference Private Shared Function Check_Interference(comp1 As SldWorks.Component2, comp2 As SldWorks.Component2) ' Test Albins mocro för interference
Dim swApp As SldWorks.SldWorks Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2 Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc Dim swAssy As SldWorks.AssemblyDoc
Dim CompArray(3) As SldWorks.Component2 Dim CompArray(1) As SldWorks.Component2
Dim vCompArray Dim vCompArray
Dim vIntCompArray Dim vIntCompArray
Dim vIntFaceArray Dim vIntFaceArray
@ -632,18 +664,12 @@ Public Class Model_3D_Fill
swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks)
swModel = swApp.ActiveDoc swModel = swApp.ActiveDoc
swAssy = swModel swAssy = swModel
Dim components = swAssy.GetComponents(True)
'CompArray = swAssy.GetComponents(True) CompArray(0) = comp1
'For i = 1 To components.length - 1 CompArray(1) = comp2
CompArray(0) = components(0)
CompArray(1) = components(1)
CompArray(2) = components(2)
CompArray(3) = components(3)
'Next
vCompArray = CompArray vCompArray = CompArray
swAssy.ToolsCheckInterference2(4, (vCompArray), interfering, vIntCompArray, vIntFaceArray) swAssy.ToolsCheckInterference2(2, (vCompArray), interfering, vIntCompArray, vIntFaceArray)
Dim Bodies(UBound(vIntFaceArray)) As Object Dim Bodies(UBound(vIntFaceArray)) As Object
Dim BodyNames(UBound(vIntFaceArray)) As String Dim BodyNames(UBound(vIntFaceArray)) As String
@ -656,5 +682,24 @@ Public Class Model_3D_Fill
CompNames(i) = vIntCompArray(i).Name2 CompNames(i) = vIntCompArray(i).Name2
Next Next
End Sub
Dim gratingName As String = CompNames(0)
Dim bodiesToCutList As New List(Of Object)
If CompNames(0) = gratingName Then
bodiesToCutList.Add(Bodies(0))
End If
For i = 1 To CompNames.Length - 1
If CompNames(i) <> gratingName 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 End Class