Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Von der Zeichnung auf das referenzierte Modell zugreifen

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
  
On-Demand-Webinare zu SolidCAM (SolidCAM)
Autor Thema:  API: Von der Zeichnung auf das referenzierte Modell zugreifen (458 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: 01. Apr. 2005 12:24    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

Ich arbeite an meiner Version des Schriftfeld-Programmes, das, glaub ich, ursprünglich von Stefan Berlitz stammt, und von verschiedenen Anwendern schon als Weiterentwicklung gepostet wurde.

Zweck dieses Programms ist, über ein Formular benutzerdefinierte Eigenschaften einzutragen, die dann im Schriftfeld einer Zeichnung angezeigt werden.

Ich möchte nun grundsätzlich keine benutzerdefinierte Eigenschaften an die Zeichnung hängen, sonder grundsätzlich ans Teil oder die Baugruppe. Dazu dachte ich wie folgt vorzugehen:
1. Prüfen, ob das aktive Dokument eine Zeichnung ist
2. Wenn ja, die erste Ansicht aktivieren
3. Den Namen des referenzierten Dokuments auslesen
4. Das Dokument mit diesem Namen aktivieren

Zwei Probleme:
Wenn in der Zeichnung eine Ansicht aktiviert ist, findet das Programm das dazugehörige Part und versucht, diese zu öffnen. Wenn das Part schon geöffnet ist, kommt eine Meldung, ob das Teil noch einmal schreibgeschützt geöffnet werden soll. Wie fang ich das ab?

Schlimmer:
Wenn noch keine Ansicht aktiv ist, krieg ich das in der Zeichnung referenzierte Teil nicht gegriffen.
z_name in meinem Code liefert ulkigerweise nicht den Name der Ansicht zurück, sondern den Blattnamen. Das versteh ich nicht, und es widerspricht IMHOIn my humble oppinion (Meiner Meinung nach) auch der Online-Hilfe.
Vielleicht gibt es ja auch ganz andere Möglichkeiten, das referenzierte Modell zu öffnen/aktivieren, ich bin für jeden Tipp dankbar.

Ich muss noch dazu sagen, ich bin noch ziemlicher Fahrschüler in VB/VBA.

Vielen Dank,
Piet

Und hier kommt der Code:


    Sub barSfAuslesenZng()
        'hier scheint das Programm anzufangen ...

        Dim Drawing As Object
        Dim retval As Object
        Dim Konfig As String
        Dim ModName As String
        Dim visib As Boolean
        Dim View As Object
        Dim bool As Boolean

        wkbObj = GetObject(ExeDirectory & "\" & "Schriftfeld.xls")
        swApp = CreateObject("SldWorks.Application")
        Dim myModel As SldWorks.ModelDoc2
        myModel = swApp.ActiveDoc
        If myModel Is Nothing Then
            keinSWXDok()
            Exit Sub
        End If
        Dim RefModelName As String
        Dim z_name As String
        ' Die benutzerdefinierten Eigenschaften sollen nicht an der Zeichnung hängen,
        ' sondern am Teil oder der Baugruppe.
        ' Hier wird geprüft, ob das aktive Dokument eine Zeichnung ist (GetType=3)
        ' Wenn myModel eine Zeichnung ist, wird das von der Zeichnung referenzierte
        ' Dokument aktiviert
        If myModel.GetType = 3 Then
            retval = myModel.GetFirstView()
            ' z_name liefert den ersten Blattnamen, nicht den Ansichtsnamen ???
            z_name = retval.name
            bool = myModel.activateView(z_name)
            View = myModel.ActiveDrawingView()
            ' Name des referenzierten Modells holen
            RefModelName = View.GetReferencedModelName
            ' Referenziertes Modell zum aktiven Dokument machen
            myModel = swApp.OpenDoc(RefModelName, swDocPART Or swDocASSEMBLY)
        End If


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

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


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

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 01. Apr. 2005 13:10    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

Hallo Piet.
zu Problem 1:
Ist eigentlich logisch. Wenn Du die Zeichnung öffnest, wird in der Regel (aber keine Regel ohne Ausnahme!!!) auch das Modell göffnet. Also kannst Du es mit

myModel = swApp.OpenDoc(RefModelName, swDocPART Or swDocASSEMBLY)

nicht nochmal laden. Du müsstest eher mit

retval = SldWorks.ActivateDoc2 ( name, silent, &errors )

einen Verweis auf Dein Model setzen. Vielleicht gibt es auch eine andere Methode.

zu Problem 2

[b]z_name in meinem Code liefert ulkigerweise nicht den Name der Ansicht zurück, sondern den Blattnamen[b/]

Der Clou dabei ist, dass das Blatt selber auch eine View ist!! Mit

Set swView = swDrawing.GetFirstView ' View = Blatt
Set swView = swView.GetNextView    ' View = erste Ansicht

hast Du dann die erste Ansicht als Objekt.

------------------
Gruss
Andreas
A+E Müller AG

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

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


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

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 01. Apr. 2005 13: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 Nur für Piet 10 Unities + Antwort hilfreich

... ist mir eben noch aufgefallen:

In meiner Fahrschule hat man mir beigebracht, dass Objekte (Verweise) mit "SET" gemacht werden:

Set swApp = CreateObject("SldWorks.Application")

Die scheinen in obigen Code zu fehlen. Ist das eine spezielle Technik???

------------------
Gruss
Andreas
A+E Müller AG

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: 01. Apr. 2005 13:35    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

Zitat:
Original erstellt von Andreas Müller:
Der Clou dabei ist, dass das Blatt selber auch eine View ist!! Mit

Set swView = swDrawing.GetFirstView ' View = Blatt
Set swView = swView.GetNextView     ' View = erste Ansicht

hast Du dann die erste Ansicht als Objekt.


Mensch, darauf muss man erstmal kommen! Das hätte ich ja nie gefunden. Vielen Dank, Andreas, für die Tipps, jetzt funktioniert es.

Bei VBnet ist das "Set" anscheinend abgeschafft. Wenn ich es eintippe und mit dem Cursor eine Zeile runtergehe, verschwindet es. Funktioniert aber auch ohne.

Piet

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

Andreas Müller
Mitglied
Masch. Ing. HTL / Betriebsing. STV


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

Beiträge: 1151
Registriert: 11.04.2001

erstellt am: 01. Apr. 2005 14:11    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

Ach so: VBnet! Ich arbeite halt noch altmodisch mit VB6 resp. VBA  .

------------------
Gruss
Andreas
A+E Müller AG

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

HarryD
Mitglied
Dipl.-Ing. Maschinenbau


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

Beiträge: 597
Registriert: 01.12.2000

Dell Precision T3620, i7-7700; 3,6GHz; 16.0GB RAM; NX12, TC10.1.7.1; NX-Nastran 12, NX-Motion,
"Denn Gott hat die Menschen so sehr geliebt, dass er seinen einzigen Sohn für sie hergab. Jeder, der an ihn glaubt, wird nicht verlorengehen, sondern das ewige Leben haben." Die Bibel

erstellt am: 03. Apr. 2005 20:34    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

Hallo Piet,
noch ein 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

------------------
Gruß
Harry 

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. Apr. 2005 09:56    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 Harry,

vielen Dank, das ist schon mal ein interessanter Hinweis. In der API-Hilfe von meiner antiken Version finde ich leider nichts in der Richtung, weder unter Sheet:, noch View:.
Aber da ich die Hoffnung auf eine aktuelle Version noch nicht aufgegeben habe, notier ich mir den Tipp schon mal für später.

Vielen Dank,
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