From 12292808df60b98f3327d70439edd2b2e2b40328 Mon Sep 17 00:00:00 2001 From: OldFcuk <84081713+OldFcuk@users.noreply.github.com> Date: Fri, 2 Dec 2022 13:33:25 +0200 Subject: [PATCH 01/20] Did you mean that? --- edrawings-api/output/print-to-pdf/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edrawings-api/output/print-to-pdf/index.md b/edrawings-api/output/print-to-pdf/index.md index 6b314f22..ca5ecbdb 100644 --- a/edrawings-api/output/print-to-pdf/index.md +++ b/edrawings-api/output/print-to-pdf/index.md @@ -11,7 +11,7 @@ group: Import/Export This console application developed in VB.NET allows to export SOLIDWORKS, DXF, DWG files to PDF using free version of SOLIDWORKS eDrawings via its API. It is not required to have SOLIDWORKS installed or use its license to use this tool. This tool is supported on Windows 8.1 onwards. -This functionality has been integrated into the [xPort](https://cadplus.xarial.com/xport/) utility. +This functionality has been integrated into the [eXport+](https://cadplus.xarial.com/export/) utility. ## Running the tool From bca5c7cb56bc696a0526a9a5eed91a9f960d84e8 Mon Sep 17 00:00:00 2001 From: OldFcuk <84081713+OldFcuk@users.noreply.github.com> Date: Wed, 5 Apr 2023 09:23:29 +0300 Subject: [PATCH 02/20] Update index.md --- solidworks-api/import-export/dwg-export-cleanup/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidworks-api/import-export/dwg-export-cleanup/index.md b/solidworks-api/import-export/dwg-export-cleanup/index.md index 7ffa3888..5c16a08c 100644 --- a/solidworks-api/import-export/dwg-export-cleanup/index.md +++ b/solidworks-api/import-export/dwg-export-cleanup/index.md @@ -11,7 +11,7 @@ labels: [dxf,dwg,cleanup,flat pattern,export] The code below provides a workaround for this issue. -> Not this code doesn't allow to set the settings of the export (default options are used). It is required to use Windows API to modify the options and check boxes. +> Note this code doesn't allow to set the settings of the export (default options are used). It is required to use Windows API to modify the options and check boxes. ## Configuration From d10b4edc8d82e44c542921858ed12513785e4f19 Mon Sep 17 00:00:00 2001 From: OldFcuk <84081713+OldFcuk@users.noreply.github.com> Date: Tue, 18 Jul 2023 17:11:41 +0300 Subject: [PATCH 03/20] Update Macro.vba --- solidworks-api/document/assembly/compose-flat-bom/Macro.vba | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/solidworks-api/document/assembly/compose-flat-bom/Macro.vba b/solidworks-api/document/assembly/compose-flat-bom/Macro.vba index fe436552..1af7ed79 100644 --- a/solidworks-api/document/assembly/compose-flat-bom/Macro.vba +++ b/solidworks-api/document/assembly/compose-flat-bom/Macro.vba @@ -131,12 +131,12 @@ Function GetPropertyValue(model As SldWorks.ModelDoc2, conf As String, prpName A Dim prpVal As String Dim prpResVal As String - confSpecPrpMgr.Get3 prpName, False, "", prpVal + confSpecPrpMgr.Get3 prpName, False, prpVal, prpResVal - If prpVal = "" Then + If prpResVal = "" Then genPrpMgr.Get3 prpName, False, prpVal, prpResVal End If GetPropertyValue = prpResVal -End Function \ No newline at end of file +End Function From af291102bcea2d75aeb3eba1c1a76dbdc7df94ce Mon Sep 17 00:00:00 2001 From: OldFcuk <84081713+OldFcuk@users.noreply.github.com> Date: Thu, 27 Jul 2023 12:14:39 +0300 Subject: [PATCH 04/20] Update index.md --- .../document/assembly/components/purge-configurations/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidworks-api/document/assembly/components/purge-configurations/index.md b/solidworks-api/document/assembly/components/purge-configurations/index.md index f1cb4cde..0c31f3cf 100644 --- a/solidworks-api/document/assembly/components/purge-configurations/index.md +++ b/solidworks-api/document/assembly/components/purge-configurations/index.md @@ -7,7 +7,7 @@ image: purged-components-result1.png labels: [component, replace, purge] group: Assembly --- -In some cases it might be required to remove (purge) all unused configurations from the components in the assembly. It is in particular useful for the fastener or toolbox components as file can contains thousands of configurations but only few are used in the assembly. +In some cases it might be required to remove (purge) all unused configurations from the components in the assembly. It is in particular useful for the fastener or toolbox components as file can contain thousands of configurations but only few are used in the assembly. This macro allows to create a copy of all selected components, purge their configurations and replace them in the assembly. From aecb10a63fc47adb99817f44620da17c23a65da7 Mon Sep 17 00:00:00 2001 From: Artem Date: Tue, 12 Dec 2023 11:56:33 +1100 Subject: [PATCH 05/20] Added export and export individual bodies macro+ --- .../CustomVariableValueProvider.vba | 17 ++ .../export-individual-bodies/Macro.vba | 223 ++++++++++++++++++ .../export-individual-bodies/index.md | 19 ++ solidworks-api/import-export/export/Macro.vba | 134 +++++++++++ solidworks-api/import-export/export/index.md | 17 ++ 5 files changed, 410 insertions(+) create mode 100644 solidworks-api/import-export/export-individual-bodies/CustomVariableValueProvider.vba create mode 100644 solidworks-api/import-export/export-individual-bodies/Macro.vba create mode 100644 solidworks-api/import-export/export-individual-bodies/index.md create mode 100644 solidworks-api/import-export/export/Macro.vba create mode 100644 solidworks-api/import-export/export/index.md diff --git a/solidworks-api/import-export/export-individual-bodies/CustomVariableValueProvider.vba b/solidworks-api/import-export/export-individual-bodies/CustomVariableValueProvider.vba new file mode 100644 index 00000000..bc0d3912 --- /dev/null +++ b/solidworks-api/import-export/export-individual-bodies/CustomVariableValueProvider.vba @@ -0,0 +1,17 @@ +Option Explicit + +Implements IMacroCustomVariableValueProvider + +Function IMacroCustomVariableValueProvider_Provide(ByVal varName As String, ByVal args As Variant, ByVal context As Variant) As Variant + + Dim swBody As SldWorks.Body2 + Set swBody = context + + Select Case varName + Case "bodyName": + IMacroCustomVariableValueProvider_Provide = swBody.Name + Case Else + Err.Raise vbError, "", "Not supported variable: " & varName + End Select + +End Function \ No newline at end of file diff --git a/solidworks-api/import-export/export-individual-bodies/Macro.vba b/solidworks-api/import-export/export-individual-bodies/Macro.vba new file mode 100644 index 00000000..c0c60365 --- /dev/null +++ b/solidworks-api/import-export/export-individual-bodies/Macro.vba @@ -0,0 +1,223 @@ +'#Const TEST = True + +Dim swApp As SldWorks.SldWorks +Dim swCadPlus As ICadPlusSwAddIn + +Sub main() + + Set swApp = Application.SldWorks + + Dim swCadPlusFact As CadPlusSwAddInFactory + Set swCadPlusFact = New CadPlusSwAddInFactory + + Set swCadPlus = swCadPlusFact.Create(swApp, True) + + Dim macroOper As IMacroOperation + Set macroOper = GetMacroOperation() + + Dim vArgs As Variant + vArgs = macroOper.Arguments + + Dim swModel As SldWorks.ModelDoc2 + Set swModel = macroOper.model + + Dim swPart As SldWorks.PartDoc + + Set swPart = swModel + + Dim vBodies As Variant + vBodies = swPart.GetBodies2(swBodyType_e.swAllBodies, True) + + Dim i As Integer + Dim swBody As SldWorks.Body2 + + Dim customVarValProv As IMacroCustomVariableValueProvider + Set customVarValProv = New CustomVariableValueProvider + + Dim resFilePaths() As String + Dim inputBodies() As SldWorks.Body2 + + For i = 0 To UBound(vBodies) + + Set swBody = vBodies(i) + + Dim j As Integer + + For j = 0 To UBound(vArgs) + + Dim macroArg As IMacroArgument + Set macroArg = vArgs(j) + + Dim fileName As String + fileName = macroArg.GetValue(customVarValProv, swBody) + + Dim filePath As String + filePath = GetDirectory(swModel.GetPathName) & fileName + + If (Not resFilePaths) = -1 Then + ReDim resFilePaths(0) + ReDim inputBodies(0) + Else + ReDim Preserve resFilePaths(UBound(resFilePaths) + 1) + ReDim Preserve inputBodies(UBound(inputBodies) + 1) + End If + + resFilePaths(UBound(resFilePaths)) = filePath + Set inputBodies(UBound(inputBodies)) = swBody + + Next + + Next + + Dim vResFiles As Variant + vResFiles = macroOper.SetResultFiles(resFilePaths) + + For i = 0 To UBound(vResFiles) + + Dim resFile As IMacroOperationResultFile + Set resFile = vResFiles(i) + Set swBody = inputBodies(i) + + Dim ext As String + ext = GetExtension(resFile.path) + + If LCase(ext) = "dxf" Or LCase(ext) = "dwg" Then + If False <> swBody.IsSheetMetal() Then + TryExportFlatPattern swModel, swBody, resFile, macroOper + Else + resFile.Status = MacroOperationResultFileStatus_e_Initializing + macroOper.ReportIssue "Flat pattern export is skipped for " & swBody.Name, MacroIssueType_e_Information + End If + Else + TryExportBody swModel, swBody, resFile, macroOper + End If + + Next + +End Sub + +Sub TryExportBody(model As SldWorks.ModelDoc2, body As SldWorks.Body2, resFile As IMacroOperationResultFile, macroOper As MacroOperation) + +try_: + On Error GoTo catch_ + + Dim swSelMgr As SldWorks.SelectionMgr + Set swSelMgr = model.SelectionManager + + swSelMgr.SuspendSelectionList + + Dim swBodies(0) As SldWorks.Body2 + Set swBodies(0) = body + + If swSelMgr.AddSelectionListObjects(swBodies, Nothing) = 1 Then + + Dim filePath As String + filePath = resFile.path + + Dim errs As Long + Dim warns As Long + Dim dir As String + + dir = GetDirectory(filePath) + + CreateDirectories dir + + If False <> model.Extension.SaveAs2(filePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, "", False, errs, warns) Then + resFile.Status = MacroOperationResultFileStatus_e_Succeeded + Else + Err.Raise vbError, "", "Failed to export '" & body.Name & "' to '" & filePath & "'. Error code: " & errs + End If + Else + Err.Raise vbError, "", "Failed to select " & body.Name + End If + + GoTo finally_ +catch_: + macroOper.ReportIssue Err.Description, MacroIssueType_e_Error + resFile.Status = MacroOperationResultFileStatus_e_Failed +finally_: + + swSelMgr.ResumeSelectionList2 False + +End Sub + +Sub TryExportFlatPattern(model As SldWorks.ModelDoc2, body As SldWorks.Body2, resFile As IMacroOperationResultFile, macroOper As MacroOperation) + +try_: + On Error GoTo catch_ + + Dim expData(0) As FlatPatternExportDataCom + Set expData(0) = New FlatPatternExportDataCom + + Set expData(0).body = body + expData(0).Options = FlatPatternOptionsCom_e.FlatPatternOptionsCom_e_BendLines + expData(0).OutFilePath = resFile.path + + Dim vRes As Variant + vRes = swCadPlus.FlatPatternExport.BatchExportFlatPatterns(model, expData) + + Dim res As FlatPatternExportResult + Set res = vRes(0) + + If False = res.Succeeded Then + Err.Raise vbError, "", res.Error + End If + + resFile.Status = MacroOperationResultFileStatus_e_Succeeded + + GoTo finally_ +catch_: + macroOper.ReportIssue Err.Description, MacroIssueType_e_Error + resFile.Status = MacroOperationResultFileStatus_e_Failed +finally_: + +End Sub + +Function GetMacroOperation() As IMacroOperation + + Dim macroOper As IMacroOperation + + #If TEST Then + Dim swCadPlusFact As Object + Set swCadPlusFact = CreateObject("CadPlusFactory.Sw") + + Set swCadPlus = swCadPlusFact.Create(swApp, False) + + Dim args(2) As String + args(0) = "MFGs\STEP\{ path [FileNameWithoutExtension] }-{ bodyName }.step" + args(1) = "MFGs\IGES\{ path [FileNameWithoutExtension] }-{ bodyName }.igs" + args(2) = "MFGs\DWG\{ path [FileNameWithoutExtension] }-{ bodyName }.dwg" + Set macroOper = swCadPlus.CreateMacroOperation(swApp.ActiveDoc, "", args) + #Else + Dim macroOprMgr As IMacroOperationManager + Set macroOprMgr = CreateObject("CadPlus.MacroOperationManager") + + Set macroOper = macroOprMgr.PopOperation(swApp) + #End If + + Set GetMacroOperation = macroOper + +End Function + +Function GetExtension(path As String) As String + GetExtension = Right(path, Len(path) - InStrRev(path, ".")) +End Function + +Function GetDirectory(path As String) + GetDirectory = Left(path, InStrRev(path, "\")) +End Function + +Sub CreateDirectories(path As String) + + Dim fso As Object + Set fso = CreateObject("Scripting.FileSystemObject") + + If fso.FolderExists(path) Then + Exit Sub + End If + + CreateDirectories fso.GetParentFolderName(path) + + fso.CreateFolder path + +End Sub \ No newline at end of file diff --git a/solidworks-api/import-export/export-individual-bodies/index.md b/solidworks-api/import-export/export-individual-bodies/index.md new file mode 100644 index 00000000..a4294b9a --- /dev/null +++ b/solidworks-api/import-export/export-individual-bodies/index.md @@ -0,0 +1,19 @@ +--- +caption: Export Individual Bodies +title: Export individual bodies and flat-patterns from SOLIDWORKS part file via Macro+ framework +description: VBA macro demonstrates how to use Macro+ and CAD+ API to export individual bodies to foreign format and flat pattern (for sheet metal) from the active SOLIDWORKS part +image: +macro-plus: vba +--- + +This VBA macro is [Macro+](https://cadplus.xarial.com/macro-plus/) enabled macro that allows exporting all bodies in the active part file as individual files to foreign format (e.g. STEP, IGES, Parasolid etc.). + +Sheet metal bodies could be exported to DXF/DWG format as flat pattern via [Flat Pattern Export](https://cadplus.xarial.com/drawing/export-flat-patterns/) tool API of [CAD+ Toolset](https://cadplus.xarial.com/) + +This macro supports the custom argument **bodyName** and it will be resolved to the corresponding body name. + +{% code-snippet { file-name: Macro.vba } %} + +## CustomVariableValueProvider Class Module + +{% code-snippet { file-name: CustomVariableValueProvider.vba } %} \ No newline at end of file diff --git a/solidworks-api/import-export/export/Macro.vba b/solidworks-api/import-export/export/Macro.vba new file mode 100644 index 00000000..70cdc2a1 --- /dev/null +++ b/solidworks-api/import-export/export/Macro.vba @@ -0,0 +1,134 @@ +'#Const TEST = True + +Private Declare PtrSafe Function PathIsRelative Lib "shlwapi" Alias "PathIsRelativeA" (ByVal pszPath As String) As Boolean + +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + + Dim macroOper As IMacroOperation + Set macroOper = GetMacroOperation() + + Dim vArgs As Variant + vArgs = macroOper.Arguments + + Dim swModel As SldWorks.ModelDoc2 + Set swModel = macroOper.model + + Dim resFilePaths() As String + ReDim resFilePaths(UBound(vArgs)) + + For i = 0 To UBound(vArgs) + + Dim macroArg As IMacroArgument + Set macroArg = vArgs(i) + + Dim filePath As String + filePath = macroArg.GetValue() + + If PathIsRelative(filePath) Then + + Dim modelPath As String + modelPath = swModel.GetPathName + + If modelPath <> "" Then + filePath = GetDirectory(modelPath) & filePath + Else + Err.Raise vbError, "", "Cannot use relative path for an unsaved model" + End If + + End If + + resFilePaths(i) = filePath + + Next + + Dim vResFiles As Variant + vResFiles = macroOper.SetResultFiles(resFilePaths) + + For i = 0 To UBound(vResFiles) + + Dim resFile As IMacroOperationResultFile + Set resFile = vResFiles(i) + + TryExport swModel, resFile, macroOper + + Next + +End Sub + +Sub TryExport(model As SldWorks.ModelDoc2, resFile As IMacroOperationResultFile, macroOper As MacroOperation) + +try_: + On Error GoTo catch_ + + Dim filePath As String + filePath = resFile.path + + Dim errs As Long + Dim warns As Long + Dim dir As String + + dir = GetDirectory(filePath) + + CreateDirectories dir + + If False <> model.Extension.SaveAs2(filePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, "", False, errs, warns) Then + resFile.Status = MacroOperationResultFileStatus_e_Succeeded + Else + Err.Raise vbError, "", "Failed to export to '" & filePath & "'. Error code: " & errs + End If + + GoTo finally_ +catch_: + macroOper.ReportIssue Err.Description, MacroIssueType_e_Error + resFile.Status = MacroOperationResultFileStatus_e_Failed +finally_: + +End Sub + +Function GetMacroOperation() As IMacroOperation + + Dim macroOper As IMacroOperation + + #If TEST Then + Dim swCadPlusFact As Object + Set swCadPlusFact = CreateObject("CadPlusFactory.Sw") + + Set swCadPlus = swCadPlusFact.Create(swApp, False) + + Dim args(1) As String + args(0) = "MFGs\STEP\{ path [FileNameWithoutExtension] }.step" + args(1) = "MFGs\IGES\{ path [FileNameWithoutExtension] }.igs" + Set macroOper = swCadPlus.CreateMacroOperation(swApp.ActiveDoc, "", args) + #Else + Dim macroOprMgr As IMacroOperationManager + Set macroOprMgr = CreateObject("CadPlus.MacroOperationManager") + + Set macroOper = macroOprMgr.PopOperation(swApp) + #End If + + Set GetMacroOperation = macroOper + +End Function + +Function GetDirectory(path As String) + GetDirectory = Left(path, InStrRev(path, "\")) +End Function + +Sub CreateDirectories(path As String) + + Dim fso As Object + Set fso = CreateObject("Scripting.FileSystemObject") + + If fso.FolderExists(path) Then + Exit Sub + End If + + CreateDirectories fso.GetParentFolderName(path) + + fso.CreateFolder path + +End Sub \ No newline at end of file diff --git a/solidworks-api/import-export/export/index.md b/solidworks-api/import-export/export/index.md new file mode 100644 index 00000000..a9c5ba72 --- /dev/null +++ b/solidworks-api/import-export/export/index.md @@ -0,0 +1,17 @@ +--- +caption: Export +title: Export SOLIDWORKS files to foreign formats via Macro+ framework +description: VBA macro demonstrates how to use Macro+ and CAD+ API to export SOLIDWORKS files to multiple specified formats +image: +macro-plus: vba +--- + +This VBA macro is [Macro+](https://cadplus.xarial.com/macro-plus/) enabled macro that allows exporting file as to foreign format (e.g. PDF, DWG, STEP, IGES, Parasolid etc.). + +Each argument of the macro should specify the output file path and the extension of the exported file. + +If specified path is relative than the file will be exported relatively to the input file. + +Macro will automatically created directories if needed. + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file From b038f717b8c0252b23a15cb2f335cdfef9b4e6c0 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 27 Dec 2023 11:29:09 +1100 Subject: [PATCH 06/20] Added the macro to set read-only state for all dimensions in the feature --- .../dimensions/set-read-only/Macro.vba | 41 ++++++++++++++++++ .../set-read-only/dimension-read-only.png | Bin 0 -> 20278 bytes .../dimensions/set-read-only/index.md | 18 ++++++++ 3 files changed, 59 insertions(+) create mode 100644 solidworks-api/document/dimensions/set-read-only/Macro.vba create mode 100644 solidworks-api/document/dimensions/set-read-only/dimension-read-only.png create mode 100644 solidworks-api/document/dimensions/set-read-only/index.md diff --git a/solidworks-api/document/dimensions/set-read-only/Macro.vba b/solidworks-api/document/dimensions/set-read-only/Macro.vba new file mode 100644 index 00000000..60c15cd6 --- /dev/null +++ b/solidworks-api/document/dimensions/set-read-only/Macro.vba @@ -0,0 +1,41 @@ +Const READ_ONLY As Boolean = True + +Dim swApp As SldWorks.SldWorks +Dim swModel As SldWorks.ModelDoc2 + +Sub main() + + Set swApp = Application.SldWorks + + Set swModel = swApp.ActiveDoc + + Dim swSelMgr As SldWorks.SelectionMgr + + Set swSelMgr = swModel.SelectionManager + + Dim swFeat As SldWorks.Feature + + Set swFeat = swSelMgr.GetSelectedObject6(1, -1) + + If Not swFeat Is Nothing Then + + Dim swDispDim As SldWorks.DisplayDimension + + Set swDispDim = swFeat.GetFirstDisplayDimension + + While Not swDispDim Is Nothing + + Dim swDim As SldWorks.Dimension + + Set swDim = swDispDim.GetDimension2(0) + swDim.ReadOnly = READ_ONLY + + Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim) + + Wend + + Else + Err.Raise vbError, "", "Select feature" + End If + +End Sub \ No newline at end of file diff --git a/solidworks-api/document/dimensions/set-read-only/dimension-read-only.png b/solidworks-api/document/dimensions/set-read-only/dimension-read-only.png new file mode 100644 index 0000000000000000000000000000000000000000..85ed5b945d97ec27e2fc1721b3400c725c452f35 GIT binary patch literal 20278 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 PcLD@+TYRmVd+gr<(&z=y literal 0 HcmV?d00001 diff --git a/solidworks-api/document/dimensions/set-read-only/index.md b/solidworks-api/document/dimensions/set-read-only/index.md new file mode 100644 index 00000000..82932830 --- /dev/null +++ b/solidworks-api/document/dimensions/set-read-only/index.md @@ -0,0 +1,18 @@ +--- +caption: Set To Read-Only +title: Macro to change read-only state of all dimensions of the selected feature in the SOLIDWORKS model +description: VBA macro to change the read-only options for all dimensions of the selected feature of the active SOLIdWORKS model +image: dimension-read-only.png +--- + +![Dimension read-only property](dimension-read-only.png){ width=400 } + +This SOLIDWORKS VBA macro changes the read-only state of all dimensions of the selected feature (e.g. sketch). + +Set the target read-only state in the constant + +~~~ vb +Const READ_ONLY As Boolean = True 'True to set to Read-Only, False to remove Rea-Only flag +~~~ + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file From 11d447a9ef5ba7294fb8ca0015353a14c87953ba Mon Sep 17 00:00:00 2001 From: Artem Taturevych Date: Fri, 12 Jan 2024 14:39:52 +1100 Subject: [PATCH 07/20] Updated defeature part macro --- .../features-manager/defeature-part/Macro.vba | 121 ++++++++++++------ .../features-manager/defeature-part/index.md | 4 +- 2 files changed, 83 insertions(+), 42 deletions(-) diff --git a/solidworks-api/document/features-manager/defeature-part/Macro.vba b/solidworks-api/document/features-manager/defeature-part/Macro.vba index 7b6cc472..e40812b8 100644 --- a/solidworks-api/document/features-manager/defeature-part/Macro.vba +++ b/solidworks-api/document/features-manager/defeature-part/Macro.vba @@ -4,83 +4,118 @@ Sub main() Set swApp = Application.SldWorks +try_: + + On Error GoTo catch_ + Dim swPart As SldWorks.PartDoc Set swPart = swApp.ActiveDoc If Not swPart Is Nothing Then - Dim vBodies As Variant - vBodies = GetBodyCopies(swPart) + Dim vUserFeats As Variant + vUserFeats = GetAllTopLevelUserFeatures(swPart) - DeleteAllUserFeatures swPart - - CreateFeaturesForBodies swPart, vBodies + If Not IsEmpty(vUserFeats) Then + CreateFeaturesForBodies swPart + DeleteFeatures swPart, vUserFeats + Else + Err.Raise vbError, "", "No features in the model" + End If Else MsgBox "Please open part document" End If + GoTo finally_ + +catch_: + MsgBox Err.Description, vbCritical +finally_: + End Sub -Function GetBodyCopies(part As SldWorks.PartDoc) As Variant +Sub CreateFeaturesForBodies(part As SldWorks.PartDoc) Dim vBodies As Variant - - vBodies = part.GetBodies2(swBodyType_e.swAllBodies, True) - Dim i As Integer - For i = 0 To UBound(vBodies) + vBodies = part.GetBodies2(swBodyType_e.swAllBodies, False) + + If Not IsEmpty(vBodies) Then + + Dim i As Integer - Dim swBody As SldWorks.Body2 - Set swBody = vBodies(i) - Set swBody = swBody.Copy() - Set vBodies(i) = swBody + For i = 0 To UBound(vBodies) + + Dim swBody As SldWorks.Body2 + Set swBody = vBodies(i) + Set swBodyCopy = swBody.Copy() + + Dim swFeat As SldWorks.Feature - Next - - GetBodyCopies = vBodies - -End Function - -Sub CreateFeaturesForBodies(part As SldWorks.PartDoc, vBodies As Variant) - - Dim i As Integer + Set swFeat = part.CreateFeatureFromBody3(swBodyCopy, False, swCreateFeatureBodyOpts_e.swCreateFeatureBodySimplify) + + If Not swFeat Is Nothing Then + + Dim swFace As SldWorks.Face2 + Set swFace = swFeat.GetFaces()(0) + + Dim swReplacedBody As SldWorks.Body2 + Set swReplacedBody = swFace.GetBody + + swReplacedBody.HideBody False = swBody.Visible + + Else + Err.Raise vbError, "", "Failed to create feature for a body " & swBody.Name + End If + + Next - For i = 0 To UBound(vBodies) - Dim swBody As SldWorks.Body2 - Set swBody = vBodies(i) - part.CreateFeatureFromBody3 swBody, False, swCreateFeatureBodyOpts_e.swCreateFeatureBodySimplify - Next + Else + + Err.Raise vbError, "", "No bodies found" + + End If End Sub -Sub DeleteAllUserFeatures(model As SldWorks.ModelDoc2) +Sub DeleteFeatures(model As SldWorks.ModelDoc2, feats As Variant) - SelectAllTopLevelUserFeatures model - - model.Extension.DeleteSelection2 swDeleteSelectionOptions_e.swDelete_Children + swDeleteSelectionOptions_e.swDelete_Absorbed + If model.Extension.MultiSelect2(feats, False, Nothing) = UBound(feats) + 1 Then + model.Extension.DeleteSelection2 swDeleteSelectionOptions_e.swDelete_Children + swDeleteSelectionOptions_e.swDelete_Absorbed + Else + Err.Raise vbError, "", "Failed to select user features" + End If End Sub -Sub SelectAllTopLevelUserFeatures(model As SldWorks.ModelDoc2) +Function GetAllTopLevelUserFeatures(model As SldWorks.ModelDoc2) As Variant - model.ClearSelection2 True + Dim swUserFeats() As SldWorks.Feature Dim swFeat As SldWorks.Feature Set swFeat = model.FirstFeature - Dim selectFeat As Boolean - selectFeat = False + Dim isUserFeat As Boolean + isUserFeat = False While Not swFeat Is Nothing - If selectFeat Then - swFeat.Select2 True, -1 + If isUserFeat Then + + If (Not swUserFeats) = -1 Then + ReDim swUserFeats(0) + Else + ReDim Preserve swUserFeats(UBound(swUserFeats) + 1) + End If + + Set swUserFeats(UBound(swUserFeats)) = swFeat + Else If swFeat.GetTypeName2() = "OriginProfileFeature" Then - selectFeat = True + isUserFeat = True End If End If @@ -88,4 +123,10 @@ Sub SelectAllTopLevelUserFeatures(model As SldWorks.ModelDoc2) Wend -End Sub \ No newline at end of file + If (Not swUserFeats) = -1 Then + GetAllTopLevelUserFeatures = Empty + Else + GetAllTopLevelUserFeatures = swUserFeats + End If + +End Function \ No newline at end of file diff --git a/solidworks-api/document/features-manager/defeature-part/index.md b/solidworks-api/document/features-manager/defeature-part/index.md index 4c709319..ecef424f 100644 --- a/solidworks-api/document/features-manager/defeature-part/index.md +++ b/solidworks-api/document/features-manager/defeature-part/index.md @@ -5,9 +5,9 @@ description: Macro to convert all features in part to dumb solids (defeature par image: part-feature-tree-defeatured.png labels: [defeature,parasolid] --- -This macro emulates the functionality of [Defeature for Part](https://help.solidworks.com/2018/english/solidworks/sldworks/c_defeature_for_parts.htm) but not using it directly. +This VBA macro defeatures the active SOLIDWORKS part. Unlike the [Defeature for Part](https://help.solidworks.com/2018/english/solidworks/sldworks/c_defeature_for_parts.htm) functionality, this macro preserves the original geometry and does not simplify it. -Macro copies all visible solid and surface bodies, deletes all user features and imports the copied bodies using SOLIDWORKS API. +Macro copies all solid and surface bodies, deletes all user features and imports the copied bodies using SOLIDWORKS API. Macro will preserve the hidden flag from the original bodies. **Before:** From afa2a13617b39f8452a90e8fabbd675b50ea0059 Mon Sep 17 00:00:00 2001 From: OldFcuk <84081713+OldFcuk@users.noreply.github.com> Date: Tue, 30 Jan 2024 01:01:19 +0200 Subject: [PATCH 08/20] Update index.md word placement --- solidworks-api/document/features-manager/hide-features/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solidworks-api/document/features-manager/hide-features/index.md b/solidworks-api/document/features-manager/hide-features/index.md index 96cdd7e8..91c63cb4 100644 --- a/solidworks-api/document/features-manager/hide-features/index.md +++ b/solidworks-api/document/features-manager/hide-features/index.md @@ -5,7 +5,7 @@ description: VBA macro which hides features and makes them invisible in the SOLI image: hidden-features.png labels: [feature,hide,invisible] --- -This VBA macro allows to make invisible selected features in the tree. The features still continue to be fully operational and visible in the graphics area (e.g. planes), but not visible in the feature manager tree. +This VBA macro allows to make selected features invisible in the tree. The features still continue to be fully operational and visible in the graphics area (e.g. planes), but not visible in the feature manager tree. Even default features (such as planes) can be made invisible. From 0f093468ba0a2ca22e69cd36437017eabdca42b6 Mon Sep 17 00:00:00 2001 From: Artem Date: Fri, 9 Feb 2024 16:03:32 +1100 Subject: [PATCH 09/20] Updated export vb script to output messages to console --- .../scripts/vbscript/batch-export/export-sw-models.vbs | 5 +++++ .../getting-started/scripts/vbscript/batch-export/index.md | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/solidworks-api/getting-started/scripts/vbscript/batch-export/export-sw-models.vbs b/solidworks-api/getting-started/scripts/vbscript/batch-export/export-sw-models.vbs index 5f10fb57..53d5950c 100644 --- a/solidworks-api/getting-started/scripts/vbscript/batch-export/export-sw-models.vbs +++ b/solidworks-api/getting-started/scripts/vbscript/batch-export/export-sw-models.vbs @@ -10,6 +10,8 @@ outDir = WScript.Arguments.Item(2) Dim outExt outExt = WScript.Arguments.Item(3) +WScript.Echo "Connecting to SOLIDWORKS" + Dim swApp Set swApp = CreateObject("SldWorks.Application") swApp.Visible = True @@ -24,6 +26,8 @@ dim file For Each file in folder.Files If LCase(fso.GetExtensionName(file.Path)) = LCase(filter) Then + + WScript.Echo "Opening " & file.Path Dim docSpec Set docSpec = swApp.GetOpenDocSpec(file.Path) docSpec.ReadOnly = True @@ -34,6 +38,7 @@ For Each file in folder.Files If Not swModel is Nothing Then Dim outFilePath outFilePath = outDir & "\" & fso.GetBaseName(file) & "." & outExt + WScript.Echo "Exporting " & file.Path & " to " & outFilePath swModel.SaveAs outFilePath swApp.CloseDoc swModel.GetTitle() End If diff --git a/solidworks-api/getting-started/scripts/vbscript/batch-export/index.md b/solidworks-api/getting-started/scripts/vbscript/batch-export/index.md index 16931ebd..b27aa547 100644 --- a/solidworks-api/getting-started/scripts/vbscript/batch-export/index.md +++ b/solidworks-api/getting-started/scripts/vbscript/batch-export/index.md @@ -5,6 +5,8 @@ description: Example of batch exporting SOLIDWORKS documents from the vbScript --- This example of vbScript which demonstrates how to batch export SOLIDWORKS documents using vbScript +Use **csript** to run the scrip in order to print log messages to console, instead of the message boxes + ## Arguments 1. Path to folder with SOLIDWORKS models @@ -13,7 +15,7 @@ This example of vbScript which demonstrates how to batch export SOLIDWORKS docum 1. Extension of the output format ~~~ -> "export-sw-models.vbs" "C:\Models" sldprt "C:\Output" step +> csript "export-sw-models.vbs" "C:\Models" sldprt "C:\Output" step ~~~ {% code-snippet { file-name: export-sw-models.vbs } %} \ No newline at end of file From 894e3963ffac48e61f3c8b3d508989dc4c403255 Mon Sep 17 00:00:00 2001 From: Obliviatum Date: Tue, 20 Feb 2024 17:39:09 +0100 Subject: [PATCH 10/20] Solved return empty cut-list-item The chance is that there is another cut-list-item hiding in the background, which can still be accessed via the API. The following changes to the code ensure that it gets the correct cut-list-item. --- .../cut-lists/copy-custom-properties/Macro.vba | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba b/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba index a4127a1d..668157e4 100644 --- a/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba +++ b/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba @@ -58,8 +58,17 @@ Function GetCutListPropertyManager(model As SldWorks.ModelDoc2) As SldWorks.Cust While Not swFeat Is Nothing If swFeat.GetTypeName2() = "CutListFolder" Then - Set GetCutListPropertyManager = swFeat.CustomPropertyManager - Exit Function + + Dim BodyFolder As SldWorks.BodyFolder + Set BodyFolder = swFeat.GetSpecificFeature2 + + Dim BodyCount As Long + BodyCount = BodyFolder.GetBodyCount + + If BodyCount <> 0 Then + Set GetCutListPropertyManager = swFeat.CustomPropertyManager + Exit Function + End If End If Set swFeat = swFeat.GetNextFeature @@ -97,4 +106,4 @@ Sub CopyProperties(srcPrpMgr As SldWorks.CustomPropertyManager, targPrpMgr As Sl Err.Raise vbError, "", "No properties to copy" End If -End Sub \ No newline at end of file +End Sub From c3417744519782fdc2d14291311d359648a131d9 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 28 Feb 2024 17:20:28 +1100 Subject: [PATCH 11/20] Added option to select multiple paths Added option for save as copy fo rthe export multi formats --- .../assembly/components/copy-path/Macro.vba | 65 ++++++++++++------- .../assembly/components/copy-path/index.md | 10 +-- .../copy-custom-properties/Macro.vba | 10 +-- .../export-multi-formats/Macro.vba | 2 +- 4 files changed, 51 insertions(+), 36 deletions(-) diff --git a/solidworks-api/document/assembly/components/copy-path/Macro.vba b/solidworks-api/document/assembly/components/copy-path/Macro.vba index c9e816fa..2406c66a 100644 --- a/solidworks-api/document/assembly/components/copy-path/Macro.vba +++ b/solidworks-api/document/assembly/components/copy-path/Macro.vba @@ -3,55 +3,70 @@ Dim swModel As SldWorks.ModelDoc2 Sub main() +try_: + On Error GoTo catch_ + Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc + Dim path As String + If Not swModel Is Nothing Then Dim swSelMgr As SldWorks.SelectionMgr Set swSelMgr = swModel.SelectionManager - Dim swComp As SldWorks.Component2 + Dim i As Integer - If TypeOf swModel Is SldWorks.AssemblyDoc Then - - Set swComp = swSelMgr.GetSelectedObjectsComponent4(1, -1) - - ElseIf TypeOf swModel Is SldWorks.DrawingDoc Then - - Dim swDrawComp As SldWorks.DrawingComponent - Set swDrawComp = swSelMgr.GetSelectedObjectsComponent4(1, -1) + For i = 1 To swSelMgr.GetSelectedObjectCount2(-1) + + Dim swComp As SldWorks.Component2 + Set swComp = Nothing - If swDrawComp Is Nothing Then - 'for entities selected in graphics view - first seleciton is a view itself - Set swDrawComp = swSelMgr.GetSelectedObjectsComponent4(2, -1) + If TypeOf swModel Is SldWorks.AssemblyDoc Then + + Set swComp = swSelMgr.GetSelectedObjectsComponent4(i, -1) + + ElseIf TypeOf swModel Is SldWorks.DrawingDoc Then + + Dim swDrawComp As SldWorks.DrawingComponent + Set swDrawComp = swSelMgr.GetSelectedObjectsComponent4(i, -1) + + If Not swDrawComp Is Nothing Then + Set swComp = swDrawComp.Component + End If + + Else + Err.Raise vbError, "", "Only parts and drawings are supported" End If - If Not swDrawComp Is Nothing Then - Set swComp = swDrawComp.Component + If Not swComp Is Nothing Then + If path <> "" Then + path = path & vbLf + End If + path = path & swComp.GetPathName End If - Else - MsgBox "Only parts and drawings are supported" - End - End If + Next - If Not swComp Is Nothing Then - - Dim path As String - path = swComp.GetPathName + If path <> "" Then Debug.Print path SetTextToClipboard path - Else - MsgBox "Please select component" + Err.Raise vbError, "", "Please select components" End If Else - MsgBox "Please open document" + Err.Raise vbError, "", "Please open document" End If + GoTo finally_ + +catch_: + swApp.SendMsgToUser2 Err.Description, swMessageBoxIcon_e.swMbStop, swMessageBoxBtn_e.swMbOk +finally_: + End Sub Sub SetTextToClipboard(text As String) diff --git a/solidworks-api/document/assembly/components/copy-path/index.md b/solidworks-api/document/assembly/components/copy-path/index.md index 9e4b3d33..66349361 100644 --- a/solidworks-api/document/assembly/components/copy-path/index.md +++ b/solidworks-api/document/assembly/components/copy-path/index.md @@ -1,18 +1,18 @@ --- layout: sw-tool -title: Macro to copy path of SOLIDWORKS component to clipboard +title: Macro to copy path of SOLIDWORKS components to clipboard caption: Copy Component Path -description: Macro copies the path of the selected component in assembly or drawing into the clipboard using SOLIDWORKS API +description: Macro copies the path of the selected components in assembly or drawing into the clipboard using SOLIDWORKS API image: copy-component-path.png labels: [path, clipboard, component] group: Assembly --- ![Component selected in the feature tree](selected-component.png){ width=250 } -This macro copies the full path to the selected component into the clipboard using SOLIDWORKS API. +This macro copies the full path to the selected components into the clipboard using SOLIDWORKS API. -* Component can be selected in assembly or drawing document -* Component can be selected in the feature tree or in the graphics area +* Components can be selected in assembly or drawing document +* Components can be selected in the feature tree or in the graphics area * It is also possible to select a component entity (i.e. face or edge) to get the path to the component {% code-snippet { file-name: Macro.vba } %} diff --git a/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba b/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba index 668157e4..dbd4b9bd 100644 --- a/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba +++ b/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba @@ -59,13 +59,13 @@ Function GetCutListPropertyManager(model As SldWorks.ModelDoc2) As SldWorks.Cust If swFeat.GetTypeName2() = "CutListFolder" Then - Dim BodyFolder As SldWorks.BodyFolder - Set BodyFolder = swFeat.GetSpecificFeature2 + Dim swBodyFolder As SldWorks.BodyFolder + Set swBodyFolder = swFeat.GetSpecificFeature2 - Dim BodyCount As Long - BodyCount = BodyFolder.GetBodyCount + Dim bodyCount As Long + bodyCount = swBodyFolder.GetBodyCount - If BodyCount <> 0 Then + If bodyCount <> 0 Then Set GetCutListPropertyManager = swFeat.CustomPropertyManager Exit Function End If diff --git a/solidworks-api/import-export/export-multi-formats/Macro.vba b/solidworks-api/import-export/export-multi-formats/Macro.vba index e753bdb2..6e8a1198 100644 --- a/solidworks-api/import-export/export-multi-formats/Macro.vba +++ b/solidworks-api/import-export/export-multi-formats/Macro.vba @@ -129,7 +129,7 @@ Sub ExportFile(model As SldWorks.ModelDoc2, vOutNameTemplates As Variant, allCon Set swExportData = Nothing End If - If False = model.Extension.SaveAs(outFilePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExportData, errs, warns) Then + If False = model.Extension.SaveAs(outFilePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent + swSaveAsOptions_e.swSaveAsOptions_Copy, swExportData, errs, warns) Then Err.Raise vberrror, "", "Failed to export to " & outFilePath End If From 11b6bd21b5af91bfb2aef017e030890cff5bba20 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 15 May 2024 16:24:57 +1000 Subject: [PATCH 12/20] Updated copy cut-list custom properties macro to specify the target property names and to process all configurations Added option to the propagate configurations to filer parent and children confs, force single body for the drawings, fixed the issue with a multi-body sheet metal part --- .../copy-custom-properties/Macro.vba | 157 ++++++++++++++---- .../cut-lists/copy-custom-properties/index.md | 19 ++- .../bom-table-conf.svg | 1 + .../index.md | 2 +- .../propagate-configurations-sheets/Macro.vba | 90 ++++++---- .../confs-to-sheets.svg | 1 + .../propagate-configurations-sheets/index.md | 10 +- 7 files changed, 207 insertions(+), 73 deletions(-) create mode 100644 solidworks-api/document/drawing/bom-tables-update-referenced-configuration/bom-table-conf.svg create mode 100644 solidworks-api/document/drawing/propagate-configurations-sheets/confs-to-sheets.svg diff --git a/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba b/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba index dbd4b9bd..343ffa98 100644 --- a/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba +++ b/solidworks-api/document/cut-lists/copy-custom-properties/Macro.vba @@ -1,12 +1,20 @@ -Const CONF_SPEC_PRP As Boolean = False +Const CONF_SPEC_PRP As Boolean = True Const COPY_RES_VAL As Boolean = True -Dim PROPERTIES As Variant +Const ALL_CONFS As Boolean = False +Const PROCESS_TOP_LEVEL_CONFIGS As Boolean = False +Const PROCESS_CHILDREN_CONFIGS As Boolean = True + +Dim SRC_PROPERTIES As Variant +Dim TARG_PROPERTIES As Variant Dim swApp As SldWorks.SldWorks -Sub Init(Optional dummy As Variant = Empty) - PROPERTIES = Array("Bounding Box Length", "Bounding Box Width", "Sheet Metal Thickness") 'list of custom properties to copy or Empty to copy all +Sub Init(Optional dummy As Variant = Empty) + + SRC_PROPERTIES = Array("Bounding Box Length", "Bounding Box Width", "Sheet Metal Thickness") 'list of custom properties to copy or Empty to copy all + TARG_PROPERTIES = Array("Length", "Width", "Thickness") 'list of target custom property namesor Empty to use original name + End Sub Sub main() @@ -22,24 +30,38 @@ try_: Dim swModel As SldWorks.ModelDoc2 Set swModel = swApp.ActiveDoc - Dim swCutListPrpMgr As SldWorks.CustomPropertyManager - Set swCutListPrpMgr = GetCutListPropertyManager(swModel) + Dim activeConfName As String + activeConfName = swModel.ConfigurationManager.ActiveConfiguration.Name - If Not swCutListPrpMgr Is Nothing Then + Dim vConfNames As Variant + vConfNames = GetConfigurations(swModel) + + Dim i As Integer + + For i = 0 To UBound(vConfNames) + + swModel.ShowConfiguration2 CStr(vConfNames(i)) - Dim swTargetPrpMgr As SldWorks.CustomPropertyManager + Dim swCutListPrpMgr As SldWorks.CustomPropertyManager + Set swCutListPrpMgr = GetCutListPropertyManager(swModel) - If CONF_SPEC_PRP Then - Set swTargetPrpMgr = swModel.ConfigurationManager.ActiveConfiguration.CustomPropertyManager + If Not swCutListPrpMgr Is Nothing Then + + Dim swTargetPrpMgr As SldWorks.CustomPropertyManager + + If CONF_SPEC_PRP Then + Set swTargetPrpMgr = swModel.ConfigurationManager.ActiveConfiguration.CustomPropertyManager + Else + Set swTargetPrpMgr = swModel.Extension.CustomPropertyManager("") + End If + + CopyProperties swCutListPrpMgr, swTargetPrpMgr, SRC_PROPERTIES, TARG_PROPERTIES + Else - Set swTargetPrpMgr = swModel.Extension.CustomPropertyManager("") + Err.Raise vbError, "", "Cut-list is not found" End If - - CopyProperties swCutListPrpMgr, swTargetPrpMgr, PROPERTIES - - Else - Err.Raise vbError, "", "Cut-list is not found" - End If + + Next GoTo finally_ @@ -47,6 +69,10 @@ catch_: swApp.SendMsgToUser2 Err.Description, swMessageBoxIcon_e.swMbStop, swMessageBoxBtn_e.swMbOk finally_: + If activeConfName <> "" Then + swModel.ShowConfiguration2 activeConfName + End If + End Sub Function GetCutListPropertyManager(model As SldWorks.ModelDoc2) As SldWorks.CustomPropertyManager @@ -77,33 +103,94 @@ Function GetCutListPropertyManager(model As SldWorks.ModelDoc2) As SldWorks.Cust End Function -Sub CopyProperties(srcPrpMgr As SldWorks.CustomPropertyManager, targPrpMgr As SldWorks.CustomPropertyManager, vPrpNames As Variant) +Sub CopyProperties(srcPrpMgr As SldWorks.CustomPropertyManager, targPrpMgr As SldWorks.CustomPropertyManager, vSrcPrpNames As Variant, vTargPrpNames As Variant) - If IsEmpty(vPrpNames) Then - vPrpNames = srcPrpMgr.GetNames() + If IsEmpty(vSrcPrpNames) Then + vSrcPrpNames = srcPrpMgr.GetNames() + vTargPrpNames = vSrcPrpNames + End If + + If IsEmpty(vTargPrpNames) Then + vTargPrpNames = vSrcPrpNames End If - If Not IsEmpty(vPrpNames) Then + If Not IsEmpty(vSrcPrpNames) Then + + If UBound(vSrcPrpNames) = UBound(vTargPrpNames) Then + + For i = 0 To UBound(vSrcPrpNames) + + Dim srcPrpName As String + + srcPrpName = vSrcPrpNames(i) + + Dim prpVal As String + Dim prpResVal As String + + srcPrpMgr.Get5 srcPrpName, False, prpVal, prpResVal, False + + Dim targVal As String + targVal = IIf(COPY_RES_VAL, prpResVal, prpVal) + + Dim targPrpName As String + + targPrpName = vTargPrpNames(i) + + targPrpMgr.Add2 targPrpName, swCustomInfoType_e.swCustomInfoText, targVal + targPrpMgr.Set targPrpName, targVal + + Next + Else + Err.Raise vbError, "", "Target proeprties name do not match source" + End If + + Else + Err.Raise vbError, "", "No properties to copy" + End If - For i = 0 To UBound(vPrpNames) - - prpName = vPrpNames(i) +End Sub - Dim prpVal As String - Dim prpResVal As String - - srcPrpMgr.Get5 prpName, False, prpVal, prpResVal, False +Function GetConfigurations(model As SldWorks.ModelDoc2) As Variant + + Dim confNames() As String + + If ALL_CONFS And CONF_SPEC_PRP Then + + Dim vConfNames As Variant + vConfNames = model.GetConfigurationNames + + Dim i As Integer + + For i = 0 To UBound(vConfNames) + + Dim confName As String + confName = CStr(vConfNames(i)) - Dim targVal As String - targVal = IIf(COPY_RES_VAL, prpResVal, prpVal) + Dim swConf As SldWorks.Configuration + Set swConf = model.GetConfigurationByName(confName) - targPrpMgr.Add2 prpName, swCustomInfoType_e.swCustomInfoText, targVal - targPrpMgr.Set prpName, targVal + If swConf.Type = swConfigurationType_e.swConfiguration_Standard Then + + If (PROCESS_TOP_LEVEL_CONFIGS And swConf.GetParent() Is Nothing) Or (PROCESS_CHILDREN_CONFIGS And Not swConf.GetParent() Is Nothing) Then + If (Not confNames) = -1 Then + ReDim confNames(0) + Else + ReDim Preserve confNames(UBound(confNames) + 1) + End If + + confNames(UBound(confNames)) = confName + + End If + + End If Next - + Else - Err.Raise vbError, "", "No properties to copy" + ReDim confNames(0) + confNames(0) = model.ConfigurationManager.ActiveConfiguration.Name End If -End Sub + GetConfigurations = confNames + +End Function diff --git a/solidworks-api/document/cut-lists/copy-custom-properties/index.md b/solidworks-api/document/cut-lists/copy-custom-properties/index.md index 8b62450b..a0552f8d 100644 --- a/solidworks-api/document/cut-lists/copy-custom-properties/index.md +++ b/solidworks-api/document/cut-lists/copy-custom-properties/index.md @@ -17,6 +17,12 @@ Properties from the first found cut-list will be copied. Macro can be configured by changing the constants +~~~ vb +Const ALL_CONFS As Boolean = False 'True to process all configurations +Const PROCESS_TOP_LEVEL_CONFIGS As Boolean = False 'True to process top level configurations +Const PROCESS_CHILDREN_CONFIGS As Boolean = True 'True to process children configurations +~~~ + ### Properties Scope *CONF_SPEC_PRP* constant sets the target properties scope. @@ -38,13 +44,19 @@ Macro can be configured by changing the constants ### Properties List -*PROPERTIES* array contains list of properties to copy +~~~ vb +Dim SRC_PROPERTIES As Variant +Dim TARG_PROPERTIES As Variant +~~~ + +*SRC_PROPERTIES* array contains list of property names to copy, *TARG_PROPERTIES* array contains list of properties to copy to Copy specified properties ~~~ vb Sub Init(Optional dummy As Variant = Empty) - PROPERTIES = Array("Prp1", "Prp2", "Prp3") 'Copy Prp1, Prp2, Prp3 + SRC_PROPERTIES = Array("Prp1", "Prp2", "Prp3") 'Copy Prp1, Prp2, Prp3 + TARG_PROPERTIES = Array("TargPrp1", "Prp2", "TargPrp3") 'Copy to TargPrp1, Prp2, TargPrp3 End Sub ~~~ @@ -52,6 +64,7 @@ Copy all properties ~~~ vb Sub Init(Optional dummy As Variant = Empty) - PROPERTIES = Empty + SRC_PROPERTIES = Empty + TARG_PROPERTIES = Empty End Sub ~~~ \ No newline at end of file diff --git a/solidworks-api/document/drawing/bom-tables-update-referenced-configuration/bom-table-conf.svg b/solidworks-api/document/drawing/bom-tables-update-referenced-configuration/bom-table-conf.svg new file mode 100644 index 00000000..9146aeeb --- /dev/null +++ b/solidworks-api/document/drawing/bom-tables-update-referenced-configuration/bom-table-conf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/solidworks-api/document/drawing/bom-tables-update-referenced-configuration/index.md b/solidworks-api/document/drawing/bom-tables-update-referenced-configuration/index.md index ef150d02..5c63bf04 100644 --- a/solidworks-api/document/drawing/bom-tables-update-referenced-configuration/index.md +++ b/solidworks-api/document/drawing/bom-tables-update-referenced-configuration/index.md @@ -2,7 +2,7 @@ title: SOLIDWORKS macro to update referenced configuration from BOM tables caption: Update Referenced Configuration From BOM Tables description: Macro will update the referenced configurations for all Bill of Materials (BOM) tables on the active drawing document using SOLIDWORKS API -image: bom-configurations-property.png +image: bom-table-conf.svg labels: [bom, default view, referenced configuration, solidworks api, utility, view] redirect-from: - /2018/03/update-referenced-configuration-from.html diff --git a/solidworks-api/document/drawing/propagate-configurations-sheets/Macro.vba b/solidworks-api/document/drawing/propagate-configurations-sheets/Macro.vba index 9ce6018e..63ebf26b 100644 --- a/solidworks-api/document/drawing/propagate-configurations-sheets/Macro.vba +++ b/solidworks-api/document/drawing/propagate-configurations-sheets/Macro.vba @@ -1,13 +1,17 @@ -Const TOP_LEVEL_CONFIGS_ONLY As Boolean = False +Const PROCESS_TOP_LEVEL_CONFIGS As Boolean = True +Const PROCESS_CHILDREN_CONFIGS As Boolean = False + Const USE_CORRESPONDING_FLAT_PATTERN_CONF As Boolean = True Const GENERATE_MISSING_FLAT_PATTERN_CONF As Boolean = True +Const FORCE_SINGLE_BODY As Boolean = False + Dim swApp As SldWorks.SldWorks Sub main() Set swApp = Application.SldWorks - + Dim swDraw As SldWorks.DrawingDoc Set swDraw = swApp.ActiveDoc @@ -30,7 +34,7 @@ Sub main() ValidateSheet swSheet, swRefDoc Dim vConfNames As Variant - vConfNames = GetConfigurations(swRefDoc) + vConfNames = GetConfigurations(swRefDoc, GetActualReferencedConfiguration(swDefView)) Dim i As Integer @@ -59,7 +63,7 @@ Sub main() End Sub -Function GetConfigurations(refDoc As SldWorks.ModelDoc2) As Variant +Function GetConfigurations(refDoc As SldWorks.ModelDoc2, confToExclude As String) As Variant Dim confNames() As String @@ -73,18 +77,25 @@ Function GetConfigurations(refDoc As SldWorks.ModelDoc2) As Variant Dim confName As String confName = CStr(vConfNames(i)) - Dim swConf As SldWorks.Configuration - Set swConf = refDoc.GetConfigurationByName(confName) + If LCase(confName) <> LCase(confToExclude) Then - If (Not TOP_LEVEL_CONFIGS_ONLY Or swConf.GetParent() Is Nothing) And swConf.Type = swConfigurationType_e.swConfiguration_Standard Then + Dim swConf As SldWorks.Configuration + Set swConf = refDoc.GetConfigurationByName(confName) + + If swConf.Type = swConfigurationType_e.swConfiguration_Standard Then + + If (PROCESS_TOP_LEVEL_CONFIGS And swConf.GetParent() Is Nothing) Or (PROCESS_CHILDREN_CONFIGS And Not swConf.GetParent() Is Nothing) Then + If (Not confNames) = -1 Then + ReDim confNames(0) + Else + ReDim Preserve confNames(UBound(confNames) + 1) + End If - If (Not confNames) = -1 Then - ReDim confNames(0) - Else - ReDim Preserve confNames(UBound(confNames) + 1) - End If + confNames(UBound(confNames)) = confName + + End If - confNames(UBound(confNames)) = confName + End If End If @@ -186,13 +197,17 @@ Sub CopySheetWithConfiguration(draw As SldWorks.DrawingDoc, sheet As SldWorks.sh Dim confName As String If False <> swView.IsFlatPatternView() And USE_CORRESPONDING_FLAT_PATTERN_CONF Then - confName = GetFlatPatternConfiguration(draw, swView.ReferencedDocument, baseConfName, GENERATE_MISSING_FLAT_PATTERN_CONF) + confName = GetFlatPatternConfiguration(draw, swView, baseConfName, GENERATE_MISSING_FLAT_PATTERN_CONF) Else confName = baseConfName End If swView.ReferencedConfiguration = confName + If FORCE_SINGLE_BODY Then + SetSingleBody swView + End If + RefreshView draw, swView Next @@ -246,10 +261,14 @@ Sub RefreshView(draw As SldWorks.DrawingDoc, swView As SldWorks.view) End Sub -Function GetFlatPatternConfiguration(draw As SldWorks.DrawingDoc, refDoc As SldWorks.ModelDoc2, baseConfName As String, allowCreateIfNotExist As Boolean) As String +Function GetFlatPatternConfiguration(draw As SldWorks.DrawingDoc, view As SldWorks.view, baseConfName As String, allowCreateIfNotExist As Boolean) As String + Dim swRefDoc As SldWorks.ModelDoc2 + + Set swRefDoc = view.ReferencedDocument + Dim swConf As SldWorks.Configuration - Set swConf = refDoc.GetConfigurationByName(baseConfName) + Set swConf = swRefDoc.GetConfigurationByName(baseConfName) If swConf.Type <> swConfigurationType_e.swConfiguration_SheetMetal Then @@ -278,7 +297,7 @@ Function GetFlatPatternConfiguration(draw As SldWorks.DrawingDoc, refDoc As SldW If allowCreateIfNotExist Then Debug.Print "Creating flat pattern configuration for " & baseConfName - GetFlatPatternConfiguration = CreateFlatPatternConfiguration(draw, refDoc, baseConfName) + GetFlatPatternConfiguration = CreateFlatPatternConfiguration(draw, view, baseConfName) Else Debug.Print "Flat pattern configuration is not found for " & baseConfName GetFlatPatternConfiguration = baseConfName @@ -289,28 +308,37 @@ Function GetFlatPatternConfiguration(draw As SldWorks.DrawingDoc, refDoc As SldW End Function -Function CreateFlatPatternConfiguration(draw As SldWorks.DrawingDoc, refDoc As SldWorks.ModelDoc2, baseConfName As String) As String +Function CreateFlatPatternConfiguration(draw As SldWorks.DrawingDoc, view As SldWorks.view, baseConfName As String) As String - Dim swFlatPatternView As SldWorks.view - Set swFlatPatternView = draw.CreateFlatPatternViewFromModelView3(refDoc.GetPathName(), baseConfName, 0, 0, 0, True, False) + view.ReferencedConfiguration = baseConfName - If Not swFlatPatternView Is Nothing Then - CreateFlatPatternConfiguration = swFlatPatternView.ReferencedConfiguration - - If SelectDrawingView(draw, swFlatPatternView) Then - If False = draw.Extension.DeleteSelection2(swDeleteSelectionOptions_e.swDelete_Absorbed) Then - Err.Raise vbError, "", "Failed to delete temp view" - End If + SetSingleBody view + + If SelectDrawingView(draw, view) Then + If False <> draw.ChangeRefConfigurationOfFlatPatternView(view.ReferencedDocument.GetPathName(), view.ReferencedConfiguration) Then + CreateFlatPatternConfiguration = view.ReferencedConfiguration Else - Err.Raise vbError, "", "Failed to select temp view for deletion" + Err.Raise vbError, "", "Failed to create flat pattern view for " & view.ReferencedDocument.GetPathName() & " (" & baseConfName & ")" End If - Else - Err.Raise vbError, "", "Failed to create temp flat pattern view for " & refDoc.GetPathName() & " (" & baseConfName & ")" + Err.Raise vbError, "", "Failed to select temp view for deletion" End If - + End Function +Sub SetSingleBody(view As SldWorks.view) + + Dim vViewBodies As Variant + vViewBodies = view.Bodies + + If Not IsEmpty(vViewBodies) Then + Dim swBody(0) As SldWorks.Body2 + Set swBody(0) = vViewBodies(0) + view.Bodies = swBody + End If + +End Sub + Function SelectDrawingView(draw As SldWorks.ModelDoc2, view As SldWorks.view) As Boolean SelectDrawingView = False <> draw.Extension.SelectByID2(view.Name, "DRAWINGVIEW", 0, 0, 0, False, -1, Nothing, swSelectOption_e.swSelectOptionDefault) End Function diff --git a/solidworks-api/document/drawing/propagate-configurations-sheets/confs-to-sheets.svg b/solidworks-api/document/drawing/propagate-configurations-sheets/confs-to-sheets.svg new file mode 100644 index 00000000..bd7b40f5 --- /dev/null +++ b/solidworks-api/document/drawing/propagate-configurations-sheets/confs-to-sheets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/solidworks-api/document/drawing/propagate-configurations-sheets/index.md b/solidworks-api/document/drawing/propagate-configurations-sheets/index.md index f57d12f0..74499bf2 100644 --- a/solidworks-api/document/drawing/propagate-configurations-sheets/index.md +++ b/solidworks-api/document/drawing/propagate-configurations-sheets/index.md @@ -2,7 +2,7 @@ caption: Propagate Configurations To Sheets title: Macro propagates configurations of the referenced document to sheets in the SOLIDWORKS drawings description: VBA macro copies the input sheet and sets the referenced configuration sof the referenced document -image: sheets.png +image: confs-to-sheets.svg --- ![Drawings with multiple sheets](sheets.png){ width=800 } @@ -18,9 +18,13 @@ As the result drawing will contain sheets for all the configurations of the mult Macro can be configured by changing the constant values of the macro ~~~ vb -Const TOP_LEVEL_CONFIGS_ONLY As Boolean = False 'True to only process top level configurations, False to process children configurations -Const USE_CORRESPONDING_FLAT_PATTERN_CONF As Boolean = True 'True to find the corresponding SM-FLAT-PATTERN configuration for the flat pattern view, False to use configuration As Is +Const PROCESS_TOP_LEVEL_CONFIGS As Boolean = True 'True to process top level configurations +Const PROCESS_CHILDREN_CONFIGS As Boolean = False 'True to process children configurations + +Const USE_CORRESPONDING_FLAT_PATTERN_CONF As Boolean = True'True to find the corresponding SM-FLAT-PATTERN configuration for the flat pattern view, False to use configuration As Is Const GENERATE_MISSING_FLAT_PATTERN_CONF As Boolean = True 'True to automatically create new SM-FLAT-PATTERN configuration if not exist, False to use configuration As Is + +Const FORCE_SINGLE_BODY As Boolean = False 'True to select single body for multi-body configurations (can be useful for the cut-list configurations) ~~~ ## Notes From cd1f7f3823b3404bc19e886cb50b18d265de316c Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 22 May 2024 15:42:15 +1000 Subject: [PATCH 13/20] Added get note format text macro --- .../hosting-user-controls/task-pane/index.md | 2 +- .../cut-lists/copy-custom-properties/index.md | 6 +-- .../notes/get-note-format-text/Macro.vba | 46 ++++++++++++++++++ .../notes/get-note-format-text/index.md | 15 ++++++ .../get-note-format-text/note-format-text.png | Bin 0 -> 34003 bytes .../get-note-format-text/note-formatting.png | Bin 0 -> 24822 bytes 6 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 solidworks-api/document/notes/get-note-format-text/Macro.vba create mode 100644 solidworks-api/document/notes/get-note-format-text/index.md create mode 100644 solidworks-api/document/notes/get-note-format-text/note-format-text.png create mode 100644 solidworks-api/document/notes/get-note-format-text/note-formatting.png diff --git a/labs/solidworks/swex/add-in/hosting-user-controls/task-pane/index.md b/labs/solidworks/swex/add-in/hosting-user-controls/task-pane/index.md index b1e559f9..e58433cc 100644 --- a/labs/solidworks/swex/add-in/hosting-user-controls/task-pane/index.md +++ b/labs/solidworks/swex/add-in/hosting-user-controls/task-pane/index.md @@ -33,7 +33,7 @@ public partial class MyComVisibleControlHost : UserControl } ~~~ -It is recommended to use COM-visible controls when hosting Windows Presentation Foundation (WCF) control in [System.Windows.Forms.Integration.ElementHost](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.integration.elementhost?view=netframework-4.8) as keypresses might not be handled properly in com-invisible controls. +It is recommended to use COM-visible controls when hosting Windows Presentation Foundation (WPF) control in [System.Windows.Forms.Integration.ElementHost](https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.integration.elementhost?view=netframework-4.8) as keypresses might not be handled properly in com-invisible controls. ## Defining Commands diff --git a/solidworks-api/document/cut-lists/copy-custom-properties/index.md b/solidworks-api/document/cut-lists/copy-custom-properties/index.md index a0552f8d..ec11dea3 100644 --- a/solidworks-api/document/cut-lists/copy-custom-properties/index.md +++ b/solidworks-api/document/cut-lists/copy-custom-properties/index.md @@ -11,8 +11,6 @@ This VBA macro copies the specified or all SOLIDWORKS custom properties from the Properties from the first found cut-list will be copied. -{% code-snippet { file-name: Macro.vba } %} - ## Configuration Macro can be configured by changing the constants @@ -67,4 +65,6 @@ Sub Init(Optional dummy As Variant = Empty) SRC_PROPERTIES = Empty TARG_PROPERTIES = Empty End Sub -~~~ \ No newline at end of file +~~~ + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file diff --git a/solidworks-api/document/notes/get-note-format-text/Macro.vba b/solidworks-api/document/notes/get-note-format-text/Macro.vba new file mode 100644 index 00000000..5941c69f --- /dev/null +++ b/solidworks-api/document/notes/get-note-format-text/Macro.vba @@ -0,0 +1,46 @@ +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + + Dim swModel As SldWorks.ModelDoc2 + + Set swModel = swApp.ActiveDoc + + If Not swModel Is Nothing Then + + Dim swSelMgr As SldWorks.SelectionMgr + + Set swSelMgr = swModel.SelectionManager + + Dim swNote As SldWorks.Note + + Set swNote = swSelMgr.GetSelectedObject6(1, -1) + + If Not swNote Is Nothing Then + Dim prpLinkedText As String + prpLinkedText = swNote.PropertyLinkedText + SetClipboard prpLinkedText + Debug.Print prpLinkedText + Else + Err.Raise vbError, "", "Select note" + End If + + Else + Err.Raise vbError, "", "Open the model" + End If + +End Sub + +Sub SetClipboard(text As String) + + Dim vText As Variant + vText = text + + Dim htmlFile As Object + Set htmlFile = CreateObject("htmlfile") + + htmlFile.parentWindow.clipboardData.SetData "text", vText + +End Sub \ No newline at end of file diff --git a/solidworks-api/document/notes/get-note-format-text/index.md b/solidworks-api/document/notes/get-note-format-text/index.md new file mode 100644 index 00000000..1dea4a0a --- /dev/null +++ b/solidworks-api/document/notes/get-note-format-text/index.md @@ -0,0 +1,15 @@ +--- +caption: Get Note Text Format +title: VBA macro to get formatting text form the selected SOLIDWORKS note +description: VBA macro puts the formatted note text (including the font parameters, size and color) from the selected note in the SOLIDWORKS document into the clipboard +image: note-format-text.png +--- +![Formatted note text](note-format-text.png){ width=800 } + +This VBA macro copies the value of formatted text from the selected note in SOLIDWORKS part, assembly or drawing and copies the value to the clipboard. + +Formatted note text includes font information (size, style, color), align, paragraph properties, etc. + +![Note formatting](note-formatting.png){ width=800 } + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file diff --git a/solidworks-api/document/notes/get-note-format-text/note-format-text.png b/solidworks-api/document/notes/get-note-format-text/note-format-text.png new file mode 100644 index 0000000000000000000000000000000000000000..3d18b0ed6688c8d837d98c3521c4151fe9e29c0f GIT binary patch literal 34003 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 literal 0 HcmV?d00001 diff --git a/solidworks-api/document/notes/get-note-format-text/note-formatting.png b/solidworks-api/document/notes/get-note-format-text/note-formatting.png new file mode 100644 index 0000000000000000000000000000000000000000..cf38fdefba3c2918031dfbbf15f876cd0a8e493c GIT binary patch literal 24822 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

CkZ3sgRrO2phXwQ%N80lh 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 Date: Wed, 24 Jul 2024 20:36:19 +1000 Subject: [PATCH 14/20] Added the macro to calculate total area of all faces --- .../geometry/get-total-face-area/Macro.vba | 63 +++++++++++++++++++ .../geometry/get-total-face-area/index.md | 11 ++++ 2 files changed, 74 insertions(+) create mode 100644 solidworks-api/geometry/get-total-face-area/Macro.vba create mode 100644 solidworks-api/geometry/get-total-face-area/index.md diff --git a/solidworks-api/geometry/get-total-face-area/Macro.vba b/solidworks-api/geometry/get-total-face-area/Macro.vba new file mode 100644 index 00000000..a4cc32af --- /dev/null +++ b/solidworks-api/geometry/get-total-face-area/Macro.vba @@ -0,0 +1,63 @@ +Const VISIBLE_ONLY As Boolean = True + +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + + Dim swPart As SldWorks.PartDoc + + Set swPart = swApp.ActiveDoc + + If Not swPart Is Nothing Then + + Dim vBodies As Variant + + vBodies = swPart.GetBodies2(swBodyType_e.swAllBodies, VISIBLE_ONLY) + + Dim totalArea As Double + + If Not IsEmpty(vBodies) Then + + Dim i As Integer + + For i = 0 To UBound(vBodies) + + Dim swBody As SldWorks.Body2 + + Set swBody = vBodies(i) + Dim vFaces As Variant + + vFaces = swBody.GetFaces + + If Not IsEmpty(vFaces) Then + Dim j As Integer + + For j = 0 To UBound(vFaces) + Dim swFace As SldWorks.Face2 + Set swFace = vFaces(j) + totalArea = totalArea + swFace.GetArea + Next + + End If + + Next + + Dim swUserUnit As SldWorks.UserUnit + Set swUserUnit = swPart.GetUserUnit(swUserUnitsType_e.swLengthUnit) + + Dim convFactor As Double + convFactor = swUserUnit.GetConversionFactor() ^ 2 + + MsgBox "Total Area: " & totalArea * convFactor & " " & swUserUnit.GetUnitsString(False) & "^2" + + Else + Err.Raise vbError, "", "No bodies" + End If + + Else + Err.Raise vbError, "", "Open part file" + End If + +End Sub \ No newline at end of file diff --git a/solidworks-api/geometry/get-total-face-area/index.md b/solidworks-api/geometry/get-total-face-area/index.md new file mode 100644 index 00000000..9bffa55f --- /dev/null +++ b/solidworks-api/geometry/get-total-face-area/index.md @@ -0,0 +1,11 @@ +--- +caption: Get Total Face Area +title: VBA macro to get total face area of the part file +description: VBA macro to calculate total face area of all faces from all bodies (including surface bodies) and display in the user units +--- + +This VBA macro finds the total area of all faces of all bodies (optionally only visible bodies) in the active part file. Macro will consider both solid and surface bodies. + +Results is displayed in the message box in the user units. + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file From 66878f00320947a4696483d6aea2e002e0dddcf3 Mon Sep 17 00:00:00 2001 From: Artem Date: Sun, 4 Aug 2024 22:14:06 +1000 Subject: [PATCH 15/20] Added save as previous version macro --- .../save-as-previous-version/Macro.vba | 111 ++++++++++++++++++ .../save-as-previous-version/index.md | 26 ++++ .../getting-started/stand-alone/index.md | 2 + 3 files changed, 139 insertions(+) create mode 100644 solidworks-api/document/save-as-previous-version/Macro.vba create mode 100644 solidworks-api/document/save-as-previous-version/index.md diff --git a/solidworks-api/document/save-as-previous-version/Macro.vba b/solidworks-api/document/save-as-previous-version/Macro.vba new file mode 100644 index 00000000..5cf74d19 --- /dev/null +++ b/solidworks-api/document/save-as-previous-version/Macro.vba @@ -0,0 +1,111 @@ +Const SW_VERSION As Integer = -1 'save into previous version + +Const PREFIX As String = "" +Const SUFFIX As String = "_PREV" + +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + + Dim swModel As SldWorks.ModelDoc2 + + Set swModel = swApp.ActiveDoc + + If Not swModel Is Nothing Then + + Dim swAdvancedSaveAsOpts As SldWorks.AdvancedSaveAsOptions + + Set swAdvancedSaveAsOpts = swModel.Extension.GetAdvancedSaveAsOptions(swSaveWithReferencesOptions_e.swSaveWithReferencesOptions_None) + + swAdvancedSaveAsOpts.SaveAsPreviousVersion = GetVersionNumber(SW_VERSION) + swAdvancedSaveAsOpts.SaveAllAsCopy = True + + Dim vIds As Variant + Dim vNames As Variant + Dim vPaths As Variant + + swAdvancedSaveAsOpts.GetItemsNameAndPath vIds, vNames, vPaths + + Dim i As Integer + + For i = 0 To UBound(vNames) + vNames(i) = ComposeName(CStr(vNames(i))) + Next + + swAdvancedSaveAsOpts.ModifyItemsNameAndPath vIds, vNames, vPaths + + Dim errs As Long + Dim warns As Long + + Dim path As String + path = swModel.GetPathName + + If path <> "" Then + + Dim dir As String + + dir = GetDirectory(path) + + Dim fileName As String + + fileName = ComposeName(GetFileName(path)) + + If False = swModel.Extension.SaveAs3(dir & fileName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, swAdvancedSaveAsOpts, errs, warns) Then + Err.Raise vbError, "", "Failed to save model: " & errs + End If + + Else + Err.Raise vbError, "", "Active model is never saved" + End If + + Else + Err.Raise vbError, "", "Open model" + End If + +End Sub + +Function GetVersionNumber(swVers As Integer) As Integer + + Dim revNmb As Integer + revNmb = CInt(Split(swApp.RevisionNumber, ".")(0)) + + Const SW_2022_REVISION As Integer = 30 + Const SW_2022_VERSION As Integer = 15000 + Const SW_VERSION_STEP As Integer = 1000 + + Dim versOffset As Integer + + versOffset = revNmb + swVers - SW_2022_REVISION + + If versOffset >= 0 Then + GetVersionNumber = SW_2022_VERSION + SW_VERSION_STEP * versOffset + Else + Err.Raise vbError, "", "Minimum supported version is SOLIDWORKS 2022" + End If + +End Function + +Function ComposeName(fileName As String) As String + + Dim ext As String + ext = Right(fileName, Len(".SLDXXX")) + + ComposeName = PREFIX & Left(fileName, Len(fileName) - Len(ext)) & SUFFIX & ext + +End Function + +Function GetFileName(path As String) As String + + Dim fileName As String + + fileName = Right(path, Len(path) - InStrRev(path, "\")) + + GetFileName = fileName + +End Function + +Function GetDirectory(path As String) + GetDirectory = Left(path, InStrRev(path, "\")) +End Function \ No newline at end of file diff --git a/solidworks-api/document/save-as-previous-version/index.md b/solidworks-api/document/save-as-previous-version/index.md new file mode 100644 index 00000000..eef4f807 --- /dev/null +++ b/solidworks-api/document/save-as-previous-version/index.md @@ -0,0 +1,26 @@ +--- +caption: Save As Previous Versions +title: VBA macro to save active file into the previous version of SOLIDWORKS +description: VBA macro to save the active SOLIDWORKS document into previous version with optional suffix and prefix +--- + +This VBA macro allows to save the active SOLIDWORKS document into previous versions of SOLIDWORKS. + +User can specify the version to save to via **SW_VERSION** constant in the macro. This number is an offset of the version relative to the current version of SOLIDWORKS. + +For example: + +* If **-1** is specified for **SOLIDWORKS 2024**, then the file will be saved as **SOLIDWORKS 2023** +* If **-2** is specified for **SOLIDWORKS 2024** then the file will be saved in **SOLIDWORKS 2022** +* If **-1** is specified for **SOLIDWORKS 2025**, then the file will be saved as **SOLIDWORKS 2024** + +User can specify suffix and prefix in the **PREFIX** and **SUFFIX** constants. Suffix will be applied to all references (in case assembly or drawing is saved) + +~~~ vb +Const SW_VERSION As Integer = -1 'save into previous version + +Const PREFIX As String = "" 'no prefix +Const SUFFIX As String = "_PREV" 'suffix is added to all references +~~~ + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file diff --git a/solidworks-api/getting-started/stand-alone/index.md b/solidworks-api/getting-started/stand-alone/index.md index d70c97a4..593fb76e 100644 --- a/solidworks-api/getting-started/stand-alone/index.md +++ b/solidworks-api/getting-started/stand-alone/index.md @@ -61,6 +61,8 @@ SOLIDWORKS 2019|27 SOLIDWORKS 2020|28 SOLIDWORKS 2021|29 SOLIDWORKS 2022|30 +SOLIDWORKS 2023|31 +SOLIDWORKS 2024|32 It is possible to get the revision number of SOLIDWORKS session via [ISldWorks::RevisionNumber](https://help.solidworks.com/2012/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isldworks~revisionnumber.html) method. The returned value is a string in the format: **25.1.0** where first number is a revision number. From 3241734b7dfd2e4149370c06652b4bf2b1084cc1 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 7 Aug 2024 16:27:29 +1000 Subject: [PATCH 16/20] Added export individual cut-lists macro --- .../CustomVariableValueProvider.vba | 23 ++ .../export-individual-cut-lists/Macro.vba | 305 ++++++++++++++++++ .../export-individual-cut-lists/index.md | 17 + 3 files changed, 345 insertions(+) create mode 100644 solidworks-api/import-export/export-individual-cut-lists/CustomVariableValueProvider.vba create mode 100644 solidworks-api/import-export/export-individual-cut-lists/Macro.vba create mode 100644 solidworks-api/import-export/export-individual-cut-lists/index.md diff --git a/solidworks-api/import-export/export-individual-cut-lists/CustomVariableValueProvider.vba b/solidworks-api/import-export/export-individual-cut-lists/CustomVariableValueProvider.vba new file mode 100644 index 00000000..6144fd03 --- /dev/null +++ b/solidworks-api/import-export/export-individual-cut-lists/CustomVariableValueProvider.vba @@ -0,0 +1,23 @@ +Option Explicit + +Implements IMacroCustomVariableValueProvider + +Function IMacroCustomVariableValueProvider_Provide(ByVal varName As String, ByVal args As Variant, ByVal context As Variant) As Variant + + Dim swCutList As SldWorks.Feature + Set swCutList = context + + Select Case varName + Case "cutListPrp": + Dim prpName As String + prpName = CStr(args(0)) + Dim swCustPrpsMgr As SldWorks.CustomPropertyManager + Set swCustPrpsMgr = swCutList.CustomPropertyManager + Dim prpVal As String + swCustPrpsMgr.Get5 prpName, False, "", prpVal, False + IMacroCustomVariableValueProvider_Provide = prpVal + Case Else + Err.Raise vbError, "", "Not supported variable: " & varName + End Select + +End Function \ No newline at end of file diff --git a/solidworks-api/import-export/export-individual-cut-lists/Macro.vba b/solidworks-api/import-export/export-individual-cut-lists/Macro.vba new file mode 100644 index 00000000..db1c0742 --- /dev/null +++ b/solidworks-api/import-export/export-individual-cut-lists/Macro.vba @@ -0,0 +1,305 @@ +'#Const TEST = True + +Dim swApp As SldWorks.SldWorks + +Sub main() + + Debug.Assert False + + Set swApp = Application.SldWorks + + Dim macroOper As IMacroOperation + Set macroOper = GetMacroOperation() + + Dim vArgs As Variant + vArgs = macroOper.Arguments + + Dim swModel As SldWorks.ModelDoc2 + Set swModel = macroOper.model + + If Not swModel Is Nothing Then + + If swModel.GetType() = swDocumentTypes_e.swDocPART Then + + Dim swPart As SldWorks.PartDoc + + Set swPart = swModel + + Dim vCutLists As Variant + vCutLists = GetCutLists(swPart) + + Dim i As Integer + Dim swBody As SldWorks.Body2 + + Dim customVarValProv As IMacroCustomVariableValueProvider + Set customVarValProv = New CustomVariableValueProvider + + Dim resFilePaths() As String + Dim inputBodies() As SldWorks.Body2 + + For i = 0 To UBound(vCutLists) + + Dim swCutList As SldWorks.Feature + Set swCutList = vCutLists(i) + + Dim j As Integer + + For j = 0 To UBound(vArgs) + + Dim macroArg As IMacroArgument + Set macroArg = vArgs(j) + + Dim fileName As String + fileName = macroArg.GetValue(customVarValProv, swCutList) + + Dim filePath As String + filePath = GetDirectory(swModel.GetPathName) & fileName + + If (Not resFilePaths) = -1 Then + ReDim resFilePaths(0) + ReDim inputBodies(0) + Else + ReDim Preserve resFilePaths(UBound(resFilePaths) + 1) + ReDim Preserve inputBodies(UBound(inputBodies) + 1) + End If + + Dim swBodyFolder As SldWorks.BodyFolder + Set swBodyFolder = swCutList.GetSpecificFeature2 + + If swBodyFolder.GetBodyCount() > 0 Then + Set swBody = swBodyFolder.GetBodies()(0) + Else + Set swBody = Nothing + End If + + resFilePaths(UBound(resFilePaths)) = filePath + Set inputBodies(UBound(inputBodies)) = swBody + + Next + + Next + + Dim vResFiles As Variant + vResFiles = macroOper.SetResultFiles(resFilePaths) + + For i = 0 To UBound(vResFiles) + + Dim resFile As IMacroOperationResultFile + Set resFile = vResFiles(i) + Set swBody = inputBodies(i) + + Dim ext As String + ext = GetExtension(resFile.path) + + TryExportBody swModel, swBody, resFile, macroOper + + Next + + Else + Err.Raise vbError, "", "Only parts are supported" + End If + + Else + Err.Raise vbError, "", "Open model" + End If + +End Sub + +Sub TryExportBody(model As SldWorks.ModelDoc2, body As SldWorks.Body2, resFile As IMacroOperationResultFile, macroOper As MacroOperation) + +try_: + On Error GoTo catch_ + + Dim swSelMgr As SldWorks.SelectionMgr + Set swSelMgr = model.SelectionManager + + swSelMgr.SuspendSelectionList + + Dim swBodies(0) As SldWorks.Body2 + Set swBodies(0) = body + + If swSelMgr.AddSelectionListObjects(swBodies, Nothing) = 1 Then + + Dim filePath As String + filePath = resFile.path + + Dim errs As Long + Dim warns As Long + Dim dir As String + + dir = GetDirectory(filePath) + + CreateDirectories dir + + If False <> model.Extension.SaveAs2(filePath, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, "", False, errs, warns) Then + resFile.Status = MacroOperationResultFileStatus_e_Succeeded + Else + Err.Raise vbError, "", "Failed to export '" & body.Name & "' to '" & filePath & "'. Error code: " & errs + End If + Else + Err.Raise vbError, "", "Failed to select " & body.Name + End If + + GoTo finally_ +catch_: + macroOper.ReportIssue Err.Description, MacroIssueType_e_Error + resFile.Status = MacroOperationResultFileStatus_e_Failed +finally_: + + swSelMgr.ResumeSelectionList2 False + +End Sub + +Sub TryExportFlatPattern(model As SldWorks.ModelDoc2, body As SldWorks.Body2, resFile As IMacroOperationResultFile, macroOper As MacroOperation) + +try_: + On Error GoTo catch_ + + Dim expData(0) As FlatPatternExportDataCom + Set expData(0) = New FlatPatternExportDataCom + + Set expData(0).body = body + expData(0).Options = FlatPatternOptionsCom_e.FlatPatternOptionsCom_e_BendLines + expData(0).OutFilePath = resFile.path + + Dim vRes As Variant + vRes = swCadPlus.FlatPatternExport.BatchExportFlatPatterns(model, expData) + + Dim res As FlatPatternExportResult + Set res = vRes(0) + + If False = res.Succeeded Then + Err.Raise vbError, "", res.Error + End If + + resFile.Status = MacroOperationResultFileStatus_e_Succeeded + + GoTo finally_ +catch_: + macroOper.ReportIssue Err.Description, MacroIssueType_e_Error + resFile.Status = MacroOperationResultFileStatus_e_Failed +finally_: + +End Sub + +Function GetMacroOperation(Optional dummy As Variant = Empty) As IMacroOperation + + Dim macroOper As IMacroOperation + + #If TEST Then + Dim swCadPlusFact As Object + Set swCadPlusFact = CreateObject("CadPlusFactory.Sw") + + Set swCadPlus = swCadPlusFact.Create(swApp, False) + + Dim args(1) As String + args(0) = "MFGs\STEP\{ path [FileNameWithoutExtension] }-{ cutListPrp [Description] }.step" + Set macroOper = swCadPlus.CreateMacroOperation(swApp.ActiveDoc, "", args) + #Else + Dim macroOprMgr As IMacroOperationManager + Set macroOprMgr = CreateObject("CadPlus.MacroOperationManager") + + Set macroOper = macroOprMgr.PopOperation(swApp) + #End If + + Set GetMacroOperation = macroOper + +End Function + +Function GetExtension(path As String) As String + GetExtension = Right(path, Len(path) - InStrRev(path, ".")) +End Function + +Function GetDirectory(path As String) + GetDirectory = Left(path, InStrRev(path, "\")) +End Function + +Sub CreateDirectories(path As String) + + Dim fso As Object + Set fso = CreateObject("Scripting.FileSystemObject") + + If fso.FolderExists(path) Then + Exit Sub + End If + + CreateDirectories fso.GetParentFolderName(path) + + fso.CreateFolder path + +End Sub + +Function GetCutLists(part As SldWorks.PartDoc) As Variant + + Dim swFeat As SldWorks.Feature + + Dim swCutLists() As SldWorks.Feature + + Set swFeat = part.FirstFeature + + While Not swFeat Is Nothing + + If swFeat.GetTypeName2 <> "HistoryFolder" Then + + ProcessFeature swFeat, swCutLists + + TraverseSubFeatures swFeat, swCutLists + + End If + + Set swFeat = swFeat.GetNextFeature + + Wend + + GetCutLists = swCutLists + +End Function + +Sub TraverseSubFeatures(parentFeat As SldWorks.Feature, cutLists() As SldWorks.Feature) + + Dim swChildFeat As SldWorks.Feature + Set swChildFeat = parentFeat.GetFirstSubFeature + + While Not swChildFeat Is Nothing + ProcessFeature swChildFeat, cutLists + Set swChildFeat = swChildFeat.GetNextSubFeature() + Wend + +End Sub + +Sub ProcessFeature(feat As SldWorks.Feature, cutLists() As SldWorks.Feature) + + If feat.GetTypeName2() = "SolidBodyFolder" Then + Dim swBodyFolder As SldWorks.BodyFolder + Set swBodyFolder = feat.GetSpecificFeature2 + swBodyFolder.UpdateCutList + ElseIf feat.GetTypeName2() = "CutListFolder" Then + + If Not Contains(cutLists, feat) Then + If (Not cutLists) = -1 Then + ReDim cutLists(0) + Else + ReDim Preserve cutLists(UBound(cutLists) + 1) + End If + + Set cutLists(UBound(cutLists)) = feat + End If + + End If + +End Sub + +Function Contains(arr As Variant, item As Object) As Boolean + + Dim i As Integer + + For i = 0 To UBound(arr) + If arr(i) Is item Then + Contains = True + Exit Function + End If + Next + + Contains = False + +End Function \ No newline at end of file diff --git a/solidworks-api/import-export/export-individual-cut-lists/index.md b/solidworks-api/import-export/export-individual-cut-lists/index.md new file mode 100644 index 00000000..826f0103 --- /dev/null +++ b/solidworks-api/import-export/export-individual-cut-lists/index.md @@ -0,0 +1,17 @@ +--- +caption: Export Individual Cut-Lists +title: Export individual bodies from cut-lists from SOLIDWORKS part file via Macro+ framework +description: VBA macro demonstrates how to use Macro+ to export individual bodies from cut-lists to foreign format from the active SOLIDWORKS part +image: +macro-plus: vba +--- + +This VBA macro is [Macro+](https://cadplus.xarial.com/macro-plus/) enabled macro that allows exporting unique bodies from all cut-lists in the active part file as individual files to foreign format (e.g. STEP, IGES, Parasolid etc.). + +This macro supports the custom variable **cutListPrp** with argument for the property name and it will be resolved to the corresponding cut-list custom proeprty value. + +{% code-snippet { file-name: Macro.vba } %} + +## CustomVariableValueProvider Class Module + +{% code-snippet { file-name: CustomVariableValueProvider.vba } %} \ No newline at end of file From 4156c7723f1870651b1b8b3f7edddaf168634832 Mon Sep 17 00:00:00 2001 From: Artem Date: Wed, 7 Aug 2024 21:13:28 +1000 Subject: [PATCH 17/20] Removed debug.assert --- .../import-export/export-individual-cut-lists/Macro.vba | 2 -- 1 file changed, 2 deletions(-) diff --git a/solidworks-api/import-export/export-individual-cut-lists/Macro.vba b/solidworks-api/import-export/export-individual-cut-lists/Macro.vba index db1c0742..48cba523 100644 --- a/solidworks-api/import-export/export-individual-cut-lists/Macro.vba +++ b/solidworks-api/import-export/export-individual-cut-lists/Macro.vba @@ -4,8 +4,6 @@ Dim swApp As SldWorks.SldWorks Sub main() - Debug.Assert False - Set swApp = Application.SldWorks Dim macroOper As IMacroOperation From 3ca3b6fc1e2a84514dfb1d472ab5a4f3318a60aa Mon Sep 17 00:00:00 2001 From: Artem Date: Mon, 16 Sep 2024 16:48:07 +1000 Subject: [PATCH 18/20] Added remove flat pattern configuration Updated macros to Macro+ --- .../macro.vba | 4 +- .../select-standard-ref-geometry/Macro.vba | 48 ++++++++--- .../select-standard-ref-geometry/index.md | 1 + .../Macro.vba | 82 +++++++++++++++++++ .../index.md | 13 +++ .../export-individual-bodies/export-body.svg | 1 + .../export-individual-bodies/index.md | 2 +- .../export-multi-formats/Macro.vba | 16 ++-- .../export-multi-formats/index.md | 1 + 9 files changed, 148 insertions(+), 20 deletions(-) create mode 100644 solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/Macro.vba create mode 100644 solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/index.md create mode 100644 solidworks-api/import-export/export-individual-bodies/export-body.svg diff --git a/solidworks-api/document/assembly/components/show-selected-assembly-component-window-folder/macro.vba b/solidworks-api/document/assembly/components/show-selected-assembly-component-window-folder/macro.vba index 2c1ad206..4c879b22 100644 --- a/solidworks-api/document/assembly/components/show-selected-assembly-component-window-folder/macro.vba +++ b/solidworks-api/document/assembly/components/show-selected-assembly-component-window-folder/macro.vba @@ -26,7 +26,7 @@ Sub main() End If If path <> "" Then - Shell "explorer.exe /select, " & """" & path & """" + Shell "explorer.exe /select, " & """" & path & """", vbMaximizedFocus Else MsgBox "Model is not saved" End If @@ -35,4 +35,4 @@ Sub main() MsgBox "Please open assembly document and select the component" End If -End Sub +End Sub \ No newline at end of file diff --git a/solidworks-api/document/selection/select-standard-ref-geometry/Macro.vba b/solidworks-api/document/selection/select-standard-ref-geometry/Macro.vba index 84449dfc..8f26768a 100644 --- a/solidworks-api/document/selection/select-standard-ref-geometry/Macro.vba +++ b/solidworks-api/document/selection/select-standard-ref-geometry/Macro.vba @@ -1,4 +1,5 @@ -#Const ARGS = False +#Const ARGS = True +#Const TEST = FALSE Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Const VK_CONTROL As Long = &H11 @@ -25,17 +26,18 @@ Sub main() Set swModel = swApp.ActiveDoc #If ARGS Then - Dim macroRunner As Object - Set macroRunner = CreateObject("CadPlus.MacroRunner.Sw") - Dim param As Object - Set param = macroRunner.PopParameter(swApp) + Dim macroOper As Object + Set macroOper = GetMacroOperation() Dim vArgs As Variant - vArgs = param.Get("Args") + vArgs = macroOper.Arguments + + Dim arg As Object + Set arg = vArgs(0) Dim planeName As String - planeName = CStr(vArgs(0)) + planeName = arg.GetValue() Select Case UCase(planeName) Case "ORIGIN" @@ -46,6 +48,8 @@ Sub main() REF_GEOM = swRefGeom_e.Front Case "RIGHT" REF_GEOM = swRefGeom_e.Right + Case Else + Err.Raise vbError, "", "Not supported argument" End Select #Else REF_GEOM = swRefGeom_e.Top @@ -69,10 +73,10 @@ Sub main() End If Else - MsgBox "Only assemblies and parts are supported" + Err.Raise vbError, "", "Only assemblies and parts are supported" End If Else - MsgBox "Please open part or assembly" + Err.Raise vbError, "", "Please open part or assembly" End If End Sub @@ -135,4 +139,28 @@ Sub SelectOrigin(origFeat As SldWorks.Feature, append As Boolean) swSkPoint.Select4 append, Nothing -End Sub \ No newline at end of file +End Sub + +Function GetMacroOperation(Optional dummy As Variant = Empty) As Object + + Dim macroOper As Object + + #If TEST Then + Dim swCadPlusFact As Object + Set swCadPlusFact = CreateObject("CadPlusFactory.Sw") + + Set swCadPlus = swCadPlusFact.Create(swApp, False) + + Dim ARGS(0) As String + ARGS(0) = "FRONT" + Set macroOper = swCadPlus.CreateMacroOperation(swApp.ActiveDoc, "", ARGS) + #Else + Dim macroOprMgr As Object + Set macroOprMgr = CreateObject("CadPlus.MacroOperationManager") + + Set macroOper = macroOprMgr.PopOperation(swApp) + #End If + + Set GetMacroOperation = macroOper + +End Function \ No newline at end of file diff --git a/solidworks-api/document/selection/select-standard-ref-geometry/index.md b/solidworks-api/document/selection/select-standard-ref-geometry/index.md index 53068eba..9e588426 100644 --- a/solidworks-api/document/selection/select-standard-ref-geometry/index.md +++ b/solidworks-api/document/selection/select-standard-ref-geometry/index.md @@ -6,6 +6,7 @@ description: Example demonstrates how to select standard plane (Top, Front or Ri image: plane.svg labels: [selection, plane, origin] group: Model +macro-plus: vba redirect-from: - /solidworks-api/document/selection/select-standard-plane/ --- diff --git a/solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/Macro.vba b/solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/Macro.vba new file mode 100644 index 00000000..68b59367 --- /dev/null +++ b/solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/Macro.vba @@ -0,0 +1,82 @@ +#Const MACRO_PLUS = True + +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + Dim swModel As SldWorks.ModelDoc2 + + Dim macroOper As Object + +#If MACRO_PLUS Then + + Dim operMgr As Object + Set operMgr = CreateObject("CadPlus.MacroOperationManager") + + Set macroOper = operMgr.PopOperation(swApp) + + Set swModel = macroOper.Model + +#Else + Set swModel = swApp.ActiveDoc +#End If + + Dim vConfNames As Variant + + vConfNames = swModel.GetConfigurationNames + + Dim hasSmConfs As Boolean + Dim deletedConfsList As String + + If Not IsEmpty(vConfNames) Then + + Dim i As Integer + + For i = 0 To UBound(vConfNames) + + Dim confName As String + confName = CStr(vConfNames(i)) + + Dim swConf As SldWorks.Configuration + Set swConf = swModel.GetConfigurationByName(confName) + + If swConf.Type = swConfigurationType_e.swConfiguration_SheetMetal Then + + hasSmConfs = True + + If False <> swModel.DeleteConfiguration2(swConf.Name) Then + + If deletedConfsList <> "" Then + deletedConfsList = deletedConfsList & vbLf + End If + + deletedConfsList = deletedConfsList & swConf.Name + + Else + #If MACRO_PLUS Then + macroOper.ReportIssue "Failed to delete configuration '" & confName & "'", 2 + macroOper.SetStatus 4 + #End If + End If + + End If + + Next + + End If + +#If MACRO_PLUS Then + If hasSmConfs Then + If deletedConfsList <> "" Then + macroOper.SetResult deletedConfsList + Else + macroOper.SetStatus 2 + End If + Else + macroOper.ReportIssue "No sheet metal configurations found", 1 + macroOper.SetStatus 4 + End If +#End If + +End Sub \ No newline at end of file diff --git a/solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/index.md b/solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/index.md new file mode 100644 index 00000000..9b3553ec --- /dev/null +++ b/solidworks-api/document/sheet-metal/remove-flat-pattern-configuration/index.md @@ -0,0 +1,13 @@ +--- +caption: Remove Flat Pattern Configurations +title: Remove flat pattern configurations (SM-FLAT-PATTERN) from SOLIDWORKS parts +description: VBA macro deletes derived SM-FLAT-PATTERN configurations of the sheet metal SOLIDWORKS parts using SOLIDWORKS API +image: +macro-plus: vba +--- + +This VBA macro deletes all **\SM-FLAT-PATTERN** configurations from SOLIDWORKS part file + +This configuration is created automatically when flat pattern drawing view is created for the sheet metal parts. In some cases this configuration may produce incorrect flat pattern geometry (e.g. missing the unbending). IN order to fix the issue it might be required to remove this configuration and recreate a drawing view. + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file diff --git a/solidworks-api/import-export/export-individual-bodies/export-body.svg b/solidworks-api/import-export/export-individual-bodies/export-body.svg new file mode 100644 index 00000000..0627dbff --- /dev/null +++ b/solidworks-api/import-export/export-individual-bodies/export-body.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/solidworks-api/import-export/export-individual-bodies/index.md b/solidworks-api/import-export/export-individual-bodies/index.md index a4294b9a..ed46cb2e 100644 --- a/solidworks-api/import-export/export-individual-bodies/index.md +++ b/solidworks-api/import-export/export-individual-bodies/index.md @@ -2,7 +2,7 @@ caption: Export Individual Bodies title: Export individual bodies and flat-patterns from SOLIDWORKS part file via Macro+ framework description: VBA macro demonstrates how to use Macro+ and CAD+ API to export individual bodies to foreign format and flat pattern (for sheet metal) from the active SOLIDWORKS part -image: +image: export-body.svg macro-plus: vba --- diff --git a/solidworks-api/import-export/export-multi-formats/Macro.vba b/solidworks-api/import-export/export-multi-formats/Macro.vba index 6e8a1198..75868f63 100644 --- a/solidworks-api/import-export/export-multi-formats/Macro.vba +++ b/solidworks-api/import-export/export-multi-formats/Macro.vba @@ -311,16 +311,18 @@ try_: On Error GoTo catch_ - Dim macroRunner As Object - Set macroRunner = CreateObject("CadPlus.MacroRunner.Sw") - - Dim param As Object - Set param = macroRunner.PopParameter(swApp) + Dim macroOprMgr As Object + Set macroOprMgr = CreateObject("CadPlus.MacroOperationManager") + + Set macroOper = macroOprMgr.PopOperation(swApp) Dim vArgs As Variant - vArgs = param.Get("Args") + vArgs = macroOper.Arguments + + Dim macroArg As Object + Set macroArg = vArgs(0) - outDir = CStr(vArgs(0)) + outDir = CStr(macroArg.GetValue()) TryGetOutDirFromArguments = True GoTo finally_ diff --git a/solidworks-api/import-export/export-multi-formats/index.md b/solidworks-api/import-export/export-multi-formats/index.md index 08111d33..0fca01e3 100644 --- a/solidworks-api/import-export/export-multi-formats/index.md +++ b/solidworks-api/import-export/export-multi-formats/index.md @@ -6,6 +6,7 @@ description: VBA macro to export file (or optionally all configuration or drawin image: batch-export.svg labels: [export] group: Import/Export +macro-plus: vba --- ![Save File dialog with the list of supported formats](file-save-dialog.png){ width=500 } From 5de6fefe9d226caaa93ed84dbeca379a858a5c7a Mon Sep 17 00:00:00 2001 From: Artem Date: Thu, 10 Oct 2024 11:20:29 +1100 Subject: [PATCH 19/20] Updated set bom qty macro to also optionally process configurations Added macro example to create a single body flat pattern view from the multi-body sheet metal part --- .../Macro.vba | 39 ++++++++++++++--- .../index.md | 6 +++ .../create-multi-body-flat-pattern/Macro.vba | 43 +++++++++++++++++++ .../create-multi-body-flat-pattern/index.md | 11 +++++ 4 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/Macro.vba create mode 100644 solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/index.md diff --git a/solidworks-api/document/set-bom-quantity-unit-of-measure-property/Macro.vba b/solidworks-api/document/set-bom-quantity-unit-of-measure-property/Macro.vba index 5e635b3e..e770446d 100644 --- a/solidworks-api/document/set-bom-quantity-unit-of-measure-property/Macro.vba +++ b/solidworks-api/document/set-bom-quantity-unit-of-measure-property/Macro.vba @@ -1,6 +1,8 @@ Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 +Const SET_CONFIGURATIONS As Boolean = False + Const BOM_QTY_PRP_NAME As String = "UNIT_OF_MEASURE" Const QTY_PRP_NAME As String = "Qty" @@ -16,13 +18,26 @@ Sub main() Set swCustPrpMgr = swModel.Extension.CustomPropertyManager("") - Dim bomQtyPrp As String - swCustPrpMgr.Get3 BOM_QTY_PRP_NAME, False, "", bomQtyPrp - - Debug.Print bomQtyPrp + SetQtyCustomProperty swCustPrpMgr - swCustPrpMgr.Add2 BOM_QTY_PRP_NAME, swCustomInfoType_e.swCustomInfoText, QTY_PRP_NAME - swCustPrpMgr.Set2 BOM_QTY_PRP_NAME, QTY_PRP_NAME + If SET_CONFIGURATIONS Then + + Dim vConfNames As Variant + vConfNames = swModel.GetConfigurationNames + + If Not IsEmpty(vConfNames) Then + + Dim i As Integer + + For i = 0 To UBound(vConfNames) + Dim swConfCustPrpMgr As SldWorks.CustomPropertyManager + Set swConfCustPrpMgr = swModel.Extension.CustomPropertyManager(CStr(vConfNames(i))) + SetQtyCustomProperty swConfCustPrpMgr + Next + + End If + + End If Else @@ -30,4 +45,16 @@ Sub main() End If +End Sub + +Sub SetQtyCustomProperty(custPrpMgr As SldWorks.CustomPropertyManager) + + Dim bomQtyPrp As String + custPrpMgr.Get3 BOM_QTY_PRP_NAME, False, "", bomQtyPrp + + Debug.Print bomQtyPrp + + custPrpMgr.Add2 BOM_QTY_PRP_NAME, swCustomInfoType_e.swCustomInfoText, QTY_PRP_NAME + custPrpMgr.Set2 BOM_QTY_PRP_NAME, QTY_PRP_NAME + End Sub \ No newline at end of file diff --git a/solidworks-api/document/set-bom-quantity-unit-of-measure-property/index.md b/solidworks-api/document/set-bom-quantity-unit-of-measure-property/index.md index f4ba890d..dad8940e 100644 --- a/solidworks-api/document/set-bom-quantity-unit-of-measure-property/index.md +++ b/solidworks-api/document/set-bom-quantity-unit-of-measure-property/index.md @@ -17,4 +17,10 @@ This option allows overwriting the quantity value of the component in the BOM ta In order to change this property it is required to set the hidden *UNIT_OF_MEASURE* custom property via [ICustomPropertyManager](https://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.icustompropertymanager.html) SOLIDWORKS API interface. +In order to set BOM quantity for all configurations set the **SET_CONFIGURATIONS** constant to **True** + +~~~ vb +Const SET_CONFIGURATIONS As Boolean = True +~~~ + {% code-snippet { file-name: Macro.vba } %} diff --git a/solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/Macro.vba b/solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/Macro.vba new file mode 100644 index 00000000..8d550d1e --- /dev/null +++ b/solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/Macro.vba @@ -0,0 +1,43 @@ +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + + Dim swModel As SldWorks.ModelDoc2 + + Set swModel = swApp.ActiveDoc + + If Not swModel Is Nothing Then + + Dim swSelMgr As SldWorks.SelectionMgr + + Set swSelMgr = swModel.SelectionManager + + Dim swBody As SldWorks.Body2 + + Set swBody = swSelMgr.GetSelectedObject6(1, -1) + + If Not swBody Is Nothing Then + + swBody.Select2 False, Nothing + + Dim templatePath As String + templatePath = swApp.GetDocumentTemplate(swDocumentTypes_e.swDocDRAWING, "", swDwgPaperSizes_e.swDwgPaperA4size, 0, 0) + + Dim swDraw As SldWorks.DrawingDoc + Set swDraw = swApp.NewDocument(templatePath, swDwgPaperSizes_e.swDwgPaperA4size, 0, 0) + + Dim swView As SldWorks.View + + Set swView = swDraw.CreateFlatPatternViewFromModelView3(swModel.GetPathName(), "", 0, 0, 0, False, False) + + Else + Err.Raise vbError, "", "Body is not selected" + End If + + Else + Err.Raise vbError, "", "Open part document" + End If + +End Sub diff --git a/solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/index.md b/solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/index.md new file mode 100644 index 00000000..25697b61 --- /dev/null +++ b/solidworks-api/document/sheet-metal/create-multi-body-flat-pattern/index.md @@ -0,0 +1,11 @@ +--- +caption: Create Multi-Body Flat Pattern View +title: VBA macro to create flat pattern drawing view form the multi-body sheet metal part +description: VBA macro demonstrates how to create flat pattern drawing view of the multi-body sheet metal part using SOLIDWORKS API +--- + +This VBA example demonstrates how to create flat pattern view of a selected body from the multi-body sheet metal part. + +When performing this operation manually from SOLIDWORKS, it is required to insert a drawing view of the full part, then select the single sheet metal body and set the view to **Flat Pattern**. In order to produce similar result from the API, different steps need to be performed. It is required to select the body from the visible source document before calling the [IDrawingDoc::CreateFlatPatternViewFromModelView3](https://help.solidworks.com/2013/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.idrawingdoc~createflatpatternviewfrommodelview3.html) API method. + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file From 4d3f17752263c6388e49992445045985544258d8 Mon Sep 17 00:00:00 2001 From: Artem Date: Mon, 4 Nov 2024 21:42:54 +1100 Subject: [PATCH 20/20] Added macro for aligning assembly configurations Added macro to extend planar surface temp geometry Added macro to find and display the preview of the collision between two bodies --- .../components/align-configurations/Macro.vba | 165 ++++++++++++++++++ .../components/align-configurations/index.md | 22 +++ .../modify-configurations.png | Bin 0 -> 44176 bytes .../geometry/body-interference/Macro.vba | 58 ++++++ .../body-collision-volume.png | Bin 0 -> 85109 bytes .../geometry/body-interference/index.md | 12 ++ .../geometry/extend-surface/Macro.vba | 55 ++++++ .../extended-planar-surface.png | Bin 0 -> 26781 bytes .../geometry/extend-surface/index.md | 15 ++ 9 files changed, 327 insertions(+) create mode 100644 solidworks-api/document/assembly/components/align-configurations/Macro.vba create mode 100644 solidworks-api/document/assembly/components/align-configurations/index.md create mode 100644 solidworks-api/document/assembly/components/align-configurations/modify-configurations.png create mode 100644 solidworks-api/geometry/body-interference/Macro.vba create mode 100644 solidworks-api/geometry/body-interference/body-collision-volume.png create mode 100644 solidworks-api/geometry/body-interference/index.md create mode 100644 solidworks-api/geometry/extend-surface/Macro.vba create mode 100644 solidworks-api/geometry/extend-surface/extended-planar-surface.png create mode 100644 solidworks-api/geometry/extend-surface/index.md diff --git a/solidworks-api/document/assembly/components/align-configurations/Macro.vba b/solidworks-api/document/assembly/components/align-configurations/Macro.vba new file mode 100644 index 00000000..998c6ac5 --- /dev/null +++ b/solidworks-api/document/assembly/components/align-configurations/Macro.vba @@ -0,0 +1,165 @@ +Const ROOT_CONFS_ONLY As Boolean = True + +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + + Dim swModel As SldWorks.ModelDoc2 + + Set swModel = swApp.ActiveDoc + + Dim swAssy As SldWorks.AssemblyDoc + + Set swAssy = swModel + + If Not swAssy Is Nothing Then + + Dim vComps As Variant + vComps = GetSelectedRootComponents(swAssy) + + If Not IsEmpty(vComps) Then + + Dim vConfs As Variant + vConfs = swModel.GetConfigurationNames + + Dim i As Integer + + For i = 0 To UBound(vConfs) + + Dim swConf As SldWorks.Configuration + Set swConf = swModel.GetConfigurationByName(CStr(vConfs(i))) + + If swConf.GetParent() Is Nothing Or Not ROOT_CONFS_ONLY Then + + Dim confParams() As String + Dim confParamVals() As String + + ReDim confParams(UBound(vComps)) + ReDim confParamVals(UBound(vComps)) + + Dim j As Integer + + For j = 0 To UBound(vComps) + + Dim swComp As SldWorks.Component2 + Set swComp = vComps(j) + + If HasConfiguration(swComp, swConf.Name) Then + + confParams(j) = "$CONFIGURATION@" & GetComponentNameForParameter(swComp) + confParamVals(j) = swConf.Name + + Else + Err.Raise vbError, "", swComp.Name2 & " does not contain configuration " & swConf.Name + End If + + Next + + swConf.SetParameters (confParams), (confParamVals) + + End If + + Next + + Else + Err.Raise vbError, "", "Select components to process" + End If + + Else + Err.Raise vbError, "", "Open assembly" + End If + +End Sub + +Function GetSelectedRootComponents(assm As SldWorks.AssemblyDoc) As Variant + + Dim swComps() As SldWorks.Component2 + + Dim swSelMgr As SldWorks.SelectionMgr + + Set swSelMgr = assm.SelectionManager + + Dim i As Integer + + For i = 1 To swSelMgr.GetSelectedObjectCount2(-1) + + Dim swComp As SldWorks.Component2 + Set swComp = swSelMgr.GetSelectedObjectsComponent4(i, -1) + + If Not swComp Is Nothing Then + + If swComp.GetParent() Is Nothing Then + + If (Not swComps) = -1 Then + ReDim swComps(0) + Else + ReDim Preserve swComps(UBound(swComps) + 1) + End If + + Set swComps(UBound(swComps)) = swComp + + Else + Err.Raise vbError, "", "Only top level components are supported" + End If + + End If + + Next + + If (Not swComps) = -1 Then + GetSelectedRootComponents = Empty + Else + GetSelectedRootComponents = swComps + End If + +End Function + +Function GetComponentNameForParameter(comp As SldWorks.Component2) As String + + Dim instId As Integer + Dim compName As String + compName = comp.Name2 + instId = CInt(Right(compName, Len(compName) - InStrRev(compName, "-"))) + compName = Left(compName, InStrRev(compName, "-") - 1) + + GetComponentNameForParameter = compName & "<" & instId & ">" + +End Function + +Function HasConfiguration(comp As SldWorks.Component2, confName As String) As Boolean + + Dim swRefModel As SldWorks.ModelDoc2 + Set swRefModel = comp.GetModelDoc2 + + Dim vConfs As Variant + + If Not swRefModel Is Nothing Then + vConfs = swRefModel.GetConfigurationNames + Else + vConfs = swApp.GetConfigurationNames(comp.GetPathName()) + End If + + HasConfiguration = Contains(vConfs, confName) + +End Function + +Function Contains(vArr As Variant, item As String) As Boolean + + Contains = False + + If Not IsEmpty(vArr) Then + + Dim i As Integer + + For i = 0 To UBound(vArr) + If LCase(CStr(vArr(i))) = LCase(item) Then + Contains = True + Exit Function + End If + Next + + End If + +End Function \ No newline at end of file diff --git a/solidworks-api/document/assembly/components/align-configurations/index.md b/solidworks-api/document/assembly/components/align-configurations/index.md new file mode 100644 index 00000000..0878a379 --- /dev/null +++ b/solidworks-api/document/assembly/components/align-configurations/index.md @@ -0,0 +1,22 @@ +--- +caption: Align Referenced Configurations +title: VBA macro to align referenced configuration of components to assembly configurations +description: VBA macro aligns referenced configuration of selected components in the SOLIDWORKS assembly to the corresponding assembly configurations +image: modify-configurations.png +--- + +This VBA macro aligns the referenced configurations of all selected components to the corresponding assembly configuration. For example if assembly has 3 configurations **A**, **B** and **C**, then referenced configurations for all selected components will be set to **A**, **B** and **C** in the respective configuration of the assembly. + +![Modify component configurations](modify-configurations.png){ width=600 } + +Macro processes all root configurations (or optionally all configurations) + +~~~ vb +Const ROOT_CONFS_ONLY As Boolean = False 'Process all assembly configurations +~~~ + +Multiple components can be selected and processed at the same time. Only top level-components are supported. For aligning configurations for sub-assembly, it is required to activate the sub-assembly in its own window. + +Components in the lightweight mode are supported. + +{% code-snippet { file-name: Macro.vba } %} \ No newline at end of file diff --git a/solidworks-api/document/assembly/components/align-configurations/modify-configurations.png b/solidworks-api/document/assembly/components/align-configurations/modify-configurations.png new file mode 100644 index 0000000000000000000000000000000000000000..06a2df3f0e83ecd60328c6242d9b9810fc571a0d GIT binary patch literal 44176 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 Oqj5_|wd|%P`u_lr*ioJU literal 0 HcmV?d00001 diff --git a/solidworks-api/geometry/body-interference/Macro.vba b/solidworks-api/geometry/body-interference/Macro.vba new file mode 100644 index 00000000..1f45288a --- /dev/null +++ b/solidworks-api/geometry/body-interference/Macro.vba @@ -0,0 +1,58 @@ +Dim swApp As SldWorks.SldWorks + +Sub main() + + Set swApp = Application.SldWorks + + Dim swModel As SldWorks.ModelDoc2 + + Set swModel = swApp.ActiveDoc + + Dim swSelMgr As SldWorks.SelectionMgr + + Set swSelMgr = swModel.SelectionManager + + Dim swBody1 As SldWorks.Body2 + Dim swBody2 As SldWorks.Body2 + + Set swBody1 = swSelMgr.GetSelectedObject6(1, -1) + Set swBody2 = swSelMgr.GetSelectedObject6(2, -1) + + If Not swBody1 Is Nothing And Not swBody2 Is Nothing Then + + Set swBody1 = swBody1.Copy2(False) + Set swBody2 = swBody2.Copy2(False) + + Dim swModeler As SldWorks.Modeler + + Set swModeler = swApp.GetModeler + + Dim vBody1Faces As Variant + Dim vBody2Faces As Variant + + Dim vIntersectBodies As Variant + + If False <> swModeler.CheckInterferenceBetweenTwoBodies(swBody1, swBody2, True, vBody1Faces, vBody2Faces, vIntersectBodies) Then + + Dim i As Integer + + For i = 0 To UBound(vIntersectBodies) + Dim swIntersectBody As SldWorks.Body2 + Set swIntersectBody = vIntersectBodies(i) + swIntersectBody.Display3 swModel, RGB(255, 255, 0), swTempBodySelectOptions_e.swTempBodySelectOptionNone + Next + + Stop + + For i = 0 To UBound(vIntersectBodies) + Set vIntersectBodies(i) = Nothing + Next + Else + Debug.Print "No Interferences" + End If + + Else + Err.Raise vbError, "", "Select 2 bodies" + End If + +End Sub \ No newline at end of file diff --git a/solidworks-api/geometry/body-interference/body-collision-volume.png b/solidworks-api/geometry/body-interference/body-collision-volume.png new file mode 100644 index 0000000000000000000000000000000000000000..ddecf78c121980e3e047deed41dc6c6896e2d0c2 GIT binary patch literal 85109 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 literal 0 HcmV?d00001 diff --git a/solidworks-api/geometry/extend-surface/index.md b/solidworks-api/geometry/extend-surface/index.md new file mode 100644 index 00000000..f055152f --- /dev/null +++ b/solidworks-api/geometry/extend-surface/index.md @@ -0,0 +1,15 @@ +--- +caption: Extend Surface +title: VBA macro to extend selected face using SOLIDWORKS API +description: VBA macro example which demonstrates how to extend the selected face with the specified distance and display the preview as temp body +image: extended-planar-surface.png +--- + +This VBA macro demonstrates how to create a temp body preview of the extended surface based on the face selected in the graphics area + +Macro will stop execution and display the preview. Preview is hidden when macro completes + +![Preview of the extended face](extended-planar-surface.png){ width=400 } + +{% code-snippet { file-name: Macro.vba } %} +