Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API / virtuelle Komponenten umbenennen und speichern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
myCADtools , eine App
Autor Thema:  API / virtuelle Komponenten umbenennen und speichern (2748 mal gelesen)
riesi
Mitglied
CAD-Admin


Sehen Sie sich das Profil von riesi an!   Senden Sie eine Private Message an riesi  Schreiben Sie einen Gästebucheintrag für riesi

Beiträge: 1087
Registriert: 06.05.2002

SWX Premium 2023-Sp5

erstellt am: 12. Mai. 2011 09:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen!

Ich habe mir ein Makro geschrieben, mit dem ich innerhalb eine Baugruppe eine virtuelles Teil oder Baugruppe auswählen kann. Die virtuelle Komponente wird umbenannt, einmal geöffnet und Infos in die Properties geschrieben und soll dann anschließend extern unter diesem Namen gespeichert werden. In der API-Hilfe gibt es dazu ein Beispiel, dieses funktioniert jedoch nicht. In der API-Hilfe habe ich auch keine Hinweise auf SaveVirtualComponent gefunden. Ein Bug? Die virtuelle Komponente darf nicht geöffnet werden und von dort aus gespeichert werden, da die externen Referenzen sonst hinüber werden. Über diesen Weg ist es mir möglich virtuelle Komponenten unter einer neuen Dateinamen zu speichern, der automatisch vergeben werden kann.

Dann noch eine Frage, gibt es eine Möglichkeit, Infos in die Eigenschaften zu schreiben ohne das Teil oder Baugruppe öffnen zu müssen?

Danke, Klaus.

Code:
Sub znumgen_bg()
  Set swApp = CreateObject("SldWorks.Application")
  Set swModel = swApp.ActiveDoc
   
  ZEICHNUNGS_DIN_NR = neueWDNr()
  ' Wenn keine Zeichnung auf ist, dann Abbruch
  If swModel Is Nothing Then Exit Sub
   
  swxTyp = swModel.GetType
  Set swSelMgr = swModel.SelectionManager
  swSelCount = swSelMgr.GetSelectedObjectCount2(0)
   
  If swxTyp = swDocASSEMBLY And swSelCount = 1 Then
    Set swComp = swSelMgr.GetSelectedObject6(1, 0)
    If swComp.IsVirtual = True Then
      Debug.Print "eine virtuelle Komponente " & swComp.Name2 & " ausgewählt"
       
        Dim objFSO As Object
        Dim objFile As Object

        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFile = objFSO.GetFile(swModel.GetPathName)

        compName = objFSO.GetParentFolderName(objFile) & "\" & ZEICHNUNGS_DIN_NR

        If swComp.GetModelDoc2.GetType = swDocPART Then
            compName = compName & ".sldprt"
        Else
            compName = compName & ".sldasm"
        End If

        'Debug.Print "Name of saved virtual component: " & compName
        'swComp.SaveVirtualComponent compName
        swComp.Name2 = ZEICHNUNGS_DIN_NR
       
        Set swCompModel = swApp.ActivateDoc2(swComp.GetPathName, True, nRetval)
        Set swModel = swApp.ActiveDoc
        Set swConfigMgr = swModel.ConfigurationManager
        Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
       
        swAddInfo
       
        swApp.CloseDoc swModel.GetTitle
    End If
  End If
  
  '# Abräumen
  If Not swConfigMgr Is Nothing Then Set swConfigMgr = Nothing
  If Not swCustPropMgr Is Nothing Then Set swCustPropMgr = Nothing
  If Not swModel Is Nothing Then Set swModel = Nothing
  If Not swSelMgr Is Nothing Then Set swSelMgr = Nothing
  If Not swApp Is Nothing Then Set swApp = Nothing
  If Not objFSO Is Nothing Then Set objFSO = Nothing
  If Not objFile Is Nothing Then Set objFile = Nothing

End Sub



[Diese Nachricht wurde von riesi am 12. Mai. 2011 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bernd Knab
Mitglied



Sehen Sie sich das Profil von Bernd Knab an!   Senden Sie eine Private Message an Bernd Knab  Schreiben Sie einen Gästebucheintrag für Bernd Knab

Beiträge: 373
Registriert: 16.01.2001

SWX 2020 SP5.0

erstellt am: 12. Mai. 2011 17:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für riesi 10 Unities + Antwort hilfreich

Hallo Klaus,
über den Dokumentmanager kannst du die Dateieigenschaften lesen/schreiben ohne die Datei zu öffnen. Beim Schreiben darf die Datei jedoch nicht schreibgeschützt sein.
Hier ein Auszug aus einem Makro von mir zum Lesen (GetCustomProperty) - Schreiben mit Set...:

    Set swClassFact = CreateObject("SwDocumentMgr.SwDMClassFactory")
    Set swDocMgr = swClassFact.GetApplication(sLicenseKey)
    Set FSO = CreateObject("Scripting.FileSystemObject")

    Open sListendatei For Input As #1
    Do While Not EOF(1)  ' Schleife bis Dateiende.
      Line Input #1, DateinameL
      Params = Split(DateinameL, vbTab)  ' params(0) = Dateiname ; params(1) = Konfig ; params(2) = MatNr
       
        'attr = "Normal is 0" "Read Only is 1" "Hidden is 2" "System is 4"
        Set fil = FSO.GetFile(Params(0))
        Attribut = fil.Attributes
        fil.Attributes = 0      'Schreibschutz aufheben
        Set fil = Nothing
       
        If InStr(UCase(Params(0)), "SLDPRT") Then
            nDocType = swDmDocumentPart
        ElseIf InStr(UCase(Params(0)), "SLDASM") Then
            nDocType = swDmDocumentAssembly
        ElseIf InStr(UCase(Params(0)), "SLDDRW") Then
            nDocType = swDmDocumentDrawing
        Else
            Exit Do
        End If
               
        Set swDoc = swDocMgr.GetDocument(Params(0), nDocType, False, nRetVal)  ': Debug.Assert swDmDocumentOpenErrorNone = nRetVal
        If nRetVal = 0 Then
            Set swCfgMgr = swDoc.ConfigurationManager
            If (Not (swCfgMgr Is Nothing)) Then
                    Set swCfg = swCfgMgr.GetConfigurationByName(Params(1))
                    swCfg.SetCustomProperty "Materialnummer", Params(2)
                    'sCustPropStr = swCfg.GetCustomProperty("Materialnummer", swDmCustomInfoText)
                    swDoc.Save
                    swDoc.CloseDoc
            End If
        End If
       
        Set fil = FSO.GetFile(Params(0))
        fil.Attributes = 1      'Schreibschutz wieder setzen
        Set fil = Nothing

    Loop

Close #1

MsgBox "Materialnummern aus Liste eingetragen."

Gruß Bernd

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

riesi
Mitglied
CAD-Admin


Sehen Sie sich das Profil von riesi an!   Senden Sie eine Private Message an riesi  Schreiben Sie einen Gästebucheintrag für riesi

Beiträge: 1087
Registriert: 06.05.2002

SWX Premium 2023-Sp5

erstellt am: 13. Mai. 2011 07:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Morgen Bernd!

Vielen Dank für den Code. Ich habe gestern nochmal ein wenig gesucht und so wie ich das sehe, ist die gewünschte Funktion SaveVirtualComponent erst in der 2011'er Version implementiert worden, aber schon in der 2010'er als Beispiel aufgeführt. 

Damit erübrigt sich auch die Arbeit mit dem Documentmanager erstmal, da ich die virtuelle Komponente vorher nicht speichern kann.

Gruß, Klaus.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz