| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Probleme gesucht... (2259 mal gelesen)
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 05. Apr. 2003 00:12 <-- editieren / zitieren --> Unities abgeben:
für meine Lösungen;-) In Kürze soll meine 4. Website zum Thema AutoLisp an den Start gehen, und zwar - unter dem Titel 'Praxis' - über alles zum Thema Blöcke und Attribute. Bisher habe ich folgende Themen fertig bzw. in Arbeit: Auswahl von Blöcken mit ssget Auswahl anhand von Attribut(wert)en Auswahl anhand von Geometrie-Eigenschaften Erzeugen von (anonymen) Blöcken Redefinieren von Blöcken Hinzufügen/Entfernen von Attributen Synchronisieren von vorh. Inserts Synchronisieren der Definition Synchronisieren/Zurücksetzen von Attributen Regular Expressions in Attributen Erstellen von Listen mit Attributwerten (->Stücklisten) Quast-Funktionen (Atrribute [wie] mit dem Quast übertragen usw.) Das Ganze wird dann eine Lisp-Funktionsbibliothek, mit der man hoffentlich jede gängige Aufgabenstellung zum Thema mit 10-20 Codezeilen erschlagen kann. Es soll aber keine Konkurrenz zu den Expresstools werden, die einen Teil dieser Funktionalität auf Anwenderebene bieten, sondern eben Funktionen für Lisper. Wer da noch Aufgabenstellungen beisteuern kann, bitte im HIER und JETZT melden. Alles, was Sinn macht - aber bitte nicht 'wie kriege ich hin, dass bei allen Inserts der Kreis rot ist, nur bei einem soll er grün sein'. Das geht nicht, wissen wir, akzeptieren wir doch, oder? Ich hoffe aber auf zahlreiche sinnvolle Vorschläge, die ich aufgreifen und umsetzen kann. Je mehr Beteiligung da ist, umso interessanter wird (hoffentlich) das Ergebnis. Gruss, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 05. Apr. 2003 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Hi Axel, ich hab' da eines... Und zwar geht es um String-Handling. Die Verarbeitung von (get[irgendwas] Funktionen ist mir bisher nicht richtig mit dynamischen Werten gelungen. Beispiel: Ich erzeuge 'ne Liste von Textstilen aus 'ner Datei. Diese Textstile möchte ich nun via getkword (Über Kommandozeile oder Rechtsklick-Menü) ansprechen können. Damit das vernünftig funktioniert, muß im initget-String ja Eindeutigkeit bezüglich der Optionswahl herrschen. Die Optionswahl wird in der Kommandozeile ja über 'n Shortcut realisiert, d.h. über den (die) Buchstaben die Uppercase geschrieben sind. z.B. "Standard sTandard1 stIl1 stiL2 stil3 STil4 sTIl5 stIL6 stiL7 stil7 STIl8 sTIL9 ..." usw. Also ein Ding, was mir aus 'ner Liste von Strings eine Liste zurückgibt in der jeder Uppercase-Shortcut eindeutig ist, wobei ein solcher Shortcut ja durchaus mehr als ein oder zwei Zeichen haben könnte. Auch wenn es keinen Sinn machen würde so einen initget-string mit hunderten von Werten zu erstellen, geht es mir um eine Lösung die immer passt. Egal wie lang die Liste wäre. Natürlich darf die Ausgangsliste keinerlei doppelte Eintragungen enthalten (da wäre eine Eindeutigkeit ja irgendwann nicht mehr realsierbar["Wo" "wO" "WO" -> Schluß, aber das ist nicht der Kern des Problems. Es geht nur um o.g. Problemlösung. ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 05. Apr. 2003 20:54 <-- editieren / zitieren --> Unities abgeben:
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 05. Apr. 2003 21:45 <-- editieren / zitieren --> Unities abgeben:
Marc, hab das mal auf die Schnelle gemacht. Es scheint plausibel, unter der Voraussetzung, dass nach strlen vorsortiert wird. Ohne diese Sortierung baut man sich ein Deadlock ein, wenn am Ende ein kurzes kword kommt und alle Kombinationen schon vergeben sind. Kann dir aber nicht sagen, ob das *garantiert* immer funktioniert. Da müsste man sich tief reindenken und ein paar Beweise antreten. (defun mk-shortcuts(los / used _str2list) (setq los (vl-sort los (function(lambda(s1 s2 / )(<(strlen s1)(strlen s2)))) ) ) (mapcar (function (lambda(str / loc done l m n) (setq l(strlen str)m 1 n 1) (while(not done) (if(not(member(substr str m n)used)) (progn (setq used(cons(substr str m n)used)) (setq str(cons str(substr str m n))) (setq done 1) ) (progn (setq m(1+ m)) (if(> m l)(setq m 1 n(1+ n)l(1- l))) ) ) ) str ) ) los ) ) Testen: (mk-shortcuts '("abcde" "defgh" "abg" "abcd" "bca" "cb" "abcdf" "abcg" "abcf" "ab" "abc" "bcaf" "bcfa" "abcef")) ==>>> (("cb" . "c") ("ab" . "a") ("abg" . "b") ("bca" . "bc") ("abc" . "ab") ("abcd" . "d") ("abcg" . "g") ("abcf" . "f") ("bcaf" . "ca") ("bcfa" . "cf") ("abcde" . "e") ("defgh" . "h") ("abcdf" . "cd") ("abcef" . "ce")) Teste mal mit grösseren Mengen, wenn's nicht klappt, noch mal fragen! Gruss, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 05. Apr. 2003 21:50 <-- editieren / zitieren --> Unities abgeben:
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 06. Apr. 2003 13:31 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Hi Axel, erstmal Danke für den Lösungsansatz. Sieht gut aus bisher, ich hab's mal mit 'ner Liste aus 580 Layern laufen lassen. Das hat geklappt. Ich denke das reicht aus. Einzige Sache die mir auffiel: Bestimmte Sonderzeichen müßten ausgenommen werden, da kann man bei manchen keinen Unterschied zwischen Upper- und Lowercase sehen (logisch: was soll auch schon aus "$" oder "_" oder "-" werden....). Aber das steht auf'm anderen Blatt. Ich hatte schon so etwas ähnliches wie Du gebastelt, mir das jedoch wie üblich zu kompliziert gemacht (mit'm wcmatch-Vergleich wobei sich der Pattern dynamisch verändert...). Jedoch lief mein Ding nicht mit jeder Liste und hat so ab 60 Einträgen Mist gebaut. Zum zweiten: Sorry irgendwie hab' ich Deinen ursprünglichen Post hier etwas mißverstanden. Ich habe wohl nicht aufmerksam genug gelesen, dachte es geht um "Praxis" allgemein... Ist eigentlich mein XRef-Suche Problem auch ein Ding was in Deine Kategorie "Praxis" fällt? 'n Xref ist ja im Grunde genommen auch nur 'n Block?! ;-) ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 06. April 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 06. Apr. 2003 23:47 <-- editieren / zitieren --> Unities abgeben:
Zu 1: Ich wollte dir ja auch nicht die ganze Arbeit abnehmen, sondern nur mal das liefern was ich da so als Algo sehe - deswegen ist auch noch gar kein strcase drin, sondern werden nur die dotted pairs geliefert. Wenn du bestimmte Zeichen ausnehmen willst, handelst du dir eine Menge Probleme ein - aber natürlich hast du Recht: Grosse Dollars macht z.Zt. Bush im Irak, aber ein ASCII-Zeichen gibts dafür nicht. Die Probleme musst du im Vorfeld klären: Eine Asso-Liste erstellen: ( (<ungereinigt> . <gereinigt> ) ...) z.B. ( ("thisone|thatone" . "thisonethatone") ...) Mit mapcar'cdr kannst du dann die Hotkeys anfordern, z.B.: ( ("thisonethatone" . "is") ...) und dann musst du über die Assoliste auf die ungereinigte Version zurück: ( ("thisone|thatone" . "is") ...) Und dann erst kannst du strcasen: ( "thISone|thatone" ...) Das kannst du mit (str-replace(car pair)(strcase(cdr pair))) machen (gibts bei mir auf den blauen Seiten). Wenn es ausschliesslich um Layer aus einer Tabelle geht, kannst du Duplicates von vernherein ausschliessen - das hat AutoCad dann schon getestet. Wenn die Datenherkunft aber nicht integer ist, musst du sowas natürlich ausgiebigst überprüfen - wenn da dups drin sind, geht das natürlich in die Hose. Die dups kriegen nicht den selben key - daher wird die Funktion i.d.R. abstürzen, wenn die Buchstaben ausgehen. Meine Funktion testet keinerlei Underflow, sie verlässt sich drauf, ordentliche Daten zu kriegen. Allerdings musst du nach dem Reinigen auf dups kontrollieren: sowas wie ("this$one" "this|one" ...) darf in den Daten nicht vorkommen, weil beide zu "thisone" werden. Übrigens: Sicher ist das Ganze nicht! Ich schicke dir morgen mal einen Absturzbeweis. Das heisst nicht, dass die Funktion eine Macke hat, es heisst, dass dieses System der Hotkeys so nicht 100% funktioniert. Zu 2: Ja und nein, weiss noch nicht so genau - deswegen dauert's auch so lange;-))) Kannst du mir dazu mal Daten schicken? Mit ein paar Testdaten komme ich nicht auf das Problem - ich finde nur Kleinigkeiten. Entweder du generierst welche - oder du schickst echte, da würde ich dann lieber vorher ein Agreement ausmachen und unterschreiben. Solltest du mit deiner Fürma abklären. Gruss, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... 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: 07. Apr. 2003 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Hallo Axel, hat eigentlich mehr was mit Texten, insofern auch mit den Attributen zu tun. Das PCRE ist ja eine tolle Sache. Genial wäre es dazu eine SUB zu haben, die die Window's Joker in die entsprechenden Zeichenketten passend zum PCRE umbaut. Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! Neue Tool's im Free-&Download Zugang zum Download schon gesichert? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 07. Apr. 2003 09:56 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Hi Axel, wenn Du Demo-Daten willst, die einer realistischen Suche bei uns entsprechen, muß ich Dir 'ne Mail schicken die ca. 12MB groß ist. Möchtest Du die haben? Wenn ja, schick ich sie Dir rüber. Ansonsten sag ' ich Dir den ca. Umfang Objekte / Texte. Sach wat Hans ;-) ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 08. Apr. 2003 10:24 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Servus Axel Falls es nicht schon beim "Redefinieren von Blöcken" eingeflossen ist: Die Funktion "ATTREDEF" gibts ja schon - aber einige Male hätte ich mir schon gewünscht, dass sie die "neuen" Attribute an der alten Position, Größe, Drehung, etc. eingefügt werden. --- Du hast mir seinerzeit bei einer Funktion geholfen, die das Einfügen von Blöcken unabhängig von der Attributanzahl ermöglicht. Es sollten dabei die Attributswerte namentlich abgefragt werden. Es sind dann folgende Funktionen entstanden - vielleicht sind sie auch die bessere Beschreibung: ;*************************************************** ;liefert für den übergebenen Blocknamen eine Liste der Attributsanfragen (defun attriblist (blkname / elist ename atrdeflist art atrname attlist) (setq attlist nil) (setq elist (tblsearch "BLOCK" blkname)) (setq ename (cdr (assoc -2 elist))) (while ename (setq atrdeflist (entget ename)) ;datenliste (setq art (cdr (assoc 0 atrdeflist))) (if (= art "ATTDEF") (progn (setq atrname (cdr (assoc 3 atrdeflist))) ; attributanfrage (setq attlist (cons atrname attlist)) ) ) (if (setq ename (entnext ename)) ; weitere? (setq atrdeflist (entget ename)) ) ) (setq attlist (reverse attlist)) ) ;---------------------------------------- ;zusammen mit der obigen Funktion (attriblist) fügt diese Funktion ;Blöcke ein. Die Funkt. (attriblist) ermittelt die Anzahl der Attribute, ;sodass mit (insauto) Blöcke mit beliebig vielen Attributen eingefügt werden können (defun insauto (blkname einfpkt skal richt / attlist attwert) (setq attfrage (car (setq attlist (attriblist blkname)))) (command "_-INSERT" blkname einfpkt skal "" richt) (while attlist (if (/= attfrage "") (progn (setq attwert (getstring (strcat "\nBitte " attfrage " eingeben: "))) (command attwert) ) ) (setq attfrage (car (setq attlist (cdr attlist)))) ) ) ;*************************************************** Passt das zu Deinem Thema? Mehr fällt mir im Moment auch nicht ein. Gruß, Ernst
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 08. Apr. 2003 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Hi Axel, klingt ja schon sehr umfangreich, was Du da vor hast. Vielleicht wären auch verschachtelte Blöcke und ihre Analyse ein Thema für Dich. Und xrefs? Sind ja spätestens nach dem Binden auch nur Blöcke. Hier wäre vielleicht die (mögliche) Zuschneideumgrenzung des ehem. xrefs interressant. Ansonsten freue ich mich schon auf das Thema! ------------------ www.cadditions.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 11. Apr. 2003 08:26 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Servus Axel Mir ist doch noch was eingefallen: Ich hab manchmal andere Zeichnungen (zB ein früherer Plan) als Block in meinen Zeichnungen und würde gern einzelne Objekte daraus durch Anklicken in meine neue Zeichnung übernehmen. Bei Linien, Kreisen etc. kein Problem - (nentsel) liefert mir ja die Daten. Fällt Dir auch was ein, wie man auch einen Block aus dem Block (der anderen Zeichnung) übernehmen kann? Gruß, Ernst
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: 11. Apr. 2003 08:51 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
|
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3336 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 11. Apr. 2003 09:45 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 14. Apr. 2003 12:23 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Servus @ Holger WBLOCK? meinst Du "als WBLOCK speichern und in der neuen Zeichnung einfügen"? @ CADchup Copy Nested Entities kopiert keine kompletten Blocks, sondern nur die einzelnen Teile davon. In der beigefügten "Zeichnung-neu.dwg" wurde die "Zeichnung-alt.dwg" als Block eingefügt und über die Punkte 1 und 2 eingepasst. Die "Zeichnung-alt" ist also geringfügig gedreht und skaliert. Sie enthält mehrere Linien und Blocks namens "GDK10" sowie einen Block "NORD2". Jetzt würde ich gerne zB. den Punkt A anklicken um ein Duplikat (komplett mit Ringerl und Attributen) in die "Zeichnung-neu" zu übernehmen (oder den Nordpfeil oder eine Linie). Die Position sollte sich dabei nicht ändern. Der Block "Zeichnung-alt" wird schließlich gelöscht. Punkt A sollte dann als Block "GDK10" in "Zeichnung-neu" verbleiben. Gruß, Ernst Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 15. Apr. 2003 09:38 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
hallo axel, du suchst problem hier sind zwei: 1.) blöcke mit objektdaten/-sach und referenzen tauschen eine möglichkeit auch blöcke so auszutauschen, das bestehende objektdaten/-sach bzw. referenzen auch auf den neuen block übertragen werden. 2.) blöcke verlieren attribute es gibt manchmal das phänomäne dass blöcke die zugehörigen attribute (ich glaube das war der fall, wenn der alte block keine attribute hat und der neue welche enthält - bin mir aber nicht mehr ganz sicher) verlieren. füge ich nun diesen neuen block an einer neuen stelle in der zeichnung ein, dann hat dieser alle definierten attribute - nur der ausgetauschte block nicht. jetzt suche ich einen weg den getauschten blöcken die attribute wieder zu verpassen. vielleicht sind diese fragen für deine neue seiten interessant ! wie wird die dann eigentlich heißen und ab wann wird man sich mal auf die lauer legen können ?? gruß Jan :-) ------------------ jan :-) 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: 15. Apr. 2003 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
@Geos, Zitat: Original erstellt von Geos: @ Holger WBLOCK? meinst Du "als WBLOCK speichern und in der neuen Zeichnung einfügen"?
Ja, das meine ich. Grüße Holger @Jan zu 1)Wenn Du Datenbanken meinst, dann wird das, meiner Meinung nach, schierig, da ja eine eindeutige Zuordnung erfolgen muß. Diese wird meist durch die Object-ID (GC 5) gemacht. Wie du sicher weist, wird diese von AutoCAD vergeben und nicht beeinflußbar. Wenn die Zuordnung jedoch über etwas anderes gemacht wird, dann sehe ich da viele verschiedene Möglichkeiten, die in der Regel dann wieder so spezifisch sind, dass sich kein Allgemeintool dafür schreiben läßt. 2) Da mir kein Weg bisher bekannt ist, Attribute per Lisp zu einem eingefügten Block hinzuzufügen, außer den Block neu zu definieren, gehe ich meist folgenden, unterstützt durch ein Tool, Weg. Das neue Blocklayout mit Attributen definieren(zeichnen) als Wblock mit dem Namen des eigentlich zu tauschenden Blockes abspeichern, und dann diesen Block überall dort einsetzen, wo der alte Block gefunden wird. Dieses Einsetzen und Austauschen erfolgt mit LISP - Beschreibung kannst Du Dir auf meinen Seiten (www.cadlon.de) im Download 3.letztes Programm BTAUSCH ansehen. oder http://www.cadlon.de/Freedwnload/B_Tausch.pdf Bin aber auch gespannt, ob und wenn wie eine Lösung für deine Probleme durch Axel ausschaut. Bei Fragen ... Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! Neue Tool's im Free-&Download Zugang zum Download schon gesichert? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 16. Apr. 2003 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Servus Axel Hier habe ich noch einen Nachschlag zum Thema "Block im Block": In der beigefügten Zeichnung befinden sich (außerhalb des Rechtecks) ein Text, ein INSERT mit 1 Attribut und ein INSERT mit 2 Attributen. Das INSERT/die Zeichnung innerhalb des Rechtecks enthält auch wieder INSERTS mit Attributen. Die nachfolgende Funktion kann durch Anklicken sowohl den Textwert, sowie die Attributwerte der INSERTS liefern, egal ob innerhalb oder außerhalb des Rechtecks (INSERTS). Es gibt allerdings Schwächen: Bei INSERTS mit 2 Attributen muß das 1. Attribut angeklickt werden. Die Funktion liest nur 2 Attribute. (Ich weiß Axel, die Funktion ist noch nicht optimiert - weniger setq's, lokale Variablen, etc. ) (defun lesen () (setq obj (entsel)) (setq pickpkt (cadr obj)) (setq elist (entget (car obj))) (cond ((= "TEXT" (cdr (assoc 0 elist))) (setq gstnr (cdr (assoc 1 elist))) ) ((= "INSERT" (cdr (assoc 0 elist))) (setq elist (entget (car (nentselp pickpkt)))) (cond ((= "TEXT" (cdr (assoc 0 elist))) (setq gstnr (cdr (assoc 1 elist))) ) ((= "ATTRIB" (cdr (assoc 0 elist))) (setq gstnr (cdr (assoc 1 elist))) (setq elist (entget (entnext (cdr (assoc -1 elist))))) (if (= "ATTRIB" (cdr (assoc 0 elist))) (setq gstnr (strcat gstnr "/" (cdr (assoc 1 elist)))) ) ) ) ) (T (princ (strcat "\nDu hast eine " (cdr (assoc 0 elist)) " angeklickt ")) (setq gstnr nil) ) ) gstnr )
Vielleicht hast Du eine Idee, wie man die Einschränkungen wegbekommt. Gruß, Ernst 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: 16. Apr. 2003 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
Hallo Geos, wenn du den Wert des/der gepickten Textes/Attrib's haben möchtest, dann geh doch gleich mit nentsel drauf. Habe mal etwas code getippst, der eigentlich das machen sollte, was du möchtest. Habe das nur hier runter geschrieben, kann also sein, dass kleine Fehler drinnen sind bzgl. Klammern..?
Code:
(defun c :picktext ( / text) (while (not text) (princ "\nText oder Attribut wählen: ") (setq text (lesen)) ) (princ "\ngefundener Text:") (if (= (type text) 'STR) (princ text) (mapcar '(lambda (TX) (terpri) (princ TX) ) (reverse text) ) ) (princ) ) (defun lesen ( / el etyp) (setq el (car(nentsel)) etyp (cdr(assoc 0 (entget el))) ) (cond ((= etyp "TEXT") (cdr(assoc 1 (entget el))) ) ((= etyp "ATTRIB") (get_attribwerte (cdr(assoc 330 (entget el)))) ) ) ) (defun get_attribwerte (att / attwli) (while (/= "SEQEND" (cdr(assoc 0 (entget(setq att (entnext att)))))) (setq attwli (cons (cdr(assoc 1 (entget att)))attwli)) ) )
Bei Fragen ... Grüße Holger ------------------ Holger Brischke CADlon - Lisp over night! Neue Tool's im Free-&Download Zugang zum Download schon gesichert? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tappenbeck Mitglied Vermessungsingenieur
Beiträge: 1217 Registriert: 30.05.2002 AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net
|
erstellt am: 17. Apr. 2003 15:40 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
noch ein osterei aus hamburg: ermitteln aller vorkommenden attribute auf basis eines blocknamen(filters - * ist zugelassen) du wirst sicherlich eine kürzere version erstellen als ich - meine oster aufgabe ! gruß Jan :-) ------------------ jan :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 18. Apr. 2003 08:01 <-- editieren / zitieren --> Unities abgeben: Nur für mapcar
|