Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Koordinaten ermitteln und/oder Text aus Block löschen

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 Autodesk Produkte
Autor Thema:  Koordinaten ermitteln und/oder Text aus Block löschen (4611 mal gelesen)
Th-Schultz
Mitglied



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

Beiträge: 18
Registriert: 11.07.2012

AutoCAD 2008
AutoCAD Lt 2009

erstellt am: 11. Jul. 2012 10:12    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 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




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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

35000 Zeichnungen anfassen ?!

Rechne je Anfassen min 2 Minuten ... schafft 30 Zeichnungen je Stunde .. beim Stundensatz von 30Euro sind das 1 Euro je Zeichnung ... macht ne Summe von 35000 Euro..
Für eine geringere Summe kann man sich sicherlich ein Programm für die Anpassungen schreiben lassen ......

Zu Koordinaten der längsten Polylinie (eines Layouts?) .... via Lisp:
alle PLs einsammln und mittels vlax-curve Funktion Länge ermitteln ... die dann sortieren ...

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

Th-Schultz
Mitglied



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

Beiträge: 18
Registriert: 11.07.2012

AutoCAD 2008
AutoCAD Lt 2009

erstellt am: 11. Jul. 2012 11: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

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




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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

Genauer schildern wäre schon Code schreiben - da deine Lispkenntnisse wohl rudimentärer Art snd  , und das wird mehr als ein 10-Zeiler

Einsammeln geht mit ssget
umwandeln der Objekte in vla-objekte via vlax-ename->vla-object
Länge dann mit (vlax-curve-getdistatparam OBJ(vlax-get-endparam OBJ))

....

Script ist klar .. aber auch das muß mit was gefüttert werden ....
Da bietet sich halt ein Lisp an.
....

Proggen tun einige hier im Forum ....
Cadwiesel / Brischke / Jörn Bosse / CADchup / meine Wenigkeit
.. um nur ein paar zu nennen ... die anderen mögen mir die Nichtnennung verzeihen 

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

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



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Werner-Maahs.de an!   Senden Sie eine Private Message an Werner-Maahs.de  Schreiben Sie einen Gästebucheintrag für Werner-Maahs.de

Beiträge: 626
Registriert: 04.05.2005

Win XP
AC 2005/6
AC 2013

erstellt am: 11. Jul. 2012 13:59    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 Th-Schultz 10 Unities + Antwort hilfreich

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



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

Beiträge: 18
Registriert: 11.07.2012

AutoCAD 2008
AutoCAD Lt 2009

erstellt am: 12. Jul. 2012 07:38    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:
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




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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

Was ist bei dir am weitesten "unten Links" eines Objektes ? Die linke untere Ecke eines parallel zu den Koordinatenachsen liegenden das Objekt umschreibenden Rechtecks?

Was willst du mit den Koordinaten der Blockelemente ... die mußt du doch sicherlich  noch auf das Layoutkoordinatensystem (in Abhängigkeit von Blockreferenzdrehung und Skalierung ) umrechnen (und hoffen, das es bloß eine Referenz des Blockes gibt ....


Was ist mit der Idee , einen neuen Block an den gewünschten Koordinaten einzusetzen, evtl Daten und Eigenschaften vom alten zu übernehmen und dann den alten zu löschen?

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

Bernd P
Ehrenmitglied V.I.P. h.c.
cook-general



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

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



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

Beiträge: 18
Registriert: 11.07.2012

AutoCAD 2008
AutoCAD Lt 2009

erstellt am: 12. Jul. 2012 08:52    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


Demo.jpg

 
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



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

Dieser ist aber in einem Block enthalten

und 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



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

Beiträge: 18
Registriert: 11.07.2012

AutoCAD 2008
AutoCAD Lt 2009

erstellt am: 12. Jul. 2012 09:06    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:
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



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

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



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

Beiträge: 18
Registriert: 11.07.2012

AutoCAD 2008
AutoCAD Lt 2009

erstellt am: 12. Jul. 2012 15:28    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 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



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

Lad' doch mal ein Beispiel hoch...

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

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



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

Beiträge: 18
Registriert: 11.07.2012

AutoCAD 2008
AutoCAD Lt 2009

erstellt am: 16. Jul. 2012 09:36    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


Demo1.dwg


Demo2.dwg

 
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



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

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 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 Th-Schultz 10 Unities + Antwort hilfreich

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

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)2023 CAD.de | Impressum | Datenschutz