| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Welche Dias sind in SLB ? (1177 mal gelesen)
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 11. Dez. 2007 08:46 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich möchte gerne alle Dias einer SLB in einem Dialogfeld anzeigen. Wie ich so ein Dia anzeige ist ja klar, aber dazu brauch ich den Namen. Wie bekomme ich raus wie die alle heißen ? Also sowas wie eine Liste der Dias die da drin sind. Danke Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 11. Dez. 2007 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
|
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 11. Dez. 2007 09:13 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
|
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 11. Dez. 2007 10:37 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 11. Dez. 2007 11:09 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Hallo Andreas, vielleich helfen Dir folgende Codeschnipsel weiter: Code:
(if (setq pfad (ext_folder "Bitte sld-Verzeichnis auswählen:")) (mapcar 'vl-filename-base(vl-directory-files pfad "*.sld" 1))) ;;;Verzeichnisauswahl (defun ext_folder (str / folder obj_shell) (setq obj_shell (vlax-get-or-create-object "shell.application")) (if (setq folder (vlax-invoke obj_shell "BrowseForFolder" 0 str 1)) (setq folder (vlax-get (vlax-get folder "Self") "Path"))) (vlax-release-object obj_shell) folder)
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 11. Dez. 2007 11:41 <-- editieren / zitieren --> Unities abgeben:
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 11. Dez. 2007 12:20 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Im Handbuch für Benutzanpassungen der 12er Version war das SLB Dateiformat sehr genau beschrieben. Im jetzigen findet man nur noch Code: In diesem Abschnitt wird das Format von AutoCAD-Diabibliotheken (ab Release 9) für Entwickler beschrieben, die eine Unterstützung von Diabibliotheken in ihre Programme einbauen möchten. Eine Diabibliothek weist im allgemeinen das folgende Format auf: "AutoCAD-Diabibliothek 1.0" CR LF ^Z NUL NUL NUL NUL Kopfzeile (32 Byte) Ein oder mehrere Diaverzeichniseinträge (je 36 Byte) Ein oder mehrere Dias (von unterschiedlicher Länge) Die Diaverzeichniseinträge besitzen das folgende Format: Dianame (mit NUL-Endung) (32 Byte) Adresse des Dias in der Bibliotheksdatei (4 Byte) Bei der Diaadresse wird das Low-Order-Byte stets zuerst geschrieben. Jedes Dia, auf das das Verzeichnis verweist, ist eine vollständige Diadatei, wie sie im vorausgehenden Abschnitt beschrieben wurde. Das Ende des Diaverzeichnisses ist durch einen Eintrag mit einem Null-Dianamen gekennzeichnet (das erste Byte ist NUL). Eine Diabibliothek kann eine Mischung aus Dias des alten und des neuen Formats enthalten.
Sollte aber ausreichend sein, um die Dia Namensliste auszulesen die ersten 32 Byte ignorieren, dann immer 36 Byte lesen, solange diese 36 Byte nicht mit NUL beginnen. Aus diesen 36 Byte kann man dann den Dianamen auslesen (Klastext bis zum ersten NUL) ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 11. Dez. 2007 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Habe schnell mal aufgrund der Datei Beschreibung in VB was geschrieben.
Code: file = "d:\hicad\10b\10A0ART2.SLB" Set fs = CreateObject("SCRIPTING.FILESYSTEMOBJECT") Set f = fs.OpenTextFile(file) ok = True a1 = f.Read(32) ' ersten 32 Byte ignorieren. Hier könnte noch eine Prüfung stattfinden, ob es eh einen SLB ist While ok = True a1 = f.Read(36) If Mid$(a1, 1, 1) <> Chr(0) Then a2 = Mid$(a1, 1, InStr(a1, Chr(0)) - 1) Debug.Print a2 ' ausgeben des DIA Names Else ok = False End If Wend f.Close
------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 11. Dez. 2007 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
wir sind ja im Lisp Forum schnell mal nach Lisp konvertiert. Code: (setq fs (vlax-get-or-create-object "SCRIPTING.FILESYSTEMOBJECT")) (setq f (vlax-invoke fs "OpenTextFile" "d:/hicad/10b/10A0ART2.SLB")) (vlax-invoke f "Read" 32)(setq eof nil) (while (not eof) (setq a1 (vlax-invoke f "Read" 36)) (if (= (vl-string-position 0 a1) 0) (setq eof t) (progn (setq dia (substr a1 1 (vl-string-position 0 a1))) (print dia) ) ) ) (vlax-invoke f "Close") (vlax-release-object f) (vlax-release-object fs)
------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 11. Dez. 2007 13:17 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Na, dann machen wir doch gleich 'ne Funktion draus: Code: (defun c:test() (get-slides-from-lib "acad.slb") )(defun get-slides-from-lib (lib-file / fs f eof a1 dia dia_liste) (vl-load-com) (setq fs (vlax-get-or-create-object "SCRIPTING.FILESYSTEMOBJECT")) (if (and (setq lib-file (findfile lib-file)) (setq f (vlax-invoke fs "OpenTextFile" lib-file)) ) (progn (vlax-invoke f "Read" 32) (setq eof nil) (while (not eof) (setq a1 (vlax-invoke f "Read" 36)) (if (= (vl-string-position 0 a1) 0) (setq eof t) (progn (setq dia (substr a1 1 (vl-string-position 0 a1))) (setq dia_liste (cons dia dia_liste)) ) ) ) (vlax-invoke f "Close") (vlax-release-object f) ) ) (vlax-release-object fs) dia_liste )
Grüsse, Henning------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 11. Dez. 2007 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas Kraus
Dann sollten wir aber auch das Prüfen des Dateiheaders einbauen, damit sich die Funktion nicht aufhängt, falls es keine SLB ist. Code:
(defun get-slides-from-lib (lib-file / fs f eof a1 dia dia_liste) (vl-load-com) (setq fs (vlax-get-or-create-object "SCRIPTING.FILESYSTEMOBJECT")) (if (and (setq lib-file (findfile lib-file)) (setq f (vlax-invoke fs "OpenTextFile" lib-file)) ) (if (wcmatch (vlax-invoke f "Read" 32) "AutoCAD Slide Library 1.0*") (progn (setq eof nil) (while (not eof) (setq a1 (vlax-invoke f "Read" 36)) (if (= (vl-string-position 0 a1) 0) (setq eof t) (progn (setq dia (substr a1 1 (vl-string-position 0 a1))) (setq dia_liste (cons dia dia_liste)) ) ) ) ) (vlax-invoke f "Close") (vlax-release-object f) ) ) (vlax-release-object fs) dia_liste )
ich hoffe ich hab mich mit den Klammern nicht verhaut. ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Kraus Mitglied Elektrotechniker
Beiträge: 1356 Registriert: 11.01.2006 WIN 10 ACAD 2022
|
erstellt am: 11. Dez. 2007 13:27 <-- editieren / zitieren --> Unities abgeben:
******e seid ihr schnell Ich hatte mir grade Gedanken gemacht wie ich die SLB auslese, wollte die nächste Frage stellen - und da ist das hier schon fertig. Na dann kann ich ja an dem Programm weitertippen für das ich das brauch. aber erst noch ein par U's verteilen Gruß Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |