| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Block attribute Verwenden (2562 mal gelesen)
|
SCS Mitglied CAD-Konstrukteur
Beiträge: 32 Registriert: 18.04.2008
|
erstellt am: 08. Dez. 2011 14:24 <-- editieren / zitieren --> Unities abgeben:
Hallo CAD´ler, ich hab nun schon ein bisschen mit Lisp experimentiert...aber so richtig wills nicht zünden. Und zwar hab ich nun folgendes vor. Ich habe immer einen Block in dem ich einen Attribut habe. zB.: Attribut A1 = 50 ich hätte gerne eine Funktion mit der ich diesen attribut einlesen kann, einen bestimmten Layer angebe und er diesen in XX_50 umbennent. Und jenachdem wie der WErt des attributs ist sich der Layername ändert. Ich hab auch schon mehrmals die Suche benutzt. Aber entweder seh ich den Wald vor lauter Bäumen nicht, oder ich such falsch... Danke vielmals für eure Hilfe. Da ich im Moment noch stark am anfang des Lispelns stehe entschuldige ich mich schonmal für evtl. dumme fragen MfG
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 08. Dez. 2011 14:40 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
|
SCS Mitglied CAD-Konstrukteur
Beiträge: 32 Registriert: 18.04.2008
|
erstellt am: 09. Dez. 2011 08:47 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadmium, Sinn des Ganzen ist das ich die Layer auslese und in einem anderen Programm weiterverarbeite. Und anhand der Layernamen bestimmte Aktionen steuere. Und nachdem oft Fehler bei der Namen der Layer passieren oder eben vergessen wird diese zu ändern wollte ich es per attribut automatisieren Und es hakt dahingehen das ich nicht weiss wie ich einen attribut aus einem Block "hernehme". Ziel ist es dann eine Variable zu erstellen die z.B wie folgt aussieht XX_50 das XX_ wird angefügt, und die 50 stammt aus dem Attribut. und dann wird der Layer in XX_50 umbenannt Wieder vielen Dank!
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: 09. Dez. 2011 16:09 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
Zitat: ...ich nicht weiss wie ich einen attribut aus einem Block "hernehme".
z.B.: Code: (setq ename (car (entsel))) = Entityname der Blockreferenz/Insert (entget ename) = Daten der Blkref. (entget (entnext ename)) Daten des 1. Attrib. (entget (entnext (entnext ename)) Daten des 2. Attrib.
... und Code: (strcat "XX_" "50")
ergibt "XX_50" damit kannst Du also Texte verknüpfen, bzw. mit Code: (set)
oder Code: (setq)
erstellst die Variable.HTH
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SCS Mitglied CAD-Konstrukteur
Beiträge: 32 Registriert: 18.04.2008
|
erstellt am: 21. Dez. 2011 13:04 <-- editieren / zitieren --> Unities abgeben:
Hey hey, so bisschen was konnt ich dann mit nachlesen, Hilfe von euch und "zusammensuchen" doch machen. Mein Problem is nun manchmal gehts manchmal nicht...und irgendwie weiss ich nicht wo genau der Fehler ist. evtl. kann mir hier einer von euch helfen.... Vielen Dank (defun c:asd (/ Layer automatisch umbenennen) (setq blockname "DIN_TITLE") (if (setq aws(ssget "X" (list(cons 0 "INSERT")(cons 2 blockname)))) (progn (setq obj (ssname aws 0)) (while (and(setq obj (entnext obj)) (/=(cdr(assoc 0(entget obj)))"SEQEND")) (setq liste (cons (cdr(assoc 1 (entget obj)))liste)))) (alert (strcat"\nEs wurde kein Block \"" blockname"\" gefunden."))) liste) ;*********************************************** Parameter (setq AVS (nth 2 liste)) (setq ARS (nth 18 liste)) (setq VS (list"VS_111")) (setq VS1 (strcat"VS_" AVS)) (setq RS (list"RS_111")) (setq RS1 (strcat"RS_" ARS)) (setq count 0) ;*************************************************Parameter (foreach n VS (if (/= (setq tt(tblsearch "LAYER" n))nil) ;Prüfen ob Altlayer vorhanden (command "_-rename" "_LA" n VS1) ;Altlayer umbenennen ) ;Endif (setq count (1+ count)) ) ;Endforeach (foreach n RS (if (/= (setq tt(tblsearch "LAYER" n))nil) ;Prüfen ob Altlayer vorhanden (command "_-rename" "_LA" n RS1) ;Altlayer umbenennen ) ;Endif (setq count (1+ count)) ))) ;Enddefun Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Dez. 2011 13:52 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
zunächst mal: Ich habe lange eine Formulierung für die Antwort gesucht: Katastrophe ! (sorry)Fragen um dir zu helfen: Wie ist der TAG des 3.Attributes ? Wie ist der TAG des 19.Attributes ? Wo soll nach dem "DIN_TITLE" gesucht werden : im aktuellen Bereich ? im Modell ? im Layout XY ? in der gesamten DWG ? Was ist wenn mehrere im genannten Bereich gefunden werden ? Was ist wenn der alte UND der Neue Layername bereits existiert ? Ich denke dann willst du ein LAYMISCH von alt auf neu , oder ? (das geht aber nicht so einfach, den die Layer stecken sicher auch in Blöcken) noch mal kurz: Im Rahmen der Forenhilfe kommen wir sicher zu einer Lösung mit der du sehr gut leben kannst, SO kann man das was du da zusammenkopiert hast nicht stehen lassen. ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SCS Mitglied CAD-Konstrukteur
Beiträge: 32 Registriert: 18.04.2008
|
erstellt am: 21. Dez. 2011 14:13 <-- editieren / zitieren --> Unities abgeben:
Okay, das es ne Katastrophe ist dacht ich mir schon fast :-/ Aber ich krieg das in den nächsten Tagen sicher gebacken und kann das mit bissl Hilfe und Nachlesen auf meine Bedürfnisse anpassen das es auch eine saubere Sache ist Also die Blockreferenz AM_TITLE ist nur im Modell zu finden. Die Layer existieren immer da diese so in der Vorlage hinterlegt sind. Sollten also nur umbenannt werden. In Blöcken sind die Layer allerdings auch, welche aber erst nach ausführen des lsp erstellt werden. Somit sollte es da keine Probleme geben hoffe ich. Und was meinst du mit "TAG" wenn ich fragen darf?! Also die Attributdefinition wäre A1 was in AVS steht und C1 wird in ARS geschrieben. Falls das die Frage bezüglich der TAGS war. vielen Dank!! [Diese Nachricht wurde von SCS am 21. Dez. 2011 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: 21. Dez. 2011 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
|
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: 22. Dez. 2011 14:14 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
Code: (setq liste (cons (cdr(assoc 1 (entget obj)))liste))))
Du hast die Variable "liste" bisher nicht mit Daten befüllt, die sollte also nil sein. Allerdings ist sie global, könnte also von irgendwo her Daten erhalten haben. Um dann auf die Attributdaten zuzugreifen wäre (cdr (assoc ...)) besser - anstelle von (nth).
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 10. Jan. 2012 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
Hey Leute!!! hab zum thema ein ähnliches anliegen, deswegen mach ich jetzt keinen eigenen thread auf sondern poste hier mit. der befehl nentsel ließt mir ja eigenschaften eines blockes aus. ich kann aber lediglich auf den objektname des blocks zugreifen und nicht mehr. BSP: ich lese mir mit (entget(ssname(ssget "x" '((0 . "insert")))0)) einen block aus. jetzt habe ich die allgemeinen blockdaten aber ich will die einzelnen striche des blocks ändern. ich habs schon mit entnext versucht aber komme leider zu keinem richtigen ergebnis... kann mir jemand sagen wie ichs hinbekomme? wäre sehr dankbar mfg blue 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. Jan. 2012 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
|
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 10. Jan. 2012 20:26 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
|
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 12. Jan. 2012 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
Hab hier wieder mal kleines Problem, hoffe Cadmi oder so kann mir helfen. Das der code: (setq dims (cdr (assoc 2(tblnext "dimstyle" t)))) (while (/= dims nil) (setq dims (cdr(assoc 2(tblnext "dimstyle")))) (entmod (subst (cons 178 256) (assoc 178 (entget (tblobjname "dimstyle" dims))) (entget (tblobjname "dimstyle" dims)) ))) ---> ; Fehler: Fehlerhafter Argumenttyp: stringp nil wenn ich jetzt aber die codes manuell eingebe, also erst: (setq dims (cdr(assoc 2(tblnext "dimstyle")))) und dann den entmod funktioniert alles aber sobald ich die while schleife automatisch laufen lassen will gibt er mir fehlermeldung... hoffe auf hilfe danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Jan. 2012 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
|
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 12. Jan. 2012 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
wollte wg so ner unbedeutenden fragen keinen extra thread aufmachen. ich will ja das dim am ende nil wird und dann die schleife beendet... grund des ganzen is, ich hab über 250 dimstyles und jeder hat eine andere textfarbe. ich will aber jetzt nicht bei jedem manuell die farbe ändern. aber dims wird doch erst am ende der schleife nil, bis dahin müsste doch entmod alle dimstyles bearbeitet haben und dann tritt erst der fehler auf ?!?!?! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Jan. 2012 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
|
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 12. Jan. 2012 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
10 Uniities für deine letzte antwort^^ ne hast ja recht... aber hätte dir genauso ne pm schreiben können mir is grad aufgefallen das die daten alle geändert wurden ABER nach rga und neuzall bleibt die textfarbe Obwohl laut Eigenschaft geändert trotzdem auf gelb ... ?!?!? um dem vorzubeugen, die layerfarbe ist weiß [Diese Nachricht wurde von CADblue am 12. Jan. 2012 editiert.] [Diese Nachricht wurde von CADblue am 12. Jan. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Jan. 2012 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
|
CADblue Mitglied
Beiträge: 117 Registriert: 20.07.2011 ACAD18,Linear19
|
erstellt am: 12. Jan. 2012 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für SCS
wat fürn ding?? schnell und dreckig??^^ dafür gibts gleich nochmal 10 utis^^ ne sorry aber das funktioniert nicht wirklich, muss ja wieder alles manuell wählen. aber evtl kann ich da nochmal was umwerkeln. hab festgestellt wenn ich über die optionsleiste Bemaßung/Bemaßungsstil --> bemaßung auswählen und auf "ändern" klicke dann ohne was zu machen auf "ok" und dann "schließen" ändert es mir alles auf die richtige farbe trotzdem danke cadmi mfg blue Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |