Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: In einer Zeichnung referenziertes Modell aktivieren

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
  
SPS 2026., eine Veranstaltung am 24.11.2026
Autor Thema:  API: In einer Zeichnung referenziertes Modell aktivieren (1603 mal gelesen)
Piet
Mitglied
Konstruktionsleiter & Konstrukteur


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

Beiträge: 661
Registriert: 20.11.2001

SWx 2021

erstellt am: 04. Aug. 2005 12:17    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


Rev_speichern.zip

 
Wir haben kein PDM, daher müssen wir die Dokumentation verschiedener Versionstände von Hand machen. Unsere aktuellen Dateien haben im Dateinamen keinen Versionsindex.
Wenn Teile freigegeben werden, wird eine PDF von der Zeichnung gespeichert, bei der der Versionsindex im Dateinamen enthalten ist. Zusätzlich wird von dem Teil eine Kopie mit Index erstellt.

Beispiel:
Aktuell: 4711_Grundplatte.sldprt und 4711_Grundplatte.slddrw.
Zur Dokumentation erstellt: 4711_Grundplatte_R01.pdf (von der Zeichnung) und 4711_Grundplatte_R01.sldprt.

Um diese Sicherungen zu erleichtern, schreibe ich gerade ein Makro.
Beim Start wird eine Form geöffnet, man gibt den Versionsindex ein und das Makro hängt diesen an den ursprünglichen Dateinamen an und und speichert die Kopien.
Bei PDF funktioniert das.
Wenn ich das Makro in einer Zeichnung starte, will ich aber eine Kopie des referenzierten Teils anlegen und nicht von der Zeichnung. Ich muss daher das referenzierte Modell aktivieren, und genau das klappt nicht.

Der Name des referenzierten Teils wird korrekt ausgelesen, aber es gelingt mir nicht, das so ermittelte Teil zu aktivieren. Soviel ich weiß, müsste das Teil im Hintergrund geöffnet sein, so dass ich es nicht noch mal öffnen kann, daher müsste doch ActivateDoc der richtige Befehl sein, oder?
Alternativ hatte ich es mal mit OpenDoc6 probiert, aber damit wollte das Makro gar nicht laufen.

Die Oberfläche der Form ist nur sehr provisorisch, nicht erschrecken.

Piet


Sub Partkopie()
    Dim RefModelName As String
    Dim retval As Object
    Dim nretval As Object
    Dim draw As DrawingDoc
    Dim view As Object
    Dim bRetval As Boolean
    Dim nErrors As Long
    Dim nWarnings As Long
    Dim reference As Object
   
    ' Hier wird geprüft, ob das aktive Dokument eine Zeichnung ist (GetType=3)
    ' Wenn Model eine Zeichnung ist, wird das von der Zeichnung referenzierte
    ' Dokument aktiviert
    If Model.GetType = 3 Then
        Set retval = Model.GetFirstView
        Set view = retval.GetNextView()
       
        'Hinweis: Die Schriftfeldvariablen werden zwar meistens von der ersten Ansicht
        'gesteuert, aber nicht immer! Es gibt die möglichkeit abzufragen, welche Ansicht
        'der "Bestimmer" ist, Stichwort in der Hilfe: Sheet::CustomPropertyView
        If view Is Nothing Then
            Exit Sub
        End If
        ' Name des referenzierten Modells holen
        RefModelName = view.GetReferencedModelName
        RefModelName = Left(RefModelName, Len(RefModelName) - 7)
        RefModelName = RefModelName + Anhang
        RefModelName = RefModelName + ".sldprt"
        ' Referenziertes Modell zum aktiven Dokument machen
        Set reference = swApp.ActivateDoc2(RefModelName, True, nErrors)
        Set Model = swApp.ActiveDoc
        Call MsgBox(Model.GetTitle)                                        ' nur zum Testen
    End If
   
    bRetval = Model.SaveAs4(RefModelName, 0, 2, nErrors, nWarnings)        ' Part speichern

    If bRetval = False Then
        bRetval = swApp.SendMsgToUser2("Problems saving sldprt-file.", 0, 0)
    End If
End Sub

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

gismo
Mitglied
DriveWorks Support


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

Beiträge: 1047
Registriert: 05.03.2001

erstellt am: 04. Aug. 2005 12:59    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 Piet 10 Unities + Antwort hilfreich


ProjectSave-Forum.zip

 
HI Piet,
Ich hab mir Deinen Code nicht komplett Durchgelesen, aber ich hab ein Makro, das macht etwas ähnliches:
Bei Aufruf kann man die aktuelle Zeichnung als DXF oder DWG und das Referenzierte Modell im Neutralformat speichern. Wir benutzen das Makro,  wenn ein Kunde von einem Projekt CAD Daten will. Da Sparen wir uns etwas Klickarbeit. Ich denke Du kannst es sicher auf Deine Bedürfnisse anpassen, bzw das rauslesen, was Du benötigst 
HTH

------------------
Viele Grüße aus dem Schwarzwald
gismo
Meine bescheidene Website Klamm? Was ist Klamm?

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

Lutz Federbusch
Ehrenmitglied V.I.P. h.c.
Dipl.-Ing. Maschinenbau



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

Beiträge: 3094
Registriert: 03.12.2001

alle SW seit 97+
AutoCAD2016-2022
ERP ProAlpha + CA-Link
Intel Core i7-7820K 32GB
Win10x64 Quadro K5000
SpacePilot

erstellt am: 04. Aug. 2005 13:39    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 Piet 10 Unities + Antwort hilfreich

Erst das Dokument mit OpenDoc öffnen, dann aktivieren...

------------------
Lutz Federbusch
Mein Gästebuch

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

Piet
Mitglied
Konstruktionsleiter & Konstrukteur


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

Beiträge: 661
Registriert: 20.11.2001

SWx 2021

erstellt am: 04. Aug. 2005 16:29    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

Gefunden!

Es war ein Fehler im Ablauf. Ich habe erst den Namen des referenzierten Modells geholt, diesen geändert, und dann versucht, das Teil mit dem neuen Namen (das es ja noch nicht gibt) zu aktivieren.
Die Umbenennung steht kommt jetzt nach der Aktivierung, damit klappt es.

Vielen Dank, vor allem an Gismo. Bei deinem Makro kann ich mir noch ein paar Tipps holen.

Piet

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