| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Koordinaten ermitteln und/oder Text aus Block löschen (4611 mal gelesen)
|
Th-Schultz Mitglied
Beiträge: 18 Registriert: 11.07.2012 AutoCAD 2008 AutoCAD Lt 2009
|
erstellt am: 11. Jul. 2012 10:12 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe die Aufgabe bekommen rund 35.000 Zeichnungen zu überarbeiten. Im Augenblick stehe ich aber vor dem Problem, das die Zeichnungen nicht annähernd ihren Namen verdienen, da sie absolut chaotisch sind. Es existieren etliche Typen von Zeichnungsköpfen und selbst ein und der selbe Typ muß nicht zwangsläufig immer auf dem gleichen Einfügepunkt liegen. Soviel zur Aufgabe. Das aktuelle Problem: Ich muß nun irgendwie (AutoList) den neuen Kopf auf den alten legen, nachdem ich diesen sammt Inhalt auf die richtige Position verschoben habe. Für den zweiten Schritt, das Einfügen des neuen Blocks auf die Koordinaten eines vorhandenen Blocks, habe ich einen Lösungsansatz. Problem, der Einfügepunkt des alten Zeichnungskopfes liegt nicht auf dem Rahmen sondern irgendwo (z.B. 0,0 oder sogar am rechten Rand). Deshalb sind mir die Systemvariablen Extmin und Extmax eingefallen, mit dessen Hilfe man den Block auf die richtigen Koordinaten schieben könnte. Aber auch hier gibt es ein Problem. Zum Teil enthalten die alten Zeichnungen Texte auserhalb des Rahmens. Texte wie „CAD-Zeichnung“ oder „Zeichnungen dürfen nur in CAD geändert werden“. Diese Texte sind zudem noch im Zeichnungskopf-Block enthalten und verfälschen mir die Koordinaten in Extmin. Zu meiner eigentlichen Frage: Kann mir jemand eine Lösung aufzeigen mit der ich entweder Texte innerhalb von Blöcken automatisch ändern oder löschen kann? So könnte ich dann die Zeichnung anhand der EXTMIN Variable auf eine feste Koordinate legen. Alternativ: Gibt es eine Möglichkeit Koordinaten der längsten (P)Linien zu ermitteln? Und zu guter Letzt: Selbst wenn ich gültige Koordinaten habe, wie müßte eine Script oder Lisp aussehen, die mir die gesammte Zeichnung von dieser ermittelten Koordinate (Extmin) auf eine feste Koordinate verschiebt. Tipps für jeden einzelnen der notwendigen Schritte sind herzlich willkommen... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 11. Jul. 2012 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
|
Th-Schultz Mitglied
Beiträge: 18 Registriert: 11.07.2012 AutoCAD 2008 AutoCAD Lt 2009
|
erstellt am: 11. Jul. 2012 11:10 <-- editieren / zitieren --> Unities abgeben:
Zitat: Zu Koordinaten der längsten Polylinie (eines Layouts?) .... via Lisp: alle PLs einsammln und mittels vlax-curve Funktion Länge ermitteln ... die dann sortieren ...
Seit AutoCAD 14 habe ich kaum noch mit Lisp gearbeitet. Kannst du mir das etwas genauer schildern? Zitat: Rechne je Anfassen min 2 Minuten ...
Das wäre schön :-) Nein, das ganze muß per Script laufen und hat bei früheren Projekten ca. 5-6 Sek. pro Zeichnung gedauert. Zudem benötigt der Rechner beim Durchlaufen kaum Betreuungszeit... Zitat: Für eine geringere Summe kann man sich sicherlich ein Programm für die Anpassungen schreiben lassen ......
Für dieses Projekt ist da nicht wirklich Geld für vorhanden. Aber Grundsätzlich: wer macht sowas? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 11. Jul. 2012 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
|
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 bis ACA 2013 Arcibem System: Windows Internet-Startseite: http://www.archi.de
|
erstellt am: 11. Jul. 2012 11:52 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
Hallo, und erst einmal Willkommen bei CAD.de! Grundsätzlich ist das sicher alles zu machen. Ich würde aber nicht extmin etc. nehmen, da ja dort alle Elemente der Zeichnung erfasst werden. In Lisp (dafür gibt es übrigens ein extra Forum) würde ich das grob so machen: die Blockdefinition des alten Kopfes einlesen, den Basispunkt abspeichern, über alle Elemente außer Texte eine boundingbox legen, und so die maximale Ausdehnung des Kopfs ermitteln. Dann in allen Layouts den alten Kopf suchen, Skalierung, Drehung, Basispunkt und ggf. Attribute auslesen, und entsprechend der in der Definition ermittelten Daten den neuen Kopf passend einfügen. Für viele dieser Schritte gibt es auch schon fertige oder ähnliche Routinen, z.B. PLBOX-Multi für die maximale Ausdehnung mehrerer Objekte. Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3358 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 11. Jul. 2012 12:29 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
Zitat: Original erstellt von Th-Schultz: Das wäre schön :-) Nein, das ganze muß per Script laufen und hat bei früheren Projekten ca. 5-6 Sek. pro Zeichnung gedauert. Zudem benötigt der Rechner beim Durchlaufen kaum Betreuungszeit...
5-6 Sekunden läuft das Script pro Zeichnung das FUNKTIONIERT, 2 Minuten wäre die ~ Handarbeit. ------------------ <----- Bitte Systeminfo eintragen, warum siehst du hier. "Warum Einfach es geht auch kompliziert". Schöne Grüsse aus der Steiermark Bernd P. Sport ist Mord Rekorde: Scalelist>11727, Fehler>34365, Layerfilter>XXXX Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Werner-Maahs.de Mitglied CAD-Dozent + Konstrukteur + Autor
Beiträge: 626 Registriert: 04.05.2005 Win XP AC 2005/6 AC 2013
|
erstellt am: 11. Jul. 2012 13:59 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
Wenn da wirklich so viele Zeichnungen sind, die zudem noch unterschiedliche Kriterien haben, ist da mit einem vollautomatischem Skript/Lisp wohl kaum etwas zu machen. Halbautomatisch ja aber Durchlaufzeiten liegen je nach Aufwand wohl eher bei 30 Sekunden und mehr. Ein Skript/Lisp will gefüttert werden. Womit denn, wenn dort so viele Unterschiede sind. Ich habe es mit 2500 Zeichnungen mal gemacht. Das Lisp selbst geschrieben und nach und nach verbessert. Das Skript, es waren insgesamt 5 Makros die mit werkzeugkästen aufzurufen waren. Es lief somit halbautomatisch und dauerte etwa 10 bis 20 Sekunden. Für die Lisp-Makros habe ich geschätzt etwa 10 Stunden gebraucht. Für die Auftragsbesprechung etwa 1 Woche, weil der Kunde feste Vorstellungen hatte aber nicht wußte, was wirklich in den Zeichnungen war. Also, wenn Du Dein eigener Kunde bist und Du alles kennst, dann mach es selbst! Bei Fragen wird Dir hier geholfen. Ist halt nur eine Zeitsache. Hast Du keine Zeit, dann such Dir einen versierten Programmierer (siehe oben) und nehme in Kauf, dass nicht alles so wird wie es möglicherweise gedacht war. Wer kann schon alle 35000 Zeichnungen prüfen. ------------------ strukturiertes Zeichnen mit Werner-Maahs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Th-Schultz Mitglied
Beiträge: 18 Registriert: 11.07.2012 AutoCAD 2008 AutoCAD Lt 2009
|
erstellt am: 12. Jul. 2012 07:38 <-- editieren / zitieren --> Unities abgeben:
Zitat: Wenn da wirklich so viele Zeichnungen sind, die zudem noch unterschiedliche Kriterien haben, ist da mit einem vollautomatischem Skript/Lisp wohl kaum etwas zu machen. Halbautomatisch ja aber Durchlaufzeiten liegen je nach Aufwand wohl eher bei 30 Sekunden und mehr.
Das ist der Grund warum ich eine Lisp haben möchte, die entsprechend erkennt und vereinheitlicht. Die Auftragserstellung ansich ist kein Problem, dafür habe ich seit Jahren ein entsprechendes selbst programmiertes Tool. Es kann den Zeichnungen Merkmale zuordnen, die später erkennbar sind und anhand dessen die richtige Script gestartet werden kann. Das Problem ist halt nur, das eben nicht alle gleichen Köpfe auch auf den gleichen Koordinaten liegen. Aber ich scheine dieses Problem inzwischen sogar per script lösen zu können. Etwas Trickreich, weniger elegant, aber bei einer Testreihe von 150 Teichnungen funktionierte es. Dennoch: Die erste Wahl ist und bleibt eine Script, um die Zeichnungen 100% sicher positionieren zu können. Deshalb noch einmal die Frage in die Runde, wie kann ich die Positionen von (P)Linien innerhalb eines Blockes auslesen und die Linie die am weitesten nach unten links geht ermitteln? Eine mögliche Antwort scheint mir die beste Lösung meines Problems zu sein.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 12. Jul. 2012 08:02 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
|
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3358 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 12. Jul. 2012 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
strg+x und strg+v auf 0,0 dann wäre die linke untere Ecke auf 0,0 auch als script einsetzbar ------------------ <----- Bitte Systeminfo eintragen, warum siehst du hier. "Warum Einfach es geht auch kompliziert". Schöne Grüsse aus der Steiermark Bernd P. Sport ist Mord Rekorde: Scalelist>11727, Fehler>34365, Layerfilter>XXXX [Diese Nachricht wurde von Bernd P am 12. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Th-Schultz Mitglied
Beiträge: 18 Registriert: 11.07.2012 AutoCAD 2008 AutoCAD Lt 2009
|
erstellt am: 12. Jul. 2012 08:52 <-- editieren / zitieren --> Unities abgeben:
Die Ecke im roten Kreis muß ermittelt werden. Deshalb erwähnte ich ja bereits die Variable Extmin Allerdings stimmt dieser Wert nicht, weil der Text nach drüber hinaus geht. Dieser ist aber in einem Block enthalten und läst sich nicht einfach löschen oder überschreiben... Um den 0-Punkt verschieben zu können, müsste erst dieser Text weg. Oder ich ermittle den Endpunkt der waagrechten Linie (Achtung Schnittpunkt geht auch nicht, die Zeichnungen sind so miserable, das die Linien teilweise nicht aneinander stoßen)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3358 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 12. Jul. 2012 08:55 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
Dieser ist aber in einem Block enthaltenund weg is er (command "_-insert" "Block=Blockohnetext.dwg") bzw. (command "_-insert" "Block=Blockmittext.dwg") btw. wenn der Planrahmen als Block drin ist kannst du ja diesen verwenden zum Koordinaten auslesen (einfügepunkt minus X,Y) und wenn der Plankopf schon als Block drin ist es sicher am einfachsten gleich diese upzudaten. ------------------ <----- Bitte Systeminfo eintragen, warum siehst du hier. "Warum Einfach es geht auch kompliziert". Schöne Grüsse aus der Steiermark Bernd P. Sport ist Mord Rekorde: Scalelist>11727, Fehler>34365, Layerfilter>XXXX [Diese Nachricht wurde von Bernd P am 12. Jul. 2012 editiert.] [Diese Nachricht wurde von Bernd P am 12. Jul. 2012 editiert.] [Diese Nachricht wurde von Bernd P am 12. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Th-Schultz Mitglied
Beiträge: 18 Registriert: 11.07.2012 AutoCAD 2008 AutoCAD Lt 2009
|
erstellt am: 12. Jul. 2012 09:06 <-- editieren / zitieren --> Unities abgeben:
Zitat: und weg is er (command "_-insert" "Block=Blockohnetext.dwg") bzw. (command "_-insert" "Block=Blockmittext.dwg")
Viel zu aufwendig, da wir von min 24 verschiedenen Köpfen reden. Und ich weiß nicht, ob es nicht noch abgewandelte Versionen gibt, die mal irgendwer "umgestrickt" hat. Gleiches gilt auch für das Auslesen der Einfügepunkte. Das sicherste ist und bleibt den äußersten linken unteren Punkt einer Linie oder P-Linie zu ermitteln. 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 bis ACA 2013 Arcibem System: Windows Internet-Startseite: http://www.archi.de
|
erstellt am: 12. Jul. 2012 13:19 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
Zitat: Original erstellt von Th-Schultz:
Deshalb noch einmal die Frage in die Runde, wie kann ich die Positionen von (P)Linien innerhalb eines Blockes auslesen und die Linie die am weitesten nach unten links geht ermitteln? Eine mögliche Antwort scheint mir die beste Lösung meines Problems zu sein.
Wie oben ja schon beschrieben, liegt die Routine ja schon (fast fertig) vor. Etwas angepasst könnte sie dann so aussehen ;)
Code: (defun get-block-bBox-only-lines (blockname / ele XYMIN XYMAX MINX MAXX MINY MAXY DATA A) (vl-load-com) (setq A 0.0) (vlax-for ele (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) Blockname) (if (member (vla-get-objectname ele) '("AcDbPolyline" "AcDbLine")) (progn (vla-getboundingbox ele 'XYMIN 'XYMAX) (setq DATA (cons (list (vlax-safearray->list XYMIN) (vlax-safearray->list XYMAX)) DATA)) ) ) ) (setq MINX (eval (cons 'min (mapcar 'caar DATA)))) (setq MINY (eval (cons 'min (mapcar 'cadar DATA)))) (setq MAXX (eval (cons 'max (mapcar 'caadr DATA)))) (setq MAXY (eval (cons 'max (mapcar 'cadadr DATA)))) (list (mapcar '- (list MINX MINY) (list A A)) (mapcar '+ (list MAXX MAXY) (list A A)) ) )(defun c:get-min-point () (setq ele (car (entsel "Block wählen"))) (mapcar '+ (cdr (assoc 10 (setq eig (entget ele)))) (car (get-block-bBox-only-lines (cdr (assoc 2 eig))))) )
Jetzt mal ohne Fehlerabfangen und davon ausgehend, dass der Block unskaliert eingefügt wurde.Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Th-Schultz Mitglied
Beiträge: 18 Registriert: 11.07.2012 AutoCAD 2008 AutoCAD Lt 2009
|
erstellt am: 12. Jul. 2012 15:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Henning, erst einmal vielen Dank für die Mühe und den geposteten Source. Habe ihn gerade mal getestet. Leider war das Ergebnis nicht sehr berauschend. Ich bekamm Koordinaten zurück, wo weit und breit keine (P)Linie des gewählten Blocks war. Inzwischen hat sich auch noch etwas anderes ergeben. Ich benötige nicht den äußersten Punkt eines zu wählenden Blocks sondern generell den äußersten Punkte aller (P)Linien der Zeichnungen. Wie sich rausgestellt enthalten einige Rahmen nicht unweigerlich auch die Kopfdaten, sondern sind durch einfach Linien unabhängig vom Kopf realisiert. Wenn du trotzdem noch eine Idee hast, lass es mich bitte wissen.
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 bis ACA 2013 Arcibem System: Windows Internet-Startseite: http://www.archi.de
|
erstellt am: 12. Jul. 2012 16:01 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
|
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, Civil 3D, MAP 3D, ACADM Inventor AutoCAD 2022, AIP 4-2022 Win 10
|
erstellt am: 12. Jul. 2012 17:48 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
Habe schon mehrfach ähnliche Projekte (AutoCAD Zeichungen überarbeiten, Stile, Layer... normieren - Daten aus Titelblöcken für Datenbank auslesen...) begleitet und Routinen erstellt. Bei einer heterogenen Zeichnungssammlung würde ich erst mal ein Makro schreiben, das vorsortiert. - Zeichnungen mit Titelblöcken und Rahmen ohne außerhalb liegende Zeichnungselemente - Zeichnungen mit Layouts - Zeichnungen ohne Titelblock (evt. sogar ohne Texte - z.B. Schemazeichnungen) ... Anhand der vorsortierten Dateien (evt. mit Summenstatistik) kann man dann mehrere Typen von Zeichnungen identifizieren und dann individuell angepasste kleinere Makros schreiben. Sollten nach dem Vorsortieren z.B. nur 5 Zeichnungen mit explodierten Titelblöcken auffallen, kann man die besser manuell begutachten und überarbeiten.
------------------ Mit freundlichem Gruß Udo Hübner www.CAD-Huebner.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Th-Schultz Mitglied
Beiträge: 18 Registriert: 11.07.2012 AutoCAD 2008 AutoCAD Lt 2009
|
erstellt am: 16. Jul. 2012 09:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Henning, bin am Freitag leider nicht mehr dazu gekommen andieser Geschichte weiter zu arbeiten. Ich hab jetzt heute morgen mal zwei Demozeichnungen rausgesucht und angehangen. Für mich ist es wichtig die Ecken zu ermitteln, damit ich die Zeichnungen entsprechend verschieben und weiter verarbeiten kann. Wäre super, wenn mir jemand doch noch helfen könnte.
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 bis ACA 2013 Arcibem System: Windows Internet-Startseite: http://www.archi.de
|
erstellt am: 16. Jul. 2012 17:04 <-- editieren / zitieren --> Unities abgeben: Nur für Th-Schultz
Hallo, habe mir mal die beiden Zeichnungen angeschaut, und denke, dass Du da mit Programmierung keine vollständige automatische Konvertierung hinbekommst. Dafür ist die Struktur (allein in diesen 2 Beispielen) zu unterschiedlich. Rahmenlinien auf unterschiedlichen Layern (TEXT / 0), Kopf-Block Attributnamen und Anzahl unterschiedlich, Geometrie ungenau. Da wirst Du sicher nicht um die Vorstrukturierung, wie sie Udo vorgeschlagen hat, herumkommen. Und selbst dabei wirst Du auf Grenzen stossen, z.B. wenn Kopfblöcke, wie von Dir beschrieben gleich heißen, aber unterschiedlichen Inhalt haben. Attributnamen wie "F1" bis "F16" erleichtern die Automatisierung auch nicht gerade, vielleicht gibt es aber auch Köpfe mit festen Textteilen, oder Köpfe, die gar keine Blöcke sind, sonder Linien mit Texten. Im Beispiel sind die Rahmen und Köpfe im Modellbereich. Soll das so bleiben, oder willst Du Layouts anlegen. Gibt es auch Zeichnungen mit mehreren Blättern nebeneinanter im Modellbereich (in "sehr viel" früheren Versionen die einzige Möglichkeit mehrere Blätter in einer Zeichnung zu haben). Also... ich will Deinen Eifer nicht bremsen, aber die Ein-Knopf-Lösung sehe ich nicht. Im übrigen: die von mir gepostete Routine arbeitet - zumindest in Deinen Beispielen - einwandfrei. der "linke untere" Punkt muß ja nicht immer ein Linienpunkt sein (s. Dein Beispielblock "Loopkopf") Für den "äußersten" Punkt der Modellbereichselemente kannst Du das verwenden: Code: (defun c:get-model-min-point ( / ele XYMIN XYMAX MINX MAXX MINY MAXY DATA A) (vl-load-com) (setq A 0.0) (vlax-for ele (vla-get-Modelspace (vla-get-activedocument (vlax-get-acad-object))) (if (member (vla-get-objectname ele) '("AcDbPolyline" "AcDbLine")) (progn (vla-getboundingbox ele 'XYMIN 'XYMAX) (setq DATA (cons (list (vlax-safearray->list XYMIN) (vlax-safearray->list XYMAX)) DATA)) ) ) ) (setq MINX (eval (cons 'min (mapcar 'caar DATA)))) (setq MINY (eval (cons 'min (mapcar 'cadar DATA)))) (setq MAXX (eval (cons 'max (mapcar 'caadr DATA)))) (setq MAXY (eval (cons 'max (mapcar 'cadadr DATA)))) ; (list (mapcar '- (list MINX MINY) (list A A)) ; (mapcar '+ (list MAXX MAXY) (list A A)) ; ) )
Grüsse, Henning
------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |