| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Produktinformation einer geladenen DWG bestimmen (1867 / mal gelesen)
|
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 18. Jan. 2016 17:35 <-- editieren / zitieren --> Unities abgeben:
Hallo allerseits, ich suche eine Möglichkeit, vorzugsweise mittels LISP, die Produktinformation einer bereits geöffneten DWG zu ermitteln. Es geht mir dabei nicht um die DWG-Version, sondern darum festzustellen, mit welchem (AutoCAD-)Produkt die Datei zuletzt gespeichert wurde. AutoCAD kennt diese Daten anscheinend, denn es meldet sich bereits beim Öffnen einer DWG mit einem Dialog, wenn die DWG nicht mit einem Autodesk-Produkt bzw. nicht als TrustedDWG erstellt wurde. Wenn man eine DWG als Text mit Notepad öffnet, findet man sogar 2 einigermaßen lesbare Bereiche die jeweils mit "A p p I n f o D a t a L i s t" beginnen. Danach folgen auch Versionsangaben zur letzten verwendeten AutoCAD-Version: i n s t a l l _ i d _ s t r i n g = \ " A C A D - 7 0 0 1 : 4 0 7 \ ". Das Beispiel müsste auf pures AutoCAD 2009 (R17.2 ohne vertikalen Aufsatz) in deutsch verweisen. Ich bin mir aber nicht sicher, ob mein Rückschluß auf das zuletzt verwendete Produkt an dieser Stelle korrekt ist. Ich habe auch schon versucht, mittels Lisp und READ-Funktionen eine DWG als Text einzulesen. Leider erfolglos, da das Einlesen der DWG bereits vorher beendet wird, weil offenbar ein binärer Code als ein Datei-Ende Zeichen interpretiert wird. Folgender Hintergrund (für Neugierige): Wir arbeiten in der Firma mit ACAD, MEP und Architecture. Nun ist es problematisch, wenn man eine pure AutoCAD-DWG direkt in ARCH bzw. MEP öffnet. Z.Bsp: Unterschiedlich definierte DWGUNITS oder INSUNITS; Fehlende Stildefinitionen; usw.... Diese DWG sollte besser als Block eingefügt oder mittels XREF referenziert werden. Wir möchten unsere Anwender in diesem Fall mit einem Hinweis (ALERT) warnen. Jeder Hinweis oder Lösungsansatz ist gern gesehen. Programmierkenntnisse mit LISP sind vorhanden. Gruß, Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 18. Jan. 2016 18:55 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
Ok, wir reden also von der Info die von DWGCHECK ausgewertet wird. Endlich mal ne interessant Frage Eine direkt abrufbare Variable(bei geöffneter DWG) kenne ich nicht, im ganzen Bereich der "direkt" per Lisp zugänglich ist, da wäre mir sowas ebenfalls nicht bekannt (will aber nichts heißen, ist ja recht speziell die Sache und man kann nicht alles wissen). (im übrigen hast du mir deinem READ... mehr Infor bekommen wie ich, zumindest finde ich den Beschriebenen Part nicht einfach so - habe aber auch nicht viel Zeit vergeudet, mehr als Texteditor und Bearbeiten/Suchen habe ich nicht genutzt. 1-2 sinnvolle Infos kann ich dennoch geben: a) Die Meldung lautet "wurde mit einer Software gespeichert.." sie lautet NICHT "zuletzt mit einer" (oder gibt es beide Varianten?) b) Auf die Meldung/Info kann man sich nicht verlassen b1) Ich habe eine Datei zuletzt von Bricscad gespeichert(zu 99%, Ich habe sich nicht selbst gespeichert, daher lasse ich 1% Unsicherheit übrig ) Bei der Datei kommt KEINE Meldung [Format DWG2013] b2= Speichere ich besagte Datei mit Acad2013 ab (nur öffnen&Speichern-unter, wieder DWG2013) , DANN ERSCHEINT die Meldung! c) Man kann mit einfachen Mitteln (konverter etcpp) die Info entfernen/ändern (also so dass DWGCHECK nicht anschlägt)
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 18. Jan. 2016 19:43 <-- editieren / zitieren --> Unities abgeben:
Danke, cadffm für das fixe und doch so abendlich späte feedback! DWGCHECK war mir nicht mehr parat, aber diese Variable wertet offenbar die Information aus, die ich gern in selbst verwerten würde. Die AppInfoDataList findet man beim Öffnen einer DWG mittels Notepad (Format: Zeilenumbruch anhaken). Da zwischen den einzelnen Buchstaben NULL-zeichen stehen, kann man nicht mit der Textsuche rangehen. Siehe Screenshot DWG-Textabschnitt-AppInfoDataList.png
Zitat: a)Die Meldung lautet "wurde mit einer Software gespeichert.." sie lautet NICHT "zuletzt mit einer" (oder gibt es beide Varianten?)
hab die Meldung aus der Erinnerung geschrieben :( - Korrektur berechtigt. Zitat: b) Auf die Meldung/Info kann man sich nicht verlassen b1) Ich habe eine Datei zuletzt von Bricscad gespeichert(zu 99%, Ich habe sich nicht selbst gespeichert, daher lasse ich 1% Unsicherheit übrig ) Bei der Datei kommt KEINE Meldung [Format DWG2013] b2= Speichere ich besagte Datei mit Acad2013 ab (nur öffnen&Speichern-unter, wieder DWG2013) , DANN ERSCHEINT die Meldung!
Die Meldung von DWGCHECK allein hilft mir auch nur wenig, da ich mindestens eine Unterscheidung brauche, ob die geöffnete Datei von (pur-/Vanilla-)AutoCAD oder einem AutoCAD mit Aufsatz (MEP,Arch,Civil..) gespeichert wurde. Zitat: c) Man kann mit einfachen Mitteln (konverter etcpp) die Info entfernen/ändern (also so dass DWGCHECK nicht anschlägt)
Klar können auch anderweitig manipulierte DWG vorkommen. Wäre aber schon zufrieden, wenn der Zeichnungsaustausch innerhalb unserer Firma und mit beauftragten Fremdfirmen unterstützt wird, die alle mit AutoCAD(+Aufsatz) arbeiten. Kann natürlich sein, daß ich mit dem genannten Textabschnitt auf dem Holzweg bin. Nachtrag: Im zweiten Anhang "DWG-ExplorerInfo.png" sieht man beispielsweise was der Windows-Explorer anzeigt, wenn man die Maus eine Weile über der Datei belässt. [Diese Nachricht wurde von peterba am 18. Jan. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 18. Jan. 2016 20:05 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
"Die Meldung von DWGCHECK allein hilft mir auch nur wenig, da ich mindestens eine Unterscheidung brauche, ob die geöffnete Datei von (pur-/Vanilla-)AutoCAD oder einem AutoCAD mit Aufsatz (MEP,Arch,Civil..) gespeichert wurde."Damit wollte ich darauf hinweisen das man sich dabei noch nicht mal für "egal welche Version" verlassen kann. Der von dir genannte Abschnitt wird imho nur von Vertikelprodukten geschrieben (kenne ich durch viele ADT/ACAD Dateien), in Standard Acad gibt es das SO nicht. - Aus der LISP-Ecke wirst du da nicht viele Infos bekommen, wenn dann eher im Bereich c++ .net, englisch-sprachiger Raum, was Google betrifft. IMHO würde ich aber direkt bei Dienstleistern anfragen (Programmier-Dienstleister). (Explorer: DIESE Info ist nur die DWGversion, selbst an die kommt man mit Lisp ja nicht ordentlich ran), aber immerhin ist bekannt das sie ganz oben steht mit AC1027 usw. Viel Glück ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 19. Jan. 2016 12:10 <-- editieren / zitieren --> Unities abgeben:
Zitat: Der von dir genannte Abschnitt wird IMHO nur von Vertikelprodukten geschrieben (kenne ich durch viele ADT/ACAD Dateien), in Standard Acad gibt es das SO nicht.
Das kann ich nicht bestätigen. Habe eben noch einmal leere DWGs mit/ohne Vorlage in Standard ACAD2015 sowie Achitecture2015 erstellt und alle hatten die Abschnitte mit "A p p I n f o D a t a L i s t" mit folgenden Versionsangaben: \ " A C A D - E 0 0 1 : 4 0 7 \ " für ACAD 2015-deutsch \ " A C A D - E 0 0 6 : 4 0 7 \ " für MEP 2015-deutsch (Architecture läuft bei uns als "Abfallprodukt" in einer MEP Installation) Erstmal vielen Dank cadffm, für deine Anregungen! Hat denn sonst noch jemand hier im Forum eine Idee, wie man an diese Daten ran kommt? Oder einen Vorschlag, wie man eine Standard-AutoCAD Datei von einer DWG unterscheidet, die von einem vertikalen Produkt erstellt wurde? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 19. Jan. 2016 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 19. Jan. 2016 20:31 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
Hallo peterba, zum Auslesen der Daten direkt aus der Datei musst du die Datei binär lesen und die Bytes in Strings umwandeln und entsprechend parsen. Via Lisp sehe ich da keine Möglichkeit. Ich habe das mal mit c#.Net anprogrammiert und auf mein Temp-Verzeichnis losgelassen. FF das Ergebnis, bei dem man sieht, dass diese Info's auch nicht aus allen Zeichnungen ausgelesen werden konnten. Die Codierung der DWG-Dateien ist folglich verschieden, eine Analyse dessen ist mir so zum Spaß allerdings zuviel. Wenn du allerdings dein Vorhaben nicht nur mit Lisp-Umsetzen möchtest, sondern ggf. auch mit einer .Net-DLL leben kannst, die dir eine zusätzliche Lisp-Funktion zur Verfügung stellst, dann kannst du dich gerne melden. Grüße! Holger Code:
E:\Temp\#BlocksCloudTEST.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E004:407\" registry_localeID=\"1031\"> E:\Temp\#COD-ChangeConstAttrib.dwg E:\Temp\#COD-ChangeConstAttrib_02.dwg E:\Temp\0.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"C.56.0(x64)\" registry_version=\"17.2\" install_id_string=\"ACAD-7004:407\" registry_localeID=\"1031\"/> E:\Temp\ACADTR_1.dwg: E:\Temp\ACADTR_Zeichnung1.dwg: E:\Temp\ACADTR_Zeichnung2.dwg: E:\Temp\AcMoveAttributes.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"G.114.0.0(x64)\" registry_version=\"19.0\" install_id_string=\"ACAD-B004:407\" registry_localeID=\"1031\"/> E:\Temp\AttsyncXTest.dwg: <ProductInformation name ="Teigha(R).NET for .dwg files" build_version="0.0" registry_version="3.9" install_id_string="ODA" registry_localeID="1033"/> E:\Temp\BlockTest.dwg: <ProductInformation name ="Teigha(R).NET for .dwg files" build_version="0.0" registry_version="3.9" install_id_string="ODA" registry_localeID="1033"/> E:\Temp\BOD_Test.dwg E:\Temp\ByBlock2ByLayer.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E001:409\" registry_localeID=\"1033\"> E:\Temp\Drawing_100.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E001:409\" registry_localeID=\"1033\"> E:\Temp\DWGPROPS.dwg: E:\Temp\DynBlockTest.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.108.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D001:407\" registry_localeID=\"1031\"/> E:\Temp\DynBlockTest_Listing.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E001:409\" registry_localeID=\"1033\"> E:\Temp\Höhenkoten.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.18.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D001:407\" registry_localeID=\"1031\"/> E:\Temp\ImageRefTest.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.18.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D001:407\" registry_localeID=\"1031\"/> E:\Temp\ImageRefTest_2010.dwg E:\Temp\ImageRefTest_Binded.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.18.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D004:407\" registry_localeID=\"1031\"/> E:\Temp\ImageRefTest_NoBinded.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.18.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D004:407\" registry_localeID=\"1031\"/> E:\Temp\LayerFilterBrics.dwg: <ProductInformation name ="Teigha(R).NET for .dwg files" build_version="0.0" registry_version="3.9" install_id_string="ODA" registry_localeID="1033"/> E:\Temp\LOCKED.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"G.114.0.0(x64)\" registry_version=\"19.0\" install_id_string=\"ACAD-B004:407\" registry_localeID=\"1031\"/> E:\Temp\Nest-01.dwg: E:\Temp\neuer block.dwg: E:\Temp\pxStbCutTest.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E001:409\" registry_localeID=\"1033\"> E:\Temp\RBLK.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.18.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D001:407\" registry_localeID=\"1031\"/> E:\Temp\ReaTest.dwg E:\Temp\RelinkXRefTest_LISP.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.108.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D004:407\" registry_localeID=\"1031\"/> E:\Temp\result.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.108.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D001:407\" registry_localeID=\"1031\"/> E:\Temp\Sample.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.210.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E004:407\" registry_localeID=\"1031\"> E:\Temp\Sample2.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.210.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E006:407\" registry_localeID=\"1031\"> E:\Temp\Schacht Rohr.dwg: E:\Temp\Schema_Test.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E001:409\" registry_localeID=\"1033\"> E:\Temp\Scurve.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.108.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D004:407\" registry_localeID=\"1031\"/> E:\Temp\T-Stück DS.dwg: E:\Temp\Tabelle.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E004:407\" registry_localeID=\"1031\"> E:\Temp\TEST.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.108.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D001:407\" registry_localeID=\"1031\"/> E:\Temp\Testttt.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E004:407\" registry_localeID=\"1031\"> E:\Temp\Test_Version.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"M.49.0.0(x64)\" registry_version=\"20.1\" install_id_string=\"ACAD-F004:407\" registry_localeID=\"1031\"> E:\Temp\TreppeTest.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E001:409\" registry_localeID=\"1033\"> E:\Temp\UcsTransTest.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"M.49.0.0(x64)\" registry_version=\"20.1\" install_id_string=\"ACAD-F004:407\" registry_localeID=\"1031\"> E:\Temp\UcsTransTestRotation.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"M.49.0.0(x64)\" registry_version=\"20.1\" install_id_string=\"ACAD-F004:407\" registry_localeID=\"1031\"> E:\Temp\XRef_Master.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.18.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D004:407\" registry_localeID=\"1031\"/> E:\Temp\XRef_Referenz.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"D.49.0.0\" registry_version=\"18.0\" install_id_string=\"ACAD-8004:407\" registry_localeID=\"1031\"/> E:\Temp\Zeichnung1.dwg: <ProductInformation name ="Teigha(R).NET for .dwg files" build_version="0.0" registry_version="4.0" install_id_string="ODA" registry_localeID="1033"/> E:\Temp\Zeichnung2.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"J.51.0.0(x64)\" registry_version=\"20.0\" install_id_string=\"ACAD-E004:407\" registry_localeID=\"1031\"> E:\Temp\Zeichnung_GEAB.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"I.18.0.0(x64)\" registry_version=\"19.1\" install_id_string=\"ACAD-D004:407\" registry_localeID=\"1031\"/> E:\Temp\ZwCAD_Zeichnung1.dwg E:\Temp\ZweiteZeichnung.dwg: <ProductInformation name =\"AutoCAD\" build_version=\"G.55.0.0(x64)\" registry_version=\"19.0\" install_id_string=\"ACAD-B016:407\" registry_localeID=\"1031\"/>
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 20. Jan. 2016 13:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, wow, das sieht schon ziemlich gut aus! Besonders der nach "install_id_string" angegebene Wert interessiert mich. Ich habe mich mittlerweile auf VBScript eingelassen und bin aber noch nicht ganz so weit mit meiner Programmierung. Wenn das funktionieren würde, wollte ich den VBScript in VLisp via ActiveX nachvollziehen. Da gefällt mir dein Lösungsansatz schon besser. Natürlich ist dein Ansatz mit einer .NET-DLL immer besser als gar keine Lösung. Leider ist mir die .Net-Programmierung zu kompliziert - nur deshalb die Vorbehalte. Noch eine Frage: Ich brauche diesen id-String unmittelbar NACH dem Öffnen einer DWG in AutoCAD. Das bedeutet, die DWG kann nur noch "lesend" (also ohne schreibzugriff) ausgewertet werden. Würde das mit deinem .NET Ansatz funktionieren? Gruß, Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 20. Jan. 2016 15:11 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
Zitat: Original erstellt von peterba: ...Noch eine Frage: Ich brauche diesen id-String unmittelbar NACH dem Öffnen einer DWG in AutoCAD. Das bedeutet, die DWG kann nur noch "lesend" (also ohne schreibzugriff) ausgewertet werden. Würde das mit deinem .NET Ansatz funktionieren? ...
Ja, Für die Auswertung ist ein Schreibzugriff nicht notwendig - im Zweifel kann man die Datei im Hintergrund temporär kopieren und dann zum Lesen öffnen. Grüße! Holger
------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 20. Jan. 2016 15:53 <-- editieren / zitieren --> Unities abgeben:
Also, wenn du den lesenden Zugriff für die aktuelle DWG hinbekommst, wäre das optimal. Beim Erstellen einer temporären Kopie der DWG würde sich je nach Größe, die Ladezeit bestimmt merklich verlängern. Denn ich würde die Auswertung gern unmittelbar beim Öffnen einer Zeichnung (als Ergänzung zur ACADDoc.lsp) einsetzen. Wenn ich noch einen Wunsch äussern darf, ohne vorlaut zu gelten?: Die Rückgabe der von deinem Programm ermittelten Informationen als Zuweisungs-Liste, die man in Lisp mittels "Assoc" auswerten könnte, wäre eine perfekte Lösung. Rückgabe Beispiel:
Code: (('name "AutoCAD")...('install_id_string "ACAD-7004:407"))
und NIL eben dann, wenn die ProductInfo nicht existiert. Gruß, Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 20. Jan. 2016 16:50 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
... kann man alles machen .. allerdings übersteigt das den Rahmen der Hilfe, die ich im Rahmen dieses Forums zu geben bereit bin. Schick mir eine Mail oder ruf mich am besten mal an. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 20. Jan. 2016 18:11 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
Die Informationen können auch mit VLisp ausgelesen werden. Du kannst die Informationen entweder als String oder binär lesen. Die Einfachheit wird allerdings dadurch erschwert, das die Zeichen nicht als Asciizeichen z.B. P sondern als Zeichen \000P vorliegt. Du musst also für jedes Zeichen (Productcode) die \000 entfernen. ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 21. Jan. 2016 10:16 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
Eigentlich macht es ja gar keinen Sinn in dem von dir beschriebenen Fall die DWG erst zu öffnen und dann deren Inhalt auszuwerten. Du solltes dir vielmehr einen eigenen OPEN Dialog basteln, oder einen Reactor verwenden, der auf den OPEN Befehl reagiert und dann erstmal die ausgewählte Datei verwurstet und ggf dann die Datei in eine Leere einfügt oder einen Hinweis ausgibt, oder sonstiges... ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 21. Jan. 2016 12:34 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CADwiesel: Die Informationen können auch mit VLisp ausgelesen werden. Du kannst die Informationen entweder als String oder binär lesen. Die Einfachheit wird allerdings dadurch erschwert, das die Zeichen nicht als Asciizeichen z.B. P sondern als Zeichen \000P vorliegt. Du musst also für jedes Zeichen (Productcode) die \000 entfernen.
Hallo CADwiesel, ich habe versucht diese Daten in VLisp mit READ-CHAR/READ-LINE zu lesen, allerdings bricht das Einlesen schon vorher ab, da irgendwelche Binärdaten dem Lisp ein Dateiende vorgaukeln. Ist dir das besser gelungen? Dieses \000 steht in dem betreffenden Abschnitt vor jedem ASCII-Zeichen, weil die Daten offenbar als 16bit/2Byte codiert hinterlegt sind. Nicht schön, kann ich aber selbst rausfiltern. Zitat: Eigentlich macht es ja gar keinen Sinn in dem von dir beschriebenen Fall die DWG erst zu öffnen und dann deren Inhalt auszuwerten. Du solltes dir vielmehr einen eigenen OPEN Dialog basteln, oder einen Reactor verwenden, der auf den OPEN Befehl reagiert und dann erstmal die ausgewählte Datei verwurstet und ggf dann die Datei in eine Leere einfügt oder einen Hinweis ausgibt, oder sonstiges...
Vom Öffnen komme ich nicht weg, weil man einer DWG vorher noch nicht ansieht, ob sie nur eine Standard-DWG ist oder mehr enthält, weil Sie von einem vertikalen Produkt erstellt wurde. Die Verwendung eines Reaktors verlegt die Auswertung nur vor das Öffnen, was evtl. die Problematik des doppelten Zugriffs auf eine DWG entschärft. Letzlich soll beim Öffnen einer Standard-DWG nur ein Warnung kommen, es aber nicht verhindert werden. Gruß, Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 21. Jan. 2016 16:33 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
Zum Einlesen habe ich den Umweg über ADODB Object gemacht und binär eingelesen. Dann löschst du die Nullen raus und wandelst den Binärcode in String um, den du dann nach deiner Information durchsuchen kannst. Das alles passier so schnell, das es gut vor tatsächlichem Öffnen der Datei passieren kann und du damit eine entsprechende Aktion, wie schon geschrieben, treffen kannst. Es macht nicht wirklich Sinn, die Datei erst in einem CAD zu öffnen und sie dann zu analysieren. Auch wenn ich gerne mal code kostenlos raushaue, bin ich aber doch der Meinung, das dies erstens recht hochwertiges Wissen ist, aber auch die Forenilfe zur Selbsthilfe übersteigt. Ich stimme da eher Holger zu. ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 22. Jan. 2016 15:58 <-- editieren / zitieren --> Unities abgeben:
Du meinst mit dem Einlesen über ADODB wahrscheinlich nicht die Verwendung des ActiveX Interface-Objekts "ObjectDBX"? Ist mir schon klar, daß die betreffende Programmierung - egal mit welcher Methode - kein Pappenstiel ist. Meine erste Hoffnung war ja, daß es schon einen Weg zum Feststellen der Productinfo gibt, der mir nicht bekannt ist. Trotzdem danke ich allen für die konstruktiven Vorschläge! Mittlerweile habe ich selbst schon recht gute Fortschritte gemacht. Ich bleibe in VLISP und benutze das "FileSystemObject" des Windows-Scripting-Host als InterfaceObject. Die frei verfügbare Vorlage kommt aus WSH.LSP Copyright 1999 Tony Tanzillo. Mit dem "FileSystemObject" kann man jede binäre - also auch DWG - einlesen. Die ganze Programmierung bleibt aber auf bekanntem Lisp-Terrain. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VMichl Mitglied
Beiträge: 221 Registriert: 04.01.2001
|
erstellt am: 22. Jan. 2016 18:25 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
|
peterba Mitglied
Beiträge: 14 Registriert: 21.06.2007 AutoCAD/Architecture/MEP 2015, DWG TrueView 2013 und DesignReview 2013 auf Win7 64bit.
|
erstellt am: 25. Jan. 2016 11:13 <-- editieren / zitieren --> Unities abgeben:
|
VMichl Mitglied
Beiträge: 221 Registriert: 04.01.2001
|
erstellt am: 26. Jan. 2016 22:22 <-- editieren / zitieren --> Unities abgeben: Nur für peterba
|