| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Auf dem Weg zur digitalen Auftragsmappe. (Phoenix/PDM,SOLIDWORKS,PDM System,PLM,PLM System), ein Anwenderbericht
|
Autor
|
Thema: dwg mit Conpass auslesen (907 mal gelesen)
|
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 30. Mrz. 2004 07:19 <-- editieren / zitieren --> Unities abgeben:
Hi, ich versuche die Benennung eines Standart Schriftfeldes von ACAD mit in das Bezeichnungsfeld von Compass zu übernehmen. Da es beim Import nicht funktioniert hat versuche ich es mit der Compass-Shell , wie könnte man das machen? MfG André Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003
|
erstellt am: 30. Mrz. 2004 07:42 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
|
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 30. Mrz. 2004 08:30 <-- editieren / zitieren --> Unities abgeben:
|
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003
|
erstellt am: 30. Mrz. 2004 08:39 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Hallo Andrè, eine Möglichkeit wäre, das ganze über den Compass-Jobserver zu machen, einem Zusatzmodul von Compass. Damit kann man solche Aufgaben automatisieren. Das Ding kostet zwar etwas, ist aber auf alle Fälle eine Überlegung wert. Es sei denn: Ich gehe davon aus, dass die "Benennung", die du erwähnt hast, ein Attribut aus dem Schriftfeld ist. Sollte es sich hingegen um einen Fixwert handeln, lässt sich dieser natürlich direkt über die Datenbank eintragen, Aufwand mehr oder weniger keiner. Ciao, WolfgangE ------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 30. Mrz. 2004 08:53 <-- editieren / zitieren --> Unities abgeben:
|
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003
|
erstellt am: 30. Mrz. 2004 09:15 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Nachdem du wirklich Daten aus der Zeichnung auslesen willst, wirst du nicht drum herum kommen, die Zeichnung zu öffnen. Grundätzlich hast du jetzt 3 Möglichkeiten, die Daten vom AutoCad ins Compass zu bekommen (man beachte, dass Compass auf Basis einer SQL-Tabelle arbeitet): 1) Über Compass selbst: - Du suchst dir die Zeichnung aus Compass raus und öffnest sie. - Beim Öffnen über Compass wird eine Schnittstelle geladen. Dadurch ist es möglich, dass Compass und AutoCad miteinander kommunizieren. - Diese Kommunikation macht es auch möglich, Befehl zurück an Compass zu senden, z.B. Shell-Befehle. - Zur Info: Shell-Befehle sind einfach Compass-Befehle, die über einen Dialog (dem Shell-Fenster) aufgerufen werden. Ansonsten sind ja alle Befehl in Menüs und damit im Programm selbst verpackt. - Wenn du dir also die Bennung aus AutoCad rausholst (z.B. per AutoLisp) kannst du dir den Shell-Befehl variabel zusammensetzen und an Compass übergeben. - Im Compass wird der Befehl ausgwertet und die Daten entsprechend umgeschrieben. - Der Compass-Jobserver ist dazu da, Abläufe zu automatisieren. Einfach ausgedrückt sieht das so aus, dass einfach die auszuführenden Befehle der Reihe nach eingegeben werden. - Dann werden die Compass-Dokumente, die bearbeitet werden sollen, per Drag&Drop auf den JobServer-Ordner gezogen. (Dieser Schritt kann auch per Datenbank-Skript beschleunigt werden) - Einmal gestaret, arbeitet der Jobserver die Befehle pro Dokument ab. - In deinem Fall würden die Befehle genau dem oben beschriebenen Ablauf entsprechen. 2) Über externe Programmierung (z.B. VisualBasic): - Das Prinzip bleibt dasselbe: Zeichnung öffnen und Bennung auslesen - Auch über VB kannst du auf SQL-Datenbanken zugreifen, allerdings musst du dich eben selbst darum kümmen, die sogenannten RecordSets zu öffnen und zu bearbeiten. - Wenn du die geöffnete Datei in der Datenbank findest (z.B. über die Nummer), kannst du auch hier problemlos die Änderung direkt in die Datenbank schreiben. - Bei externen Programmierungen kannst du als Quelle sowohl die Datenbank verwenden (und von dort auf die Datei schließen) oder über den Explorer arbeiten (und von dort zur Datenbank verbinden). - Da ich selbst kein VisualBasic programmiere, kann ich dir da keine konkreten Prozeduren zur Verfügung stellen. 3) Zusatz-Datenbank: Du hast nicht rein zufällig irgendwo eine Tabelle oder Liste (Excel oder sonst was), wo eine Zeichnungsnummer und die Bennung schon draufsteht? Dann könnte man nämlich die als Basis nehmen und ganz ohne AutoCad die Daten einfach in die Compass-Datenbank übernehmen. Anmerkungen: - Es ist tatsächlich möglich, Daten aus AutoCad-Dateien auszulesen, ohne die Datei zu öffnen, und zwar über ObjectARX. Für AutoCad bedeutet das konkret: per C++. Da kenne ich mich aber nicht aus, ich hab' das so gelesen. - Es ist im Grunde genommen egal, wie und womit du arbeitest, es geht nur darum, das beschriebene Prinzip umzusetzen: Wert aus AutoCad auslesen und in die Datenbank schreiben, in die richtige Tabelle, die richtige Spalte und Zeile. Und das ganze dann natürlich irgendwie automatisiert, indem z.B. Ordner im Explorer nach DWGs durchsucht werden. - Eine Anmerkung, die eher ungern gelesen wird, aber dennoch: Schon mal bei eurem Systemhaus nachgefragt?
Ich hoffe, damit einigermaßen geholfen zu haben. Ciao, WolfgangE ------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shadow01 Mitglied Anwendungsprogrammierer
Beiträge: 87 Registriert: 24.01.2004 COMPASS Liebhaber. COMPASS Entwickler. 1x Windows 2000 Server, SQL 2000 1x Windows 2003 Server, SQL 2005 RC2 25x Windows XP Clients, Office 2003, AIP9, SolidWorks2004/5 (aktueller SP), Cadenas COMPASS 2000 pro 5.4.x.x mit Webserver, ACM, Replicator, Jobserver
|
erstellt am: 30. Mrz. 2004 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Hallo André, früher (aus unerfindlichen Gründen jetzt nicht mehr) hat es auf der Partner Seite oder über den COMPASS Support einen Batch Emulator und zugehörige Skripte für Autocad gegeben. Wir haben gute Erfahrungen damit gemacht, deshalb habe ich das Ganze als Attachment an den Beitrag angehängt. Es sind Beispielskripte und eine Anleitung dabei. Als Zweites noch die AutoLISP Version zum Übertragen der Daten vom Schriftfeld nach Compass über Compass DDE Server. ------------------ Angenehmen Tag noch... ;-) Shadow01 [Diese Nachricht wurde von Shadow01 am 30. Mrz. 2004 editiert.] [Diese Nachricht wurde von Shadow01 am 30. Mrz. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 30. Mrz. 2004 12:03 <-- editieren / zitieren --> Unities abgeben:
|
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 05. Apr. 2004 12:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang ich habe mir das ganze nochmal angeschaut, und bin jetzt soweit das ich die Bennung per VBA-Skript auslese (Modul in ACad). Jetzt habe ich versucht dieses Skript über Compass per DDEEXEC zu starten, passiert aber nichts und es gibt auch keine Fehlermeldung (errlog.err). Der ads() Befehl wäre da hilfreich aber denn gibs ja nicht mehr; Wie könnte man das noch machen ? Und wie könnte man das Ergebnis welches ich in einer Systemvariablen speichere an Compass zurückgeben? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Shadow01 Mitglied Anwendungsprogrammierer
Beiträge: 87 Registriert: 24.01.2004 COMPASS Liebhaber. COMPASS Entwickler. 1x Windows 2000 Server, SQL 2000 1x Windows 2003 Server, SQL 2005 RC2 25x Windows XP Clients, Office 2003, AIP9, SolidWorks2004/5 (aktueller SP), Cadenas COMPASS 2000 pro 5.4.x.x mit Webserver, ACM, Replicator, Jobserver
|
erstellt am: 05. Apr. 2004 13:46 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Hallo André, schau Dir doch einfach die geposteten Lösungen an. Da ist eine Variante mit der DDEEXEC.EXE dabei die funktioniert so einwandfrei. Nebenbei erwähnt sind beides offizielle Lösungen von COMPASS systems inklusive der Source Codes und Beispieldateien. Da hat man dann doch erheblich weniger Aufwand die anzupassen oder davon zu lernen.... ------------------ Angenehmen Tag noch... ;-) Shadow01 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 05. Apr. 2004 13:54 <-- editieren / zitieren --> Unities abgeben:
|
Shadow01 Mitglied Anwendungsprogrammierer
Beiträge: 87 Registriert: 24.01.2004 COMPASS Liebhaber. COMPASS Entwickler. 1x Windows 2000 Server, SQL 2000 1x Windows 2003 Server, SQL 2005 RC2 25x Windows XP Clients, Office 2003, AIP9, SolidWorks2004/5 (aktueller SP), Cadenas COMPASS 2000 pro 5.4.x.x mit Webserver, ACM, Replicator, Jobserver
|
erstellt am: 05. Apr. 2004 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Hallo André, es ist richtig, dass der Haupteinsatzzeitpunkt dieser Routinen beim Import von Daten ist. Die Routinen sind aber bei unseren Kunden auch für den Abgleich von bereits in Compass vorhandenen Zeichnungen im Einsatz. Wenn man sich einen Button in Autocad anlegt und damit die Lisp Routine aufruft kann man jederzeit die Daten vom Schriftkopf (oder anderen Attributen) nach Compass übergeben. ------------------ Angenehmen Tag noch... ;-) Shadow01 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 05. Apr. 2004 15:19 <-- editieren / zitieren --> Unities abgeben:
|
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003
|
erstellt am: 06. Apr. 2004 07:40 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Hallo Andrè, welchen Status haben denn deine Dokumente in Compass? Bei der von mir angesprochenen Variante wird ja der Befehl ___ChangeField() von Compass verwendet. Dieser funktioniert aber nur, wenn das Dokument NICHT schreibgeschützt ist, was ja bei den Stati "Zu Prüfen", "Freigegeben" und "Veraltet" der Fall ist. In diesem Fall müsste man das ganze mit dem Befehl ___XDWCMD() erledigen, welcher direkt auf die Datenbank-Tabellen zugreift. Ciao, WolfgangE ------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 06. Apr. 2004 09:21 <-- editieren / zitieren --> Unities abgeben:
|
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003
|
erstellt am: 06. Apr. 2004 09:59 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Ist im obigen Link an sich beschrieben, aber egal: Du brauchts folgende Befehle: ;;************************************************************* (SETQ wec_filename (GETVAR "DWGNAME")) ;; #(AIMKEYFROMPATH) sucht Dokument-Aimkey aufgrund des FILE_NAME (SETQ wec_aimkey (AIMDdderequest "AIM.COMPASS5 DE" "SYSTEM" (STRCAT "#(AIMKEYFROMPATH " wec_filename ")"))) ;; Hier belegst du die Variable acad_value mit jenem Wert, der nach Compass übertragen wird (SETQ acad_value "CompassWert") ;; Über aimdDDEEXEC wird der Befehl ___ChangeField() an Compass übergeben. Es muss nur noch der Feldname ausgetauscht werden. SHORT_DESC entspricht in Compass dem Feld "Bezeichnung" (aimdDDEEXEC "AIM.COMPASS5.DDE" wec_aimkey (STRCAT "___ChangeField SHORT_DESC=" acad_value)) ;; Aktualisieren des Datensatzes (aimdDDEEXEC "AIM.COMPASS5.DDE" wec_aimkey "___DBUtils sync current") ;;************************************************************* Lies dir die Kommentare durch, dann solltest du keine Probleme mehr haben. Du musst nur noch den Fixtext "CompassWert" mit deiner Variable ersetzen.
Bei Fragen fragen. Ciao, WolfgangE
------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 07. Apr. 2004 09:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang wenn ich das Skript(test.txt) ausführe erhalte ich immer die Fehlermeldung: "Anwendungsfehler: aimddeexec: Need 3 stringarguments: ..." woran kann das liegen? und diese Fehlermeldung(s. Anhang)erhalte ich wen ich den aimkey direkt eingebe. bsp.: (aimdDDEEXEC "AIM.COMPASS5.DDE" "130358.25278" (STRCAT "___ChangeField SHORT_DESC=" acad_value)) liegt das am Compass? bis jetzt habe wir noch die C. Easy 5.3.3.2 MfG André [Diese Nachricht wurde von A.FIBU am 07. Apr. 2004 editiert.] [Diese Nachricht wurde von A.FIBU am 07. Apr. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003
|
erstellt am: 08. Apr. 2004 10:39 <-- editieren / zitieren --> Unities abgeben: Nur für A.FIBU
Hallo Andrè, wenn du die Befehle einzeln ausführst, funktioniert das ganze (außer dem (command "_-vbarun" "getattr"), das läuft bei mir nicht, kenne ich auch nicht, ist wohl was spezielleres). aimddeexec: Need 3 stringarguments: ..." Das verstehe ich nicht, hängt aber vielleicht mit dem zweiten Fehler zusammen. Ich nehme an, dass du dein Dokument sehr wohl über Compass gestartet hast. Allerdings hast du deine Routine im StartUp reingehängt, möglicherweise ist das dein Problem. Warum? Wenn du ein Dokument über Compass öffnest, wird zunächst AutoCad geöffnet. Erst, wenn das Programm vollständig läuft, wird die Schnittstelle Compass-AutoCad geladen. Das erkennt man auch daran, dass zunächst kurz Zeichnung1 geöffet ist und dann erst das eigentliche Dokument geöffnet wird. Möglicherweise wird die StartUp-Routine aber ausgeführt, BEVOR die Schnittstelle geladen wurde, deshalb die Meldung. Probier' mal, die Zeichnung zu öffnen, und dann die Funktion bzw. die Befehle einzeln aufzurufen. Ciao, WolfgangE ------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
A.FIBU Mitglied
Beiträge: 10 Registriert: 29.03.2004
|
erstellt am: 08. Apr. 2004 11:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Wolfgang hab ich auch gemerkt das es funktioniert wenn es nicht im StartUp hängt. Ich hab mir jetzt nen extra Button erstellt über den ich das Skript aufrufe. Funktioniert wunderbar. Ich hoffe das wir das irgendwann über den JobServer zum laufen kriegen. danke für deine Hilfe ps.: durch (command "_-vbarun" "getattr") wird mein VB-Skript aufgerufen. Falls Interesse an dem VB-Skript besteht einfach mailen MfG André [Diese Nachricht wurde von A.FIBU am 08. Apr. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |