| |
| 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: Information aus Xref (1290 / mal gelesen)
|
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 16. Mrz. 2017 17:12 <-- editieren / zitieren --> Unities abgeben:
Guten Tag ich möchte gern an eine Information ran kommen. Ich habe mehrere Xrefs an einer Zeichnung hängen. Eine bestimmte Xref endet immer mit "_az". Bsp. Zeichnung1 - Xref = test1_az Zeichnung2 - Xref = test2_az usw. die Angehängte Zeichnung endet immer auf "unterstrich a z" und es gibt immer nur eine Xref pro Zeichnung die auf "_az" endet. Ziel: (setq dwgnameaz (*_az)) ;sternchen immer mit entsprechenden Namen versehen. Danke und gruss fmfm
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 16. Mrz. 2017 22:42 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: Guten Tagich möchte gern an eine Information ran kommen. Ich habe mehrere Xrefs an einer Zeichnung hängen. Eine bestimmte Xref endet immer mit "_az". Bsp. Zeichnung1 - Xref = test1_az Zeichnung2 - Xref = test2_az usw. die Angehängte Zeichnung endet immer auf "unterstrich a z" und es gibt immer nur eine Xref pro Zeichnung die auf "_az" endet. Ziel: (setq dwgnameaz (*_az)) ;sternchen immer mit entsprechenden Namen versehen. Danke und gruss fmfm
Eine XRef ist erst mal ein ganz stinknormales Insert, und als solches kannst Du es schnell finden:
(setq sset (ssget "X" '((0 . "INSERT") (2 . "*az"))) Alle damit gefundenen Blockreferenzen kannst Du dann darauf prüfen, welche ein XREF ist. Dazu ist in der Blockdefinition der Gruppencode 70 mit dem Bitwert 4 codiert (typischerweise ist der Wert 36). Ob das der Fall ist, kannst Du einfach mit (logand <70codevalue> 4) prüfen. Ach ja: die Blockdefinition kriegst Du einfach mit (tblobjname "BLOCK" name), und den Namen dafür mit (cdr (assoc 2 (entget <insertentity> ))) aus dem Insert, das in Deinem oben gefundenen Auswahlsatz steht. Wenn der Block ein XRef ist, dann steht unter Gruppencode 1 der komplette Pfadname der referenzierten DWG-Datei.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 17. Mrz. 2017 10:09 <-- editieren / zitieren --> Unities abgeben:
hi Command: (setq dwgnameaz (ssget "X" '((0 . "INSERT") (2 . "*BA")))) <Selection set: 24f> Ich denke ich habe eine Information hier abgespeichert. Bin mir aber nicht sicher wie du es meinst mit dem Auslesen. Wir wäre der Code dafür. Bei einem anderen Thread habe ich mal das gelernt: (setq BLK (tblobjname "BLOCK" "ba")) (setq BLK (entget BLK)) (setq dwgnameba (cdr(assoc 1 BLK))) wenn in ein Stern davor setze, klappt das leider nicht: (setq BLK (tblobjname "BLOCK" "*az")) (setq BLK (entget BLK)) (setq dwgnameaz (cdr(assoc 2 BLK))) lg
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 17. Mrz. 2017 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: hiCommand: (setq dwgnameaz (ssget "X" '((0 . "INSERT") (2 . "*BA")))) <Selection set: 24f> Ich denke ich habe eine Information hier abgespeichert. Bin mir aber nicht sicher wie du es meinst mit dem Auslesen.
In dem Fall solltest Du erst mal einen Lisp-Grundkurs absolvieren.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 17. Mrz. 2017 10:23 <-- editieren / zitieren --> Unities abgeben:
|
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 12:04 <-- editieren / zitieren --> Unities abgeben:
Command: -XREF Enter an option [?/Bind/Detach/Path/pathType/Unload/Reload/Overlay/Attach] <Attach>: ? Enter xref name(s) to list <*>: *_az Xref name Xref Type Path ---------------------- --------- ---------- "freiburg101_4455_-_az" Overlay C:\Deutschland\BW\Freiburg\Denzlingerstrasse\freiburg101_4455_-_az.dwg Total Xref(s): 1 Hallo kann ich nur diese information Abrufen? "freiburg101_4455_-_az" ; das ist der Xrefname Danke Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Apr. 2017 12:34 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
|
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 12:48 <-- editieren / zitieren --> Unities abgeben:
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 10. Apr. 2017 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: ziel:(Setq xref1 (freiburg101_4455_-_az)) Allerdings ist ja der name immer unterschiedlich bis ... "_az"
... und welche Probleme hast Du dabei? Warum befolgst Du nicht meinen Rat, aus dem DXF-Gruppencode 1 der XREFs den kompletten Pfad, oder aus DXF-Gruppencode 2 den Insertnamen auszulesen? Was hindert Dich daran, alle diese Pfade/Blocknamen in einer Liste zu sammeln?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 12:59 <-- editieren / zitieren --> Unities abgeben:
|
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 13:01 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Apr. 2017 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 10. Apr. 2017 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: ich komm nich nachKannst du bitte ein Beispiel machen
Ja, könnte ich. Ich empfehle Dir lieber, Dich erst mal mit den elementaren Grundlagen von Lisp vertraut zu machen. Du hast bisher ja noch nicht eine Frage gestellt, die auch nur ansatzweise mit Lisp zu tun hat. Ganz offensichtlich spekulierst Du darauf, dass Dir hier jemand kostenfrei eine Lösung liefern wird. Aber immer mehr Lisp-Experten folgen hier meinem Prinzip, nur Hilfe zur Selbsthilfe zu geben. Wenn Du dazu nicht bereit bist, dann bist Du hier falsch. [Diese Nachricht wurde von archtools am 10. Apr. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 14:03 <-- editieren / zitieren --> Unities abgeben:
Command: *Cancel* Command: (tblnext "BLOCK" "*az") ((0 . "BLOCK") (2 . "AVE_RENDER") (70 . 0) (4 . "") (10 0.0 0.0 0.0) (-2 . <Entity name: 7ffffb4c2e0> )) und jetzt? da steht nirgends das was ich brauche
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Apr. 2017 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
|
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 17:14 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 10. Apr. 2017 17:25 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: hmm nach langem probieren komme ich leider immer noch nicht auf die Lösung. Weisst du die Lösung?
Probieren ist kein Lösungsansatz. Du solltest dich wirklich mit den Basics befassen. Mit Hilfe derer verstehst du dann auch, die Hilfestellung, die dir hier gegeben wird. Ein Mindestmaß an Wissen ist notwendig, um sich hier gewinnbringend austauschen zu können. Warum dein Probieren nicht zum Erfolg führt, kann ja Ursachen in der Syntax oder dem Verständnis der Funktionen haben - wir wissen es nicht. Darum empfehle ich dir, wenn du die Lösung kurzfristig brauchst, Geld dafür in die Hand zu nehmen, und einen Dienstleister mit der Umsetzung zu beauftrage oder dich in die Basics der Lisp-Programmierung einzuarbeiten. Letzteres ginge natürlich auch mithilfe eines Dienstleisters, was die Zeit der Einarbeitung verkürzen würde. 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 |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 17:31 <-- editieren / zitieren --> Unities abgeben:
wieso wird hier ständig wiederholt das man mit Geld (fast) alles kaufen kann. Glaubt ihr echt wenn meine Firma mir Geld zur verfügung stellen würde, würde ich euch lieber "anbetteln"? So wichtig ist das nicht. Ich muss es einfach manuell machen (mehr wird von mir auch nicht Erwartet).
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 10. Apr. 2017 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: hmm nach langem probieren komme ich leider immer noch nicht auf die Lösung. Weisst du die Lösung?
Die habe ich Dir schon in meiner ersten Antwort genannt. Du musst einen Auswahlsatz bilden, alle Elemente dieses Auswahlsatzes durchlaufen, bei jedem prüfen, ob es Deinen Kriterien genügt, und musst es im Falle des Falles dann in einer Liste sammeln. So eine Vorgehensweise nach einem Rezept nennt man Algorithmus. Diesen brauchst Du jetzt nur noch in eine Lisp-Funktion zu übersetzen. Wenn Du dabei Probleme hast, kannst Du Dich im Einzelfall dann mit Deinem konkreten Problem hierher wenden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 10. Apr. 2017 18:29 <-- editieren / zitieren --> Unities abgeben:
mich irritiert folgendes: ich habe nun Probiert "*12" anstatt "*az" einzugeben Command: (tblnext "BLOCK" "*12") ((0 . "BLOCK") (2 . "zeichnung_ab") (70 . 12) (4 . "") (10 0.0 0.0 0.0) (1 . "zeichnung_ab.dwg") (-2 . <Entity name: 7ffffb60100> ))
dann kommt das was ich brauche aber von einer anderen Xref. Es macht für mich keinen Sinn. dann gebe ich folgendes ein: Command: (tblnext "BLOCK") dann kommt die erste Xref mit Inhalt. Dann gebe ich das ein Command: (tblnext "BLOCK" ) dann kommt die 2te Xref mit Inhalt dann gebe ich das ein: Command: (tblnext "BLOCK" ) bis irgendwann meine richtige Xref aufgezählt wird. dann merk ich mir die Leerzeichen. Öffne eine neue Zeichnung und Probier es dort mit den Leerzeichen, leider funktioniert es nicht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 10. Apr. 2017 18:55 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
AutoCAD-Hilfe (F1) Lispfunktion TBLNEXTDa steht (tblnext table-name [rewind]) Ein Beispiel noch dazu: (tblnext "layer" T) und noch eines (tblnext "block") usw. (Funktion TABELLE rewind) Bei Rewind steht: rewind If this argument is present and is not nil, the symbol table is rewound and the first entry in it is retrieved. Wenn ich deine Zeile ansehe, versuchst du an der Stelle eine Zeichenkette zu übergeben, welche im Grunde ein Namensmuster für Blöcke sein soll. Laut Hilfe und ich echt möchte aber tblnext keinen Blocknamen "oder so ähnlich" von dir haben, sondern nur die Info ob das erste Tabellenobjekt zurückgegeben werden soll, oder das Nächste. Erstelle eine DWG mit 3 Layern und teste direkt in der Befehlszeile: (tblnext "LAYER" T) => ((0 . "LAYER") (2 . "0") (70 . 0) (62 . 80) (6 . "Continuous")) (tblnext "LAYER")?? (tblnext "LAYER")?? (tblnext "LAYER")?? (tblnext "LAYER")nil Oder dann auch mal so: (tblnext "LAYER" T) => ((0 . "LAYER") (2 . "0") (70 . 0) (62 . 80) (6 . "Continuous")) (tblnext "LAYER")?? (tblnext "LAYER" T) => ((0 . "LAYER") (2 . "0") (70 . 0) (62 . 80) (6 . "Continuous")) (tblnext "LAYER")?? (tblnext "LAYER")?? Wenn man eine Lispfunktion (tblnext) auf diese Art und Weise für sich selbst begreiflich macht, dann hat man es drauf und vorallem merkt man es sich dann auch. Damit du später über tblnext durch die Blöcle laufen kannst, bei jedem Block abfragen ob es sich um eine Xref handelt (F1 Thema lesen DXF BLOCK), dafür benötigst du eine Schleifenfunktion.
FOREACH besser WHILE in dem Fall zB. Auch diese Funktion ist in der F1 beschrieben usw. tblnext arbeitet "merkwürdig", aber dennoch: Nach wie vor, oder heute erst recht, rate ich die sehr dazu in dem Tutorial (erneut) auf Seite1 anzufangen und die grundlegendsten Infos (Syntax und bereits die ersten Funktionen) zu lernen. Das Tutorial würde auch weiter gehen und so Aufgaben werden dort auch behandelt. ("Schleife" durch die Tabelleneinträge von Layer und Block etc.) Tutorial, Lisp Referenz, DXF Referenz - das hast du alles schon. Hier mal ne Release14 Lisp-Hilfe in Deutsch als Nachschlagewerk. http://ww3.cad.de/foren/ubb/Forum145/HTML/000395.shtml ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 11. Apr. 2017 10:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadffm Zitat: keinen Blocknamen "oder so ähnlich" von dir haben, sondern nur die Info ob das erste Tabellenobjekt zurückgegeben werden soll, oder das Nächste.
Es gibt Pläne da hängen mehr oder weniger Xrefs dran. Spielt das eine Rolle? Ist dieser Befehl in diesem Fall überhaupt einsetzbar? (Ändert sich die Reihenfolge der Bezeichnungen wenn mehr oder weniger Blöcke vorhanden sind?) Zitat: Erstelle eine DWG mit 3 Layern und teste direkt in der Befehlszeile:
ich bin diese Woche leider nur an einer Station mit Light Version. Schade das es hier nicht funktioniert. Vielleicht komme ich am Donnerstag dazu es zu testen. Ja ich muss mich durch diese 1000 Seiten durchkämpfen, klar macht es mehr Sinn wenn ich hier nicht so "billig" fragen stellen würde. Wenn man aber manchmal einfach nur das Ergebnis sieht, dann kann man oft auch Rückwirkend lernen (wie bisher). Ich schau das ich jetzt mehr Zeit in die Vorlagen und Anleitungen investiere, weil mir das Thema "Lisp" einfach sehr viel Spass macht. Danke und Gruss Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 11. Apr. 2017 11:38 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
na ok ... in der Hoffnung, das es nicht beim Copy&Paste bleibt und du was draus lernst ... hier etwas lerngerecht aufgeblähter Code zum Thema : (defun DT:GET-XREFS(SUCHSTRING / EINTRAG BLOCKDATA BLOCKNAME ISXREF? XREFPFAD LISTE) (or(=(type SUCHSTRING)'STR)(setq SUCHSTRING "*")) (while (setq EINTRAG (tblnext "BLOCK" (null EINTRAG))) (setq BLOCKDATA(entget(tblobjname "BLOCK" (cdr(assoc 2 EINTRAG))))) (setq BLOCKNAME(strcase(cdr(assoc 2 BLOCKDATA)))) (setq ISXREF? (=(logand(cdr(assoc 70 BLOCKDATA)) 4)4)) (setq XREFPFAD(cdr(assoc 1 BLOCKDATA))) (if (and (wcmatch BLOCKNAME (strcase SUCHSTRING)) ISXREF? (=(type XREFPFAD)'STR) ) (setq LISTE(cons (list BLOCKNAME XREFPFAD) LISTE)) ) ) LISTE ) Aufruf dann (DT:GET-XREFS "*az")
------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - 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 |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 11. Apr. 2017 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Dann noch einen Teil der Fragen beantwortet:
Zitat: Es gibt Pläne da hängen mehr oder weniger Xrefs dran. Spielt das eine Rolle?
Nein, mit tblnext geht man durch die Blocktabelle, welche ALLE definierten Blöcke der Datei enthält. Zitat: (Ändert sich die Reihenfolge der Bezeichnungen wenn mehr oder weniger Blöcke vorhanden sind?)
Objekte, auch nicht-grafische Objekte, liegen in ihrer Erstellreihenfolge vor, von daher wäre hier wohl zu antworten: Ja, ändert sich. Daher geht man durch alle Einträge und vergleicht ob der jeweilige Tabelleneintrag mit den eigenen Kriterien überein stimmt, falls JA <mach irgendwas>, falls NEIN, nächster Eintrag..bis zum Ende. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 27. Apr. 2017 17:08 <-- editieren / zitieren --> Unities abgeben:
ich versuchs mal für mich nachvollziehbar zu machen Beispiel: der 3te Block ist meine gesuchte Xref, namens: balu_1234_-_az (tblnext "BLOCK" t) ((0 . "BLOCK") (2 . "abc123") (70 . 12) (4 . "") (10 0.0 0.0 0.0) (1 . "abc123.dwg") (-2 . <Entity name: 7ffffb60100> )) ;frei erfunden (setq block1 (cdr(assoc 2 Block))) ;hab die Unterlagen gerade nicht zur Hand, ich hoffe "(cdr(assoc 2 Block))" das ich das noch richtig in erinnerung habe. (= *az (strcat block1)); ergibt nil ... weitersuchen weil Ergebnis "nil" .... (tblnext "BLOCK") ((0 . "BLOCK") (2 . "abc456") (70 . 12) (4 . "") (10 0.0 0.0 0.0) (1 . "abc456.dwg") (-2 . <Entity name: 7ffffb60100> )) ;frei erfunden (setq block1 (cdr(assoc 2 Block))) (= *az (strcat block1)); ergibt nil ... weitersuchen weil Ergebnis "nil" .... (tblnext "BLOCK") ((0 . "BLOCK") (2 . "balu_1234_-_az") (70 . 12) (4 . "") (10 0.0 0.0 0.0) (1 . "balu_1234_-_az.dwg") (-2 . <Entity name: 7ffffb60100> )) ;frei erfunden (setq block1 (cdr(assoc 2 Block))) (= *az (strcat block1)); ergibt "T" !block1 = balu_1234_-_az Ich hoffe ich hab Theoretisch recht...
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: 28. Apr. 2017 11:04 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
|
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 28. Apr. 2017 11:12 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 28. Apr. 2017 11:54 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: das wort "kot" passt garnicht ins forum
Da irrst du dich. Das Forum145 ist ein Programmier-Forum und in der Programmierung ist es sehr wohl üblich Codes als "Kot" zu betiteln, unabhängig der Programmiersprache. Aber es wird für gewöhnlich nur im Sprachgebrauch genutzt, weniger in Schriftform (nur 3 weitere Treffer im Forum), daher werde ich CADwiesel hiermit rügen: @CADwiesel Bitte formuliere deine Gedanken in schriftlicher Form anders, umgehe das Wort Kot, danke. @fmfm Im Detail (näher wie 2,50m vor dem Monitor) stimmt so ziemlich nichts an den Zeilen, man erkennt nur das der grundsätzliche Ablauf in die richtige Richtung geht. Glaskugel: Du gehst davon aus das (tblnext "BLOCK" t) Daten an ein Symbol mit dem Namen "BLOCK" bindet, dem ist nicht so. (tblnext "LAYER") spricht die Layertabelle an, (tblnext "BLOCK") die Blocktabelle. (setq LayerData (tblnext "LAYER" "list den ersten Layer aus, Layer \"0\"")) - = *az (strcat block1)); ergibt nil // das wird sich so schnell auch nicht ändern, (strcat block1) ist wenig sinnvoll und (= *az wird auch nicht funktionieren(in deinem Fall). -Daher Schritt für Schritt aufbauen und jeden Schritt im in Acad testen.
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 28. Apr. 2017 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 28. Apr. 2017 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
|
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 02. Mai. 2017 18:03 <-- editieren / zitieren --> Unities abgeben:
Zitat: ähmmm ... ein Stück weiter oben steht schon CODE zum (zeilenweise) testen ...
(defun DT:GET-XREFS(SUCHSTRING / EINTRAG BLOCKDATA BLOCKNAME ISXREF? XREFPFAD LISTE) ; dient zur Info? (or(=(type SUCHSTRING)'STR)(setq SUCHSTRING "*")) ;ergibt "T" also muss hier az rein? (while (setq EINTRAG (tblnext "BLOCK" (null EINTRAG))) ;EINTRAG? welcher EINTRAG zb. BLK? (setq BLOCKDATA(entget(tblobjname "BLOCK" (cdr(assoc 2 EINTRAG))))) (setq BLOCKNAME(strcase(cdr(assoc 2 BLOCKDATA)))) (setq ISXREF? (=(logand(cdr(assoc 70 BLOCKDATA)) 4)4)) ;XREF FRAGEZEICHEN? keine Ahnung (setq XREFPFAD(cdr(assoc 1 BLOCKDATA))) (if (and (wcmatch BLOCKNAME (strcase SUCHSTRING)) ISXREF? (=(type XREFPFAD)'STR) ) (setq LISTE(cons (list BLOCKNAME XREFPFAD) LISTE)) ) ) LISTE )
Aufruf dann (DT:GET-XREFS "*az")
Bin total Überfordert. Es fühlt sich an als wäre Montag und Dienstag zugleich. Ich werde mal weiter versuchen hier etwas lesen zu können... Auf einer Skala von 1-10 (10 = sehr lustig) wie lustig findet ihr meine Beiträge? [Diese Nachricht wurde von fmfm am 02. Mai. 2017 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: 02. Mai. 2017 19:03 <-- editieren / zitieren --> Unities abgeben: Nur für fmfm
Zitat: Original erstellt von fmfm: (defun DT:GET-XREFS(SUCHSTRING / EINTRAG BLOCKDATA BLOCKNAME ISXREF? XREFPFAD LISTE) ; dient zur Info? ;;; Nein, dient der Deklaration von Argumenten und lokalen Variablen ;;; Im Tutorial wird dies bereits ab Seite9 angerissen, man kommt also bereits innerhalb der ersten Stunden/Tage dazu. Auf Seite9 anfangen wäre aber wohl das versiegeln eine 8seitigen Wissenslücke.(or(=(type SUCHSTRING)'STR)(setq SUCHSTRING "*")) ;ergibt "T" also muss hier az rein? ;;; dort wird untersucht ob das Argument SUCHTSTRING bereits vorhanden ist (ein String ist), ;;; falls nicht, wird der Suchstring "*" gesetzt. (DT:GET-XREFS nil) würde also SUCHSTRING "*" zur Folge haben. (while (setq EINTRAG (tblnext "BLOCK" (null EINTRAG))) ;EINTRAG? welcher EINTRAG zb. BLK? ;;; Das ist ein sehr eleganter, aber wenig anfängerfreundlicher Weg um tblnext beim ersten mal mit und danach ohne Argument aufzurufen, Klick ;;; Beim ersten Aufruf ist das Symbol/die Variable EINTRAG nicht nicht definiert, also (tblnext "BLOCK" (null nil)) ;;; (null nil) ergibt T, also (tblnext "BLOCK" T) = Erster Eintrag der BLOCKtabelle. ;;; Beim zweiten Aufruf existiert EINTRAG, existiert bedeutet ungleich nil, also WAHR (enthält die tblnext-Daten von (tblnext "BLOCK" T), ;;; also: (null ((0 . "BLOCK") (2 . "MyBlock") (70 . 1) (10 0.0 0.0 0.0) (-2 . <Objektname: 7ff6ad605d50>:nozwinker ) = (tblnext "BLOCK" nil) (setq BLOCKDATA(entget(tblobjname "BLOCK" (cdr(assoc 2 EINTRAG))))) (setq BLOCKNAME(strcase(cdr(assoc 2 BLOCKDATA)))) (setq ISXREF? (=(logand(cdr(assoc 70 BLOCKDATA)) 4)4)) ;XREF FRAGEZEICHEN? keine Ahnung ;;; Dann schau dir die Definition des BLOCK Objektes im DXF an, insbesondere den Gruppencode 70: FollowMeLink! ;;; Wobei man für persönliches Testen der verschiedenen Einträge sich wohl mal einen Tag Zeit nehmen sollte, ;;; denn so ganz eindeutig bzw. dem Benutzer-Vokabular entsprechend sind die Beschreibungen ja nicht. (setq XREFPFAD(cdr(assoc 1 BLOCKDATA))) (if (and (wcmatch BLOCKNAME (strcase SUCHSTRING)) ISXREF? (=(type XREFPFAD)'STR) ) (setq LISTE(cons (list BLOCKNAME XREFPFAD) LISTE)) ) ) LISTE ) Aufruf dann (DT:GET-XREFS "*az")
---schnipp--- Auf einer Skala von 1-10 (10 = sehr lustig) wie lustig findet ihr meine Beiträge? Ich würde es nach heutigen Erkenntnissen mit einer 2 auf der Lustigkeitsskala bewerten. [/i]
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fmfm Mitglied Facility Management
Beiträge: 279 Registriert: 18.10.2016 AutoCad 2019
|
erstellt am: 18. Mai. 2017 11:34 <-- editieren / zitieren --> Unities abgeben:
|