Macro voeg een CutList in

Hoi allemaal

Ik wil een VBA-macro maken in SolidWorks om het bijwerken van Cut Lists in mijn tekeningen te automatiseren.

Hier is mijn achtergrond:

  • Ik werk vaak vanuit al bestaande tekeningen met al mijn aanzichten.
  • Wanneer ik het genoemde onderdeel vervang door een ander onderdeel, wordt de Snedenlijst niet automatisch bijgewerkt.

Mijn doel met deze macro:

  1. Verwijder alle bestaande laslijsten in de tekening.
  2. Voeg een nieuwe Cut List in op basis van weergave 1 van de tekening.
  3. De nieuwe tabel zou idealiter een specifiek sjabloon moeten gebruiken en het ankerpunt in het sjabloon moeten respecteren.

Ik heb verschillende benaderingen geprobeerd met InsertWeldmentTable, InsertWeldmentCutList of InsertWeldmentTableAnnotation, maar ik loop altijd tegen 438 of 91 fouten aan, gerelateerd aan weergaveselectie of methoden die niet beschikbaar zijn in VBA.

Kan iemand me helpen een betrouwbare methode in VBA te vinden om:

  • Verwijder oude Cutlists
  • Voeg automatisch de nieuwe in op weergave 1 met het sjabloonankerpunt

Alvast bedankt voor jullie hulp en advies! :wink:

Hallo;

Waarom zou je deze update in de tekening proberen te doen als Solidworks het automatisch in de kamer doet?
image
Te koppelen aan " automatische update van de lijst met gelaste onderdelen" in de instellingen van de Template-eigenschap van uw tekeningen:


=> Dit zou je een macro...

In een kamer, om de 2 lijnen te controleren die door @Maclane worden aangegeven via macro:

Option Explicit

Public swApp As SldWorks.SldWorks
Public swModel As SldWorks.ModelDoc2
Public swPart As SldWorks.PartDoc
Public swBodyFolder As SldWorks.BodyFolder
Public swFeat As SldWorks.Feature

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel.GetType() = swDocumentTypes_e.swDocASSEMBLY Or swModel.GetType() = swDocumentTypes_e.swDocDRAWING Then
Debug.Print "Ne fonctionne que sur une pièce"
Set swModel = Nothing
Set swApp = Nothing
Exit Sub
End If

Set swPart = swModel

Set swFeat = swPart.FirstFeature

While Not swFeat Is Nothing
'Debug.Print ""
'Debug.Print "Nom de l'élément : "; swFeat.Name
'Debug.Print "Type de l'élément : "; swFeat.GetTypeName2
If swFeat.GetTypeName2 = "SolidBodyFolder" Then
    Set swBodyFolder = swFeat.GetSpecificFeature2
    swBodyFolder.SetAutomaticCutList (True)
    swBodyFolder.SetAutomaticUpdate (True)
    swBodyFolder.UpdateCutList
    swBodyFolder.GetAutomaticUpdate
End If
Set swFeat = swFeat.GetNextFeature()
Wend

Set swBodyFolder = Nothing
Set swFeat = Nothing
Set swPart = Nothing
Set swModel = Nothing
Set swApp = Nothing
End Sub

1 like

Hallo;

Anders biedt de Solidworks API Help dit type macro om de cutlist aan de tekening toe te voegen:

'----------------------------------------------------------------------------
' Preconditions:
' 1. Verify that the specified cut list template exists.
' 2. Open public_documents\samples utorial\weldments\weldment_box2.sldprt.
' 3. Click File > Make Drawing from Part > OK > drag a view onto
'    the sheet > OK.
' 4. Expand the drawing view in the FeatureManager design tree.
' 5. Right-click weldment_box2 and select Open Part(weldment_box2.sldprt).
' 6. Right-click the Cut list folder and click Update Automatically.
' 7. Click Window > weldment_box2 - Sheet1*.
'
' Postconditions:
' 1. Inserts a weldment cut list table.
' 2. Examine the FeatureManager design tree and graphics area.
'
' NOTE: Because this part is used elsewhere, do not save changes.
'----------------------------------------------------------------------------
Option Explicit
Const WeldmentTableTemplate As String = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\english\cut list.sldwldtbt"

Sub Main()
  Dim swapp As SldWorks.SldWorks
  Dim oDrawing As DrawingDoc
  Dim swView As View
  Dim WMTable As SldWorks.WeldmentCutListAnnotation

  Set swapp = Application.SldWorks
  Set oDrawing = swapp.ActiveDoc
  Set swView = oDrawing.GetFirstView
  Set swView = swView.GetNextView

  ' Insert the weldment cut list table
  Set WMTable = swView.InsertWeldmentTable(False, 0.1996662889191, 0.1013905859662, swBOMConfigurationAnchor_TopLeft, "Default<As Welded>", WeldmentTableTemplate)
 

  End Sub
1 like