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,166 +225,197 @@ 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
If components(k).Name2 = recessPartName & "-1" Then
indexRecess = k
Exit For
End If
Next
Dim recessBodies = components(indexRecess).GetBodies2(0)
Dim indexBody As Integer
For l = 0 To recessBodies.Length - 1
If recessBodies(l).Name = "Boss-Extrude1" 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)
Dim gratingPart = SelMgr.GetSelectedObject6(1, -1)
Assembly.EditPart
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 = recessPartName & "-1" Then
indexGrating = k indexRecess = k
Exit For Exit For
End If End If
Next Next
Dim gratingBodies = components(indexGrating).GetBodies2(0) Dim recessBodies = components(indexRecess).GetBodies2(0)
Dim gratingBodyIndex As Integer Dim recessComponent As SldWorks.Component2 = components(indexRecess)
For k = 0 To gratingBodies.Length - 1
If gratingBodies(k).Name <> "VerticalSplitBody" AndAlso gratingBodies(k).Name <> "HorizontalSplitBody" Then Dim indexBody As Integer
gratingBodyIndex = k For l = 0 To recessBodies.Length - 1
If recessBodies(l).Name = "Cut-Body" Then
indexBody = l
Exit For Exit For
End If End If
Next Next
Assembly.ClearSelection2(True)
sldata.Mark = 1 Dim recessFace = recessBodies(indexBody).GetFirstFace
Dim bodyName As String = gratingBodies(gratingBodyIndex).Name & "@" & gratingPartName & "-1@" & designName
boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0)
sldata.Mark = 4 For j = 0 To Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal - 1
recessFace.Select4(True, sldata) Assembly.ClearSelection2(True)
Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False)
Assembly.ClearSelection2(True)
Assembly.EditAssembly
Next
Assembly.ClearSelection2(True)
boolstatus = AssemblyExtension.SelectByID2(recessPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Dim recessPart2 = SelMgr.GetSelectedObject6(1, -1)
Assembly.EditPart
For j = 0 To Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal - 1
For k = 1 To 2
Dim gratingPartName As String = partDT.Rows(j)("partName") Dim gratingPartName As String = partDT.Rows(j)("partName")
Dim indexGrating As Integer boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
For l = 0 To components.Length - 1 If boolstatus = True Then
If components(l).Name2 = gratingPartName & "-1" Then Dim gratingPart = SelMgr.GetSelectedObject6(1, -1)
indexGrating = l
Exit For
End If
Next
Dim splitBodyName As String Assembly.EditPart
If k = 1 Then
splitBodyName = "VerticalSplitBody"
Else
splitBodyName = "HorizontalSplitBody"
End If
Dim gratingBodies = components(indexGrating).GetBodies2(0) Dim modelDoc As IModelDoc2
Dim cutBodyIndex As Integer modelDoc = Assembly
For l = 0 To gratingBodies.Length - 1 boolstatus = AssemblyExtension.SelectByID2("HorizontalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
If gratingBodies(l).Name = splitBodyName Then modelDoc.EditSuppress2()
cutBodyIndex = l boolstatus = AssemblyExtension.SelectByID2("VerticalSplitBody@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
Exit For modelDoc.EditSuppress2()
End If
Next
Dim cutBody = gratingBodies(cutBodyIndex)
recessBodies = components(indexRecess).GetBodies2(0) Dim indexGrating As Integer
For l = 0 To recessBodies.Length - 1 For k = 0 To components.Length - 1
If recessBodies(l).Name <> "Boss-Extrude1" Then If components(k).Name2 = gratingPartName & "-1" Then
indexGrating = k
Exit For
End If
Next
Dim recessBody = recessBodies(l) 'Dim gratingBodies = components(indexGrating).GetBodies2(0)
Dim gratingComponent As SldWorks.Component2 = components(indexGrating)
'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 = recessBodies(l).Name & "@" & recessPartName & "-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
Dim cutFace = cutBody.GetFirstFace recessFace.Select4(True, sldata)
cutFace.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)
Next
End If bodiesToCut = Check_Interference(gratingComponent, recessComponent)
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)
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
Next Next
Assembly.ClearSelection2(True) Assembly.ClearSelection2(True)
Next
Assembly.EditAssembly boolstatus = AssemblyExtension.SelectByID2(recessPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
Dim recessPart2 = SelMgr.GetSelectedObject6(1, -1)
Assembly.EditPart
For j = 0 To Grating_Fill.numOfVertical * Grating_Fill.numOfHorizontal - 1
For k = 1 To 2
Dim gratingPartName As String = partDT.Rows(j)("partName")
Dim indexGrating As Integer
For l = 0 To components.Length - 1
If components(l).Name2 = gratingPartName & "-1" Then
indexGrating = l
Exit For
End If
Next
Dim splitBodyName As String
If k = 1 Then
splitBodyName = "VerticalSplitBody"
Else
splitBodyName = "HorizontalSplitBody"
End If
Dim gratingBodies = components(indexGrating).GetBodies2(0)
Dim cutBodyIndex As Integer
For l = 0 To gratingBodies.Length - 1
If gratingBodies(l).Name = splitBodyName Then
cutBodyIndex = l
Exit For
End If
Next
Dim cutBody = gratingBodies(cutBodyIndex)
recessBodies = components(indexRecess).GetBodies2(0)
For l = 0 To recessBodies.Length - 1
If recessBodies(l).Name <> "Cut-Body" Then
Dim recessBody = recessBodies(l)
Assembly.ClearSelection2(True)
sldata.Mark = 1
Dim bodyName As String = recessBodies(l).Name & "@" & recessPartName & "-1@" & designName
boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0)
sldata.Mark = 4
Dim cutFace = cutBody.GetFirstFace
cutFace.Select4(True, sldata)
Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False)
End If
Next
Next
Assembly.ClearSelection2(True)
Next
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