From fd4b9038626e5a21bde71194e513eec4dd936278 Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 26 Apr 2021 15:35:36 +0200 Subject: [PATCH] Fixes for Individual (including simplified model, instructions, etc.) --- HLCt/Parts/START.SLDPRT | Bin 47273 -> 48548 bytes Wardrobe/GUI/Individual.vb | 46 +- Wardrobe/SolidWorks/Frame_Drawing.vb | 2 +- Wardrobe/SolidWorks/Individual_3D.vb | 87 ++-- .../SolidWorks/Individual_3D_Simplified.vb | 460 ++++++++++++++++++ Wardrobe/SolidWorks/Individual_Drawing.vb | 16 +- Wardrobe/SolidWorks/Instructions.vb | 225 +++++---- Wardrobe/SolidWorks/Multiple_Drawing.vb | 24 +- Wardrobe/Wardrobe.vbproj | 1 + 9 files changed, 702 insertions(+), 159 deletions(-) create mode 100644 Wardrobe/SolidWorks/Individual_3D_Simplified.vb diff --git a/HLCt/Parts/START.SLDPRT b/HLCt/Parts/START.SLDPRT index dc2aec7973c29f9a65a5321787fe64edbb3cbeea..2f43324ece83a5bcfba929dde3c4c73b2aeeb4fd 100644 GIT binary patch delta 24498 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 a90yO@+HN;Ubag0Mwb^~4Rx5qToBkiRjKn4Y diff --git a/Wardrobe/GUI/Individual.vb b/Wardrobe/GUI/Individual.vb index 19f421e..0980d98 100644 --- a/Wardrobe/GUI/Individual.vb +++ b/Wardrobe/GUI/Individual.vb @@ -56,6 +56,9 @@ Public Class Individual Me.ComboBox_Width.Visible = True Me.TextBox_Width.Visible = False + + 'CheckBox_3DModel.Checked = True + 'CheckBox_3DModel.Enabled = False End Sub Private Sub Init_Multiple() @@ -321,6 +324,8 @@ Public Class Individual If User_Input.addInstructions = True Then If User_Input.addFrame = True AndAlso simplifiedWithFrameCreated = False Then Multiple_3D_Simplified.Build_Grid(True) + ElseIf simplifiedWithFrameCreated = False Then + Multiple_3D_Simplified.Build_Grid(False) End If If User_Input.addFrame = True Then Instructions.Generate_Instructions(True) @@ -330,8 +335,45 @@ Public Class Individual End If Else - Individual_3D.BuildGrating() - Individual_Drawing.Create_Model_For_Drawing() + Dim frameCreated As Boolean = False + If User_Input.add3DGrating = True Then + Individual_3D.BuildGrating() + frameCreated = True + End If + + If User_Input.addGratingDrawing = True Then + Individual_Drawing.Generate_Drawing() + End If + + Dim simplifiedWithFrameCreated As Boolean = False + If User_Input.addFrameDrawing = True Then + If frameCreated = False Then + Individual_3D_Simplified.Build_Simplified(True) + simplifiedWithFrameCreated = True + End If + For Each DR As DataRow In Frame_3D.frameDT.Rows + If DR("TYPE") = "SIDE" Then + Frame_3D.Generate_End_Frame_Pieces() + Frame_Drawing.Create_Assemblies(simplifiedWithFrameCreated) + Frame_Drawing.Generate_Drawings() + Exit For + End If + Next + End If + + If User_Input.addInstructions = True Then + If User_Input.addFrame = True AndAlso simplifiedWithFrameCreated = False Then + Individual_3D_Simplified.Build_Simplified(True) + ElseIf simplifiedWithFrameCreated = False Then + Individual_3D_Simplified.Build_Simplified(False) + End If + If User_Input.addFrame = True Then + Instructions.Generate_Instructions(True) + Else + Instructions.Generate_Instructions(False) + End If + End If + End If End Sub diff --git a/Wardrobe/SolidWorks/Frame_Drawing.vb b/Wardrobe/SolidWorks/Frame_Drawing.vb index ebb296c..8544f3d 100644 --- a/Wardrobe/SolidWorks/Frame_Drawing.vb +++ b/Wardrobe/SolidWorks/Frame_Drawing.vb @@ -17,7 +17,7 @@ Public Class Frame_Drawing If User_Input.add3DGrating = True Then frameComponents = Individual_3D.partDT.Select("partType = 'frame_l_straight'") Else - 'Finns inte -> FIXA, kan funka: frameComponents = Multiple_3D_Simplified.partDT.Select("partType = 'frame_l_straight'") + frameComponents = Individual_3D_Simplified.partDT.Select("partType = 'frame_l_straight'") End If End If diff --git a/Wardrobe/SolidWorks/Individual_3D.vb b/Wardrobe/SolidWorks/Individual_3D.vb index 6736524..3c07c14 100644 --- a/Wardrobe/SolidWorks/Individual_3D.vb +++ b/Wardrobe/SolidWorks/Individual_3D.vb @@ -39,7 +39,9 @@ Public Class Individual_3D Inst_Recesses(parentID, gratingParameters, recessDR) Next - Frame_3D.Build_Frame(gratingParameters, parentID) + If User_Input.addFrame = True Then + Frame_3D.Build_Frame(gratingParameters, parentID) + End If importClass.copyGroupsByDataSet(ExternalClass.groupds_new) Dim grNr = groupClass.NewGroupID @@ -50,16 +52,6 @@ Public Class Individual_3D Recess_Indent() Save_Assembly() - For Each DR As DataRow In Frame_3D.frameDT.Rows - If DR("TYPE") = "SIDE" Then - Frame_3D.Generate_End_Frame_Pieces() - Frame_Drawing.Create_Assemblies(False) 'Fixa False - Frame_Drawing.Generate_Drawings() - Exit For - End If - Next - - End Sub Private Shared Sub Save_Assembly() @@ -68,45 +60,56 @@ Public Class Individual_3D Dim status As Integer - Dim sourcePath, destPath As String - Dim childrenSourcePaths As New List(Of String) - Dim childrenDestPaths As New List(Of String) + Dim Assembly = swApp.ActiveDoc() + Dim newName As String + newName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw") & "\grating_assembly.SLDASM" - sourcePath = Settings.filesFolder & "\Files\CADStart\" & designName & ".SLDASM" - destPath = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw") & "\GRATING_ASSEMBLY.SLDASM" + Dim swExtensions As IModelDocExtension + swExtensions = Assembly.Extension + Dim Errors As Integer + Dim Warnings As Integer - childrenSourcePaths.Add(Settings.HLCtFolder & "\HLCt\Parts\START.SLDPRT") - childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\MASTER.SLDPRT") + status = swExtensions.SaveAs2(newName, 0, 4, Nothing, "", True, Errors, Warnings) - Dim instanceCounter As New Dictionary(Of String, Integer) - For i = 0 To partDT.Rows.Count - 1 - childrenSourcePaths.Add(Settings.filesFolder & "\Files\CADStart\" & partDT.Rows(i)("partName") & ".SLDPRT") + 'Dim sourcePath, destPath As String + 'Dim childrenSourcePaths As New List(Of String) + 'Dim childrenDestPaths As New List(Of String) - Dim partName As String = partDT.Rows(i)("partName") - Dim partNameArray As String() = partName.Split("_") + 'sourcePath = Settings.filesFolder & "\Files\CADStart\" & designName & ".SLDASM" + 'destPath = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw") & "\GRATING_ASSEMBLY.SLDASM" - Dim newName As String = "" - For j = 0 To partNameArray.Length - 4 - newName += partNameArray(j) & "_" - Next + 'childrenSourcePaths.Add(Settings.HLCtFolder & "\HLCt\Parts\START.SLDPRT") + 'childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\MASTER.SLDPRT") - Try - instanceCounter(newName.Substring(0, newName.Length - 1)) += 1 - Catch ex As Exception - instanceCounter.Add(newName.Substring(0, newName.Length - 1), 1) - End Try + 'Dim instanceCounter As New Dictionary(Of String, Integer) + 'For i = 0 To partDT.Rows.Count - 1 + ' childrenSourcePaths.Add(Settings.filesFolder & "\Files\CADStart\" & partDT.Rows(i)("partName") & ".SLDPRT") - If partNameArray(0) = "FRAME" Then - childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_frames_sw") & "\" & newName & - instanceCounter(newName.Substring(0, newName.Length - 1)) & ".SLDPRT") - Else - childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw") & "\" & newName & - instanceCounter(newName.Substring(0, newName.Length - 1)) & ".SLDPRT") - End If - Next + ' Dim partName As String = partDT.Rows(i)("partName") + ' Dim partNameArray As String() = partName.Split("_") - swApp.CloseAllDocuments(True) - status = swApp.CopyDocument(sourcePath, destPath, childrenSourcePaths.ToArray(), childrenDestPaths.ToArray(), 2) + ' Dim newName As String = "" + ' For j = 0 To partNameArray.Length - 4 + ' newName += partNameArray(j) & "_" + ' Next + + ' Try + ' instanceCounter(newName.Substring(0, newName.Length - 1)) += 1 + ' Catch ex As Exception + ' instanceCounter.Add(newName.Substring(0, newName.Length - 1), 1) + ' End Try + + ' If partNameArray(0) = "FRAME" Then + ' childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_frames_sw") & "\" & newName & + ' instanceCounter(newName.Substring(0, newName.Length - 1)) & ".SLDPRT") + ' Else + ' childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw") & "\" & newName & + ' instanceCounter(newName.Substring(0, newName.Length - 1)) & ".SLDPRT") + ' End If + 'Next + + 'swApp.CloseAllDocuments(True) + 'status = swApp.CopyDocument(sourcePath, destPath, childrenSourcePaths.ToArray(), childrenDestPaths.ToArray(), 2) End Sub Private Shared Sub Inst_Recesses(parentID As Integer, gratingParameters As DataRow, recessDR As DataRow) diff --git a/Wardrobe/SolidWorks/Individual_3D_Simplified.vb b/Wardrobe/SolidWorks/Individual_3D_Simplified.vb new file mode 100644 index 0000000..c83a9ba --- /dev/null +++ b/Wardrobe/SolidWorks/Individual_3D_Simplified.vb @@ -0,0 +1,460 @@ +Imports XCCLibrary +Imports SldWorks +Public Class Individual_3D_Simplified + Private Shared gratingParameters As DataRow + Private Shared designName As String + Public Shared partDT As New DataTable + Public Shared Sub Build_Simplified(withFrame As Boolean) + 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) + + inst_ = ExternalClass.instantiate_parts(parentID, "simplified_floor_grating", "") + ExternalClass.modify_parameter_value("DP_GRATING_WIDTH", inst_, gratingParameters("WIDTH")) + ExternalClass.modify_parameter_value("DP_GRATING_LENGTH", inst_, gratingParameters("LENGTH")) + ExternalClass.modify_parameter_value("DP_LOADBAR_HEIGHT", inst_, gratingParameters("LOADBAR_HEIGHT")) + ExternalClass.modify_parameter_value("DP_OFFSET_X", inst_, 0) + ExternalClass.modify_parameter_value("DP_OFFSET_Y", inst_, 0) + + parentID = inst_ + For Each recessDR As DataRow In Data.recessData.Rows + Inst_Recesses(parentID, gratingParameters, recessDR) + Next + + If withFrame = True Then + Frame_3D.Build_Frame(gratingParameters, parentID) + End If + + importClass.copyGroupsByDataSet(ExternalClass.groupds_new) + Dim grNr = groupClass.NewGroupID + Dim designTable = designModel.selectDesign("*") + designName = designTable.rows(0)("designName") + groupClass.InstantiateGroup(designName, grNr, "START") + + Recess_Indent() + Save_Assembly(withFrame) + End Sub + + Private Shared Sub Save_Assembly(withFrame As Boolean) + Dim swApp As SldWorks.SldWorks + swApp = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("SldWorks.Application"), SldWorks.SldWorks) + + Dim status As Integer + + Dim Assembly = swApp.ActiveDoc() + + Dim config As Configuration + config = Assembly.GetActiveConfiguration + Dim swCustPropMgr = config.CustomPropertyManager + If withFrame = True Then + status = swCustPropMgr.Add3("Benämning", 30, "Placement instructions for assembly", 1) + status = swCustPropMgr.Add3("ExtraBenämning1", 30, "", 1) + status = swCustPropMgr.Add3("ExtraBenämning2", 30, "", 1) + status = swCustPropMgr.Add3("Materialsort", 30, "", 1) + Else + status = swCustPropMgr.Add3("Benämning", 30, "Floor grating " & User_Input.gratingMesh & " " & User_Input.gratingHeight & "/" & User_Input.loadBarThickness, 1) + status = swCustPropMgr.Add3("ExtraBenämning1", 30, "LxW " & Data.gratingL & "x" & Data.gratingW, 1) + If User_Input.gratingSerrated Then + status = swCustPropMgr.Add3("ExtraBenämning2", 30, "Serrated", 1) + Else + status = swCustPropMgr.Add3("ExtraBenämning2", 30, "", 1) + End If + If User_Input.gratingLacquered Then + status = swCustPropMgr.Add3("Materialsort", 30, User_Input.gratingMaterial & " (Lacquered)", 1) + Else + status = swCustPropMgr.Add3("Materialsort", 30, User_Input.gratingMaterial, 1) + End If + End If + + status = swCustPropMgr.Add3("Art. Nr", 30, "TBD", 1) + status = swCustPropMgr.Add3("Material_Art", 30, "TBD", 1) + + status = swCustPropMgr.Add3("Author", 30, "", 1) + status = swCustPropMgr.Add3("Ändrad av", 30, "", 1) + status = swCustPropMgr.Add3("SkapadDatum", 30, "", 1) + status = swCustPropMgr.Add3("RevideradDatum", 30, "", 1) + + status = swCustPropMgr.Add3("epdmid", 30, "", 1) + status = swCustPropMgr.Add3("Revision", 30, "", 1) + + + Dim newName As String + If withFrame = True Then + newName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\grating_assembly_simplified_with_frame.SLDASM" + Else + newName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\grating_assembly_simplified.SLDASM" + End If + Dim swExtensions As IModelDocExtension + swExtensions = Assembly.Extension + Dim Errors As Integer + Dim Warnings As Integer + + status = swExtensions.SaveAs2(newName, 0, 4, Nothing, "", True, Errors, Warnings) + + + + 'Dim sourcePath, destPath As String + 'Dim childrenSourcePaths As New List(Of String) + 'Dim childrenDestPaths As New List(Of String) + + 'sourcePath = Settings.filesFolder & "\Files\CADStart\" & designName & ".SLDASM" + 'destPath = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw") & "\GRATING_ASSEMBLY.SLDASM" + + 'childrenSourcePaths.Add(Settings.HLCtFolder & "\HLCt\Parts\START.SLDPRT") + 'childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\MASTER.SLDPRT") + + 'Dim instanceCounter As New Dictionary(Of String, Integer) + 'For i = 0 To partDT.Rows.Count - 1 + ' childrenSourcePaths.Add(Settings.filesFolder & "\Files\CADStart\" & partDT.Rows(i)("partName") & ".SLDPRT") + + ' Dim partName As String = partDT.Rows(i)("partName") + ' Dim partNameArray As String() = partName.Split("_") + + ' Dim newName As String = "" + ' For j = 0 To partNameArray.Length - 4 + ' newName += partNameArray(j) & "_" + ' Next + + ' Try + ' instanceCounter(newName.Substring(0, newName.Length - 1)) += 1 + ' Catch ex As Exception + ' instanceCounter.Add(newName.Substring(0, newName.Length - 1), 1) + ' End Try + + ' If partNameArray(0) = "FRAME" Then + ' childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_frames_sw") & "\" & newName & + ' instanceCounter(newName.Substring(0, newName.Length - 1)) & ".SLDPRT") + ' Else + ' childrenDestPaths.Add(Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw") & "\" & newName & + ' instanceCounter(newName.Substring(0, newName.Length - 1)) & ".SLDPRT") + ' End If + 'Next + + 'swApp.CloseAllDocuments(True) + 'status = swApp.CopyDocument(sourcePath, destPath, childrenSourcePaths.ToArray(), childrenDestPaths.ToArray(), 2) + 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) + 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")) + + If recessDR("CORNER") = 1 Then + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, gratingParameters("WIDTH") - squareW) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, 0) + + 'Position + ExternalClass.modify_parameter_value("DP_V_EDGEBAR_POS", inst_, squareL - gratingParameters("LOADBAR_THICKNESS")) + 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_, gratingParameters("WIDTH") - squareW) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, gratingParameters("LENGTH") - squareL) + + '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_, gratingParameters("LENGTH") - squareL) + + '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 - gratingParameters("LOADBAR_THICKNESS")) + 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_, gratingParameters("WIDTH")) + 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_, gratingParameters("WIDTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, gratingParameters("LENGTH")) + 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_, gratingParameters("LENGTH")) + 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") - 2) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, gratingParameters("WIDTH") - 2) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, recessDR("OFFSET") - gratingParameters("LOADBAR_THICKNESS")) + 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_, gratingParameters("WIDTH") - recessDR("OFFSET") + gratingParameters("LOADBAR_THICKNESS")) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, gratingParameters("LENGTH")) + ExternalClass.modify_parameter_value("DP_ROTATION", inst_, 180) + + ElseIf recessDR("SIDE") = 3 Then + ExternalClass.modify_parameter_value("DP_LENGTH", inst_, recessDR("WIDTH") - 2) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("LENGTH")) + ExternalClass.modify_parameter_value("DP_OFFSET_W", inst_, 0 + 2) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, gratingParameters("LENGTH") - recessDR("OFFSET") + gratingParameters("LOADBAR_THICKNESS")) + 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") - gratingParameters("LOADBAR_THICKNESS")) + 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") + gratingParameters("LOADBAR_THICKNESS") * 2) + ExternalClass.modify_parameter_value("DP_WIDTH", inst_, recessDR("WIDTH") + gratingParameters("LOADBAR_THICKNESS") * 2) + 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") - gratingParameters("LOADBAR_THICKNESS")) + ExternalClass.modify_parameter_value("DP_OFFSET_L", inst_, recessDR("OFFSET X") - gratingParameters("LOADBAR_THICKNESS")) + 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 SelMgr = Assembly.SelectionManager() + AssemblyExtension = Assembly.Extension + Dim sldata = SelMgr.CreateSelectData + + Dim swErrors As Integer + Dim swWarnings As Integer + Dim components = Assembly.GetComponents(True) + + partDT = partModel.selectPart("*") + + Assembly.ClearSelection2(True) + + ' Grating part + Dim gratingPartName As String = partDT.Rows(0)("partName") + boolstatus = AssemblyExtension.SelectByID2(gratingPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + Dim gratingPart = SelMgr.GetSelectedObject6(1, -1) + + 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 + For i = 0 To components.Length - 1 + If components(i).Name2 = gratingPartName & "-1" Then + indexGrating = i + Exit For + End If + Next + + Dim gratingComponent As SldWorks.Component2 = components(indexGrating) + Dim gratingBodies = components(indexGrating).GetBodies2(0) + + Dim recessParts = partDT.Select("parentName = '" & gratingPartName & "'") + 'Dim recessParts As DataTable = New DataTable + 'For Each DR As DataRow In partDT.Rows + ' Dim partName As String = DR("partName") + ' If partName.Split("_")(0) = "RECESS" Then + ' recessParts.Rows.Add(DR) + ' End If + 'Next + + + + Dim recessPartName As String + For i = 0 To recessParts.Count - 1 + Dim partName As String = recessParts(i)("partName") + If partName.Split("_")(0) = "RECESS" Then + Assembly.ClearSelection2(True) + + ' Recess part + recessPartName = partName + boolstatus = AssemblyExtension.SelectByID2(recessPartName & "-1@" & designName, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0) + Dim recessPart = SelMgr.GetSelectedObject6(1, -1) + + Dim indexRecess As Integer + For j = 0 To components.Length - 1 + If components(j).Name2 = recessPartName & "-1" Then + indexRecess = j + Exit For + End If + Next + + Dim recessBodies = components(indexRecess).GetBodies2(0) + Dim recessComponent As SldWorks.Component2 = components(indexRecess) + Dim bodiesToCut = Check_Interference(gratingComponent, recessComponent) + + For j = 0 To bodiesToCut.Length - 1 + sldata.Mark = 1 + + Dim bodyName As String = bodiesToCut(j).Name & "@" & gratingPartName & "-1@" & designName + boolstatus = AssemblyExtension.SelectByID2(bodyName, "SOLIDBODY", 0, 0, 0, True, 1, Nothing, 0) + + sldata.Mark = 4 + + Dim indexBody As Integer + For k = 0 To recessBodies.Length - 1 + If recessBodies(k).Name = "Cut-Body" Then + indexBody = k + Exit For + End If + Next + + Dim recessFace = recessBodies(indexBody).GetFirstFace + recessFace.Select4(True, sldata) + + Assembly.FeatureManager.InsertIndent(0.01, 0, False, True, True, False) + Assembly.ClearSelection2(True) + Next + End If + Next + + + If gratingParameters("TYPE") = "pressure_welded_serrated" Then + For i = 1 To 5 + boolstatus = AssemblyExtension.SelectByID2("Serrated-Cut" & i & "@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) + modelDoc.EditUnsuppress2() + Next + + ElseIf gratingParameters("TYPE") = "type_a_serrated" Then + For i = 1 To 2 + boolstatus = AssemblyExtension.SelectByID2("Serrated-Cut" & i & "@" & gratingPartName & "-1@" & designName, "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0) + modelDoc.EditUnsuppress2() + Next + End If + + + Assembly.EditAssembly + + components = Assembly.GetComponents(True) + For i = 0 To UBound(components) + Dim partDoc = components(i).GetModelDoc2() + boolstatus = partDoc.Save3(1, swErrors, swWarnings) + Next + boolstatus = Assembly.Save3(1, swErrors, swWarnings) + End Sub + + 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 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 gratingName As String = CompNames(0) + Dim bodiesToCutList As New List(Of Object) + + bodiesToCutList.Add(Bodies(0)) + 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 diff --git a/Wardrobe/SolidWorks/Individual_Drawing.vb b/Wardrobe/SolidWorks/Individual_Drawing.vb index d80547c..99df6e0 100644 --- a/Wardrobe/SolidWorks/Individual_Drawing.vb +++ b/Wardrobe/SolidWorks/Individual_Drawing.vb @@ -2,7 +2,7 @@ Public Class Individual_Drawing Private Shared sideCounter As Integer() - Public Shared Sub Create_Model_For_Drawing() + Public Shared Sub Generate_Drawing() Dim pointTable As DataTable pointTable = Data.gratingPoints @@ -149,6 +149,7 @@ Public Class Individual_Drawing longstatus = iPart.SaveAs3(newName, 0, 0) Model.ClearSelection2(True) + Create_Drawing(iPart) End Sub @@ -330,16 +331,17 @@ Public Class Individual_Drawing Dim skSegment As Object swSkMgr.AddToDB = True - - For i = 0 To Draw_Grating.DirSymbolPoints.Count - 1 + Dim sheetScale = myView.ScaleDecimal + For i = 0 To Draw_Grating.DirSymbolPoints.Count - 2 Dim x1, x2, y1, y2 As Double - x1 = CDbl(CInt(Draw_Grating.DirSymbolPoints(i)(0) - Data.guiPanelMidX) / (30 * viewScale2)) - y1 = -CDbl(CInt(Draw_Grating.DirSymbolPoints(i)(1) - Data.guiPanelMidY) / (30 * viewScale2)) - x2 = CDbl(CInt(Draw_Grating.DirSymbolPoints(i + 1)(0) - Data.guiPanelMidX) / (30 * viewScale2)) - y2 = -CDbl(CInt(Draw_Grating.DirSymbolPoints(i + 1)(1) - Data.guiPanelMidY) / (30 * viewScale2)) + x1 = CDbl(CInt(Draw_Grating.DirSymbolPoints(i)(0) - Data.guiPanelMidX) / (3000 * sheetScale)) + y1 = -CDbl(CInt(Draw_Grating.DirSymbolPoints(i)(1) - Data.guiPanelMidY) / (3000 * sheetScale)) + x2 = CDbl(CInt(Draw_Grating.DirSymbolPoints(i + 1)(0) - Data.guiPanelMidX) / (3000 * sheetScale)) + y2 = -CDbl(CInt(Draw_Grating.DirSymbolPoints(i + 1)(1) - Data.guiPanelMidY) / (3000 * sheetScale)) skSegment = swSkMgr.CreateLine(x1, y1, 0, x2, y2, 0) Next + swSkMgr.AddToDB = False longstatus = iDrawing.SaveAs3(newName, 0, 0) longstatus = iDrawing.SaveAs3(Settings.folderPaths("object_" & Data.objectNum & "_drawings_gratings_pdf") & "\grating_drawing.pdf", 0, 2) diff --git a/Wardrobe/SolidWorks/Instructions.vb b/Wardrobe/SolidWorks/Instructions.vb index ad4cee7..8763712 100644 --- a/Wardrobe/SolidWorks/Instructions.vb +++ b/Wardrobe/SolidWorks/Instructions.vb @@ -26,12 +26,21 @@ Public Class Instructions status = layMgr.SetCurrentLayer("Svenska") Dim drawName As String - If withFrame = True Then - drawName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\gratings_assembly_simplified_with_frame.SLDASM" + If AppForm.fillMode = True Then + If withFrame = True Then + drawName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\gratings_assembly_simplified_with_frame.SLDASM" + Else + drawName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\gratings_assembly_simplified.SLDASM" + End If Else - drawName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\gratings_assembly_simplified.SLDASM" + If withFrame = True Then + drawName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\grating_assembly_simplified_with_frame.SLDASM" + Else + drawName = Settings.folderPaths("object_" & Data.objectNum & "_models3D_gratings_sw_support") & "\grating_assembly_simplified.SLDASM" + End If End If + Dim myView As View myView = iDrawing.CreateDrawViewFromModelView3(drawName, "*Front", swSheetWidth / 2, swSheetHeight / 2, 0) myView.UseSheetScale() = True @@ -68,9 +77,14 @@ Public Class Instructions vNotes = iDrawing.AutoBalloon5(autoBalloonParams) iDrawing.ClearSelection2(True) - Dim gratingCounter As Integer = Grating_Fill.numOfHorizontal * Grating_Fill.numOfVertical - Multiple_3D_Simplified.listOfObsolete.Count + Dim numOfGratings = 1 + If AppForm.fillMode = True Then + numOfGratings = Grating_Fill.numOfHorizontal * Grating_Fill.numOfVertical - Multiple_3D_Simplified.listOfObsolete.Count + End If + + Dim gratingCounter As Integer = numOfGratings For i = vNotes.Length - 1 To 0 Step -1 - If i < Grating_Fill.numOfHorizontal * Grating_Fill.numOfVertical - Multiple_3D_Simplified.listOfObsolete.Count Then + If i < numOfGratings Then Dim noteInfo = vNotes(i).GetLeaderInfo() noteAnnotation = vNotes(i).GetAnnotation() @@ -95,100 +109,133 @@ Public Class Instructions End If Next - Dim straightFrames = Frame_3D.frameDT.Select("TYPE = 'SIDE'") - Dim straightFramesDT As New DataTable - straightFramesDT.Columns.Add("LENGTH", GetType(Integer)) - straightFramesDT.Columns.Add("SIDE", GetType(Integer)) - For i = 1 To 4 - Dim sideNum = i + 1 - If sideNum = 5 Then - sideNum = 1 - End If - For j = straightFrames.Length - 1 To 0 Step -1 - Dim DR As DataRow = straightFrames(j) - If DR("SIDE") = sideNum Then - Dim newDR As DataRow = straightFramesDT.NewRow - newDR("LENGTH") = DR("LENGTH") - newDR("SIDE") = i - straightFramesDT.Rows.Add(newDR) + If withFrame = True Then + Dim straightFrames = Frame_3D.frameDT.Select("TYPE = 'SIDE'") + Dim straightFramesDT As New DataTable + straightFramesDT.Columns.Add("LENGTH", GetType(Integer)) + straightFramesDT.Columns.Add("SIDE", GetType(Integer)) + For i = 1 To 4 + Dim sideNum = i + 1 + If sideNum = 5 Then + sideNum = 1 + End If + For j = straightFrames.Length - 1 To 0 Step -1 + Dim DR As DataRow = straightFrames(j) + If DR("SIDE") = sideNum Then + Dim newDR As DataRow = straightFramesDT.NewRow + newDR("LENGTH") = DR("LENGTH") + newDR("SIDE") = i + straightFramesDT.Rows.Add(newDR) + End If + Next + Next + + Dim sideOffsets(3) As Double + Dim cornerFrames = Frame_3D.frameDT.Select("TYPE = 'CORNER'") + For i = 0 To 3 + Dim cornerFrameExist As Boolean = False + For j = 0 To cornerFrames.Length - 1 + If cornerFrames(j)("CORNER") = i + 1 Then + cornerFrameExist = True + Exit For + End If + Next + If cornerFrameExist = True Then + sideOffsets(i) = 0.21 + Else + sideOffsets(i) = 0 End If Next - Next - Dim sideOffsets(3) As Double - Dim cornerFrames = Frame_3D.frameDT.Select("TYPE = 'CORNER'") - For i = 0 To 3 - Dim cornerFrameExist As Boolean = False - For j = 0 To cornerFrames.Length - If cornerFrames(j)("CORNER") = i + 1 Then - cornerFrameExist = True - Exit For + Dim worldX, worldY, offsetX, offsetY As Double + Dim scale As Double = myView.ScaleDecimal + For i = 0 To straightFramesDT.Rows.Count - 1 + If straightFramesDT.Rows(i)("SIDE") = 1 Then + worldX = swSheetWidth / 2 + (-(Data.gratingL / 1000) / 2 + sideOffsets(0) + (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale + sideOffsets(0) += straightFramesDT.Rows(i)("LENGTH") / 1000 + worldY = swSheetHeight / 2 + ((Data.gratingW / 1000) / 2 + 0.001) * scale + offsetX = worldX - 0.01 - 0.0045 + offsetY = worldY + 0.02 + 0.0015 + ElseIf straightFramesDT.Rows(i)("SIDE") = 2 Then + worldX = swSheetWidth / 2 + ((Data.gratingL / 1000) / 2 + 0.001) * scale + worldY = swSheetHeight / 2 + ((Data.gratingW / 1000) / 2 - sideOffsets(1) - (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale + sideOffsets(1) += straightFramesDT.Rows(i)("LENGTH") / 1000 + offsetX = worldX + 0.02 - 0.0045 + offsetY = worldY + 0.01 + 0.0015 + ElseIf straightFramesDT.Rows(i)("SIDE") = 3 Then + worldX = swSheetWidth / 2 + ((Data.gratingL / 1000) / 2 - sideOffsets(2) - (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale + sideOffsets(2) += straightFramesDT.Rows(i)("LENGTH") / 1000 + worldY = swSheetHeight / 2 - ((Data.gratingW / 1000) / 2 + 0.001) * scale + offsetX = worldX + 0.01 - 0.0045 + offsetY = worldY - 0.02 + 0.0015 + Else + worldX = swSheetWidth / 2 - ((Data.gratingL / 1000) / 2 + 0.001) * scale + worldY = swSheetHeight / 2 + (-(Data.gratingW / 1000) / 2 + sideOffsets(3) + (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale + sideOffsets(3) += straightFramesDT.Rows(i)("LENGTH") / 1000 + offsetX = worldX - 0.02 - 0.0045 + offsetY = worldY - 0.01 + 0.0015 End If + + status = swExtensions.SelectByRay(worldX, worldY, 0, 0, 0, -1, 0.0005, 2, False, 0, 0) + + Dim BomBalloonParams As Object + BomBalloonParams = swExtensions.CreateBalloonOptions() + BomBalloonParams.Style = 1 + BomBalloonParams.Size = 3 + BomBalloonParams.UpperTextContent = 1 + BomBalloonParams.UpperText = """" + BomBalloonParams.ShowQuantity = False + BomBalloonParams.QuantityPlacement = 1 + BomBalloonParams.QuantityDenotationText = "X" + BomBalloonParams.QuantityOverride = False + Dim myNote = swExtensions.InsertBOMBalloon2(BomBalloonParams) + + noteAnnotation = myNote.GetAnnotation() + + textFormat = noteAnnotation.GetTextFormat(0) + textFormat.CharHeight = 0.0025 + status = noteAnnotation.SetTextFormat(0, False, textFormat) + + noteAnnotation.SetPosition2(offsetX, offsetY, 0) + + iDrawing.ClearSelection2(True) + balloonName = myNote.GetName() + status = swExtensions.SelectByID2(balloonName & "@" & myView.GetName2, "NOTE", 0, 0, 0, False, 0, Nothing, 0) + editedNote = swExtensions.EditBalloonProperties2(1, 3, 0, "F-" & i + 1, 0, "", 0, False, 1, "X", 0.001) Next - If cornerFrameExist = True Then - sideOffsets(i) = 0.21 - Else - sideOffsets(i) = 0 - End If + End If + + + status = layMgr.AddLayer("Symbol", "", 0, 0, 2) + status = layMgr.SetCurrentLayer("Symbol") + + Dim swSkMgr As SketchManager + swSkMgr = iDrawing.SketchManager + status = iDrawing.ActivateSheet("Sheet1") + Dim skSegment As Object + + swSkMgr.AddToDB = True + Dim sheetProp = swSheet.GetProperties() + Dim sheetScale = myView.ScaleDecimal + For i = 0 To Draw_Grating.DirSymbolPoints.Count - 2 + Dim x1, x2, y1, y2 As Double + x1 = CDbl((Draw_Grating.DirSymbolPoints(i)(0) - Data.guiPanelMidX) / (2000 * sheetScale)) + (swSheetWidth - 0.05) / sheetScale + y1 = -CDbl((Draw_Grating.DirSymbolPoints(i)(1) - Data.guiPanelMidY) / (2000 * sheetScale)) + (swSheetHeight / 2) / sheetScale + x2 = CDbl((Draw_Grating.DirSymbolPoints(i + 1)(0) - Data.guiPanelMidX) / (2000 * sheetScale)) + (swSheetWidth - 0.05) / sheetScale + y2 = -CDbl((Draw_Grating.DirSymbolPoints(i + 1)(1) - Data.guiPanelMidY) / (2000 * sheetScale)) + (swSheetHeight / 2) / sheetScale + + skSegment = swSkMgr.CreateLine(x1, y1, 0, x2, y2, 0) Next + swSkMgr.AddToDB = False - Dim worldX, worldY, offsetX, offsetY As Double - Dim scale As Double = myView.ScaleDecimal - For i = 0 To straightFramesDT.Rows.Count - 1 - If straightFramesDT.Rows(i)("SIDE") = 1 Then - worldX = swSheetWidth / 2 + (-(Data.gratingL / 1000) / 2 + sideOffsets(0) + (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale - sideOffsets(0) += straightFramesDT.Rows(i)("LENGTH") / 1000 - worldY = swSheetHeight / 2 + ((Data.gratingW / 1000) / 2 + 0.001) * scale - offsetX = worldX - 0.01 - 0.0045 - offsetY = worldY + 0.02 + 0.0015 - ElseIf straightFramesDT.Rows(i)("SIDE") = 2 Then - worldX = swSheetWidth / 2 + ((Data.gratingL / 1000) / 2 + 0.001) * scale - worldY = swSheetHeight / 2 + ((Data.gratingW / 1000) / 2 - sideOffsets(1) - (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale - sideOffsets(1) += straightFramesDT.Rows(i)("LENGTH") / 1000 - offsetX = worldX + 0.02 - 0.0045 - offsetY = worldY + 0.01 + 0.0015 - ElseIf straightFramesDT.Rows(i)("SIDE") = 3 Then - worldX = swSheetWidth / 2 + ((Data.gratingL / 1000) / 2 - sideOffsets(2) - (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale - sideOffsets(2) += straightFramesDT.Rows(i)("LENGTH") / 1000 - worldY = swSheetHeight / 2 - ((Data.gratingW / 1000) / 2 + 0.001) * scale - offsetX = worldX + 0.01 - 0.0045 - offsetY = worldY - 0.02 + 0.0015 - Else - worldX = swSheetWidth / 2 - ((Data.gratingL / 1000) / 2 + 0.001) * scale - worldY = swSheetHeight / 2 + (-(Data.gratingW / 1000) / 2 + sideOffsets(3) + (straightFramesDT.Rows(i)("LENGTH") / 1000) / 2) * scale - sideOffsets(3) += straightFramesDT.Rows(i)("LENGTH") / 1000 - offsetX = worldX - 0.02 - 0.0045 - offsetY = worldY - 0.01 + 0.0015 - End If + Dim note = iDrawing.CreateText2("Load Bearing Direction", (swSheetWidth - 0.072), (swSheetHeight / 2 + 0.012), 0, 0.003, 0) - status = swExtensions.SelectByRay(worldX, worldY, 0, 0, 0, -1, 0.0005, 2, False, 0, 0) - Dim BomBalloonParams As Object - BomBalloonParams = swExtensions.CreateBalloonOptions() - BomBalloonParams.Style = 1 - BomBalloonParams.Size = 3 - BomBalloonParams.UpperTextContent = 1 - BomBalloonParams.UpperText = """" - BomBalloonParams.ShowQuantity = False - BomBalloonParams.QuantityPlacement = 1 - BomBalloonParams.QuantityDenotationText = "X" - BomBalloonParams.QuantityOverride = False - Dim myNote = swExtensions.InsertBOMBalloon2(BomBalloonParams) - - noteAnnotation = myNote.GetAnnotation() - - textFormat = noteAnnotation.GetTextFormat(0) - textFormat.CharHeight = 0.0025 - status = noteAnnotation.SetTextFormat(0, False, textFormat) - - noteAnnotation.SetPosition2(offsetX, offsetY, 0) - - iDrawing.ClearSelection2(True) - balloonName = myNote.GetName() - status = swExtensions.SelectByID2(balloonName & "@" & myView.GetName2, "NOTE", 0, 0, 0, False, 0, Nothing, 0) - editedNote = swExtensions.EditBalloonProperties2(1, 3, 0, "F-" & i + 1, 0, "", 0, False, 1, "X", 0.001) - Next + Dim newName As String + newName = Settings.folderPaths("object_" & Data.objectNum & "_guide") & "\assembly_instructions.SLDDRW" + status = iDrawing.SaveAs3(newName, 0, 0) + status = iDrawing.SaveAs3(newName, 0, 2) End Sub End Class diff --git a/Wardrobe/SolidWorks/Multiple_Drawing.vb b/Wardrobe/SolidWorks/Multiple_Drawing.vb index 122188e..0ecdfa9 100644 --- a/Wardrobe/SolidWorks/Multiple_Drawing.vb +++ b/Wardrobe/SolidWorks/Multiple_Drawing.vb @@ -272,18 +272,6 @@ Public Class Multiple_Drawing End If Next - 'recessData.Columns.Add("RECESS TYPE", GetType(String)) - 'recessData.Columns.Add("NAME", GetType(String)) - 'recessData.Columns.Add("CORNER", GetType(Integer)) - 'recessData.Columns.Add("SIDE", GetType(Integer)) - 'recessData.Columns.Add("WIDTH", GetType(Integer)) - 'recessData.Columns.Add("LENGTH", GetType(Integer)) - 'recessData.Columns.Add("OFFSET", GetType(Integer)) - 'recessData.Columns.Add("OFFSET X", GetType(Integer)) - 'recessData.Columns.Add("OFFSET Y", GetType(Integer)) - 'recessData.Columns.Add("GRATINGS", GetType(List(Of Integer))) - - ' -- Loop Horizontal -- For i = 0 To Grating_Fill.numOfHorizontal - 1 status = False @@ -387,19 +375,19 @@ Public Class Multiple_Drawing swSkMgr.AddToDB = True Dim sheetProp = swSheet.GetProperties() - Dim sheetScale = sheetProp(3) + Dim sheetScale = myView.ScaleDecimal For i = 0 To Draw_Grating.DirSymbolPoints.Count - 2 Dim x1, x2, y1, y2 As Double - x1 = CDbl((Draw_Grating.DirSymbolPoints(i)(0) - Data.guiPanelMidX) / 200) + (swSheetWidth - 0.05) * sheetScale - y1 = -CDbl((Draw_Grating.DirSymbolPoints(i)(1) - Data.guiPanelMidY) / 200) + (swSheetHeight / 2) * sheetScale - x2 = CDbl((Draw_Grating.DirSymbolPoints(i + 1)(0) - Data.guiPanelMidX) / 200) + (swSheetWidth - 0.05) * sheetScale - y2 = -CDbl((Draw_Grating.DirSymbolPoints(i + 1)(1) - Data.guiPanelMidY) / 200) + (swSheetHeight / 2) * sheetScale + x1 = CDbl((Draw_Grating.DirSymbolPoints(i)(0) - Data.guiPanelMidX) / (2000 * sheetScale)) + (swSheetWidth - 0.05) / sheetScale + y1 = -CDbl((Draw_Grating.DirSymbolPoints(i)(1) - Data.guiPanelMidY) / (2000 * sheetScale)) + (swSheetHeight / 2) / sheetScale + x2 = CDbl((Draw_Grating.DirSymbolPoints(i + 1)(0) - Data.guiPanelMidX) / (2000 * sheetScale)) + (swSheetWidth - 0.05) / sheetScale + y2 = -CDbl((Draw_Grating.DirSymbolPoints(i + 1)(1) - Data.guiPanelMidY) / (2000 * sheetScale)) + (swSheetHeight / 2) / sheetScale skSegment = swSkMgr.CreateLine(x1, y1, 0, x2, y2, 0) Next swSkMgr.AddToDB = False - Dim note = iDrawing.CreateText2("Load Bearing Direction", (swSheetWidth - 0.075), (swSheetHeight / 2 + 0.012), 0, 0.003, 0) + Dim note = iDrawing.CreateText2("Load Bearing Direction", (swSheetWidth - 0.072), (swSheetHeight / 2 + 0.012), 0, 0.003, 0) status = swExtensions.SelectByID2(myView.GetName2, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0) diff --git a/Wardrobe/Wardrobe.vbproj b/Wardrobe/Wardrobe.vbproj index 7cd9864..9c172c3 100644 --- a/Wardrobe/Wardrobe.vbproj +++ b/Wardrobe/Wardrobe.vbproj @@ -119,6 +119,7 @@ +