| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Attributposition verschieben (1378 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 22. Aug. 2013 13:31 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich möchte gern die Position eines Attributes in mehreren Blöcken gleichzeitig verschieben. In meiner Zeichnung befinden sich Blöcke mit und ohne Attributen, dehalb habe ich zunächst eine Funktion, die mir alle Blöcke MIT Attributen rausfiltert. Als Ergebnis habe ich eine Blockliste als Block im VLA-format und dessen Richtungswinkel. Wenn ich diese Funktion so ausführe verschiebt es mir den Block (bei Auswahl nur mit Attribut) Code: (foreach x werte (setq attr (getattributes (vlax-vla-object->ename (car x)))) (setq ent (entmod (subst (cons 10 (polar (cdr (assoc 10 attr)) (+ (/ pi 2)(cdr (assoc 50 attr))) -1)) (assoc 10 attr) attr ) ) ) (entupd (cdr (assoc -1 ent))) )
Dagegen wenn ich gleich eine Liste erstelle mit allen Blöcken mit Attributen, dann werden die Attribute nur einmal verschoben. Ich müsste also die Position des Attributes nach der Verschiebung zwischenspeichern, um es bei wiederholten Aufruf erneut verschieben zu können Code: (foreach x (getAttrListe werte) (setq ent (entmod (subst (cons 10 (polar (cdr (assoc 10 x)) (+ (/ pi 2)(cdr (assoc 50 x))) 1)) (assoc 10 x) x ) ) ) (entupd (cdr (assoc -1 ent))) )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 22. Aug. 2013 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 22. Aug. 2013 14:43 <-- editieren / zitieren --> Unities abgeben:
Naja ist keine richtige Lösung für mich. Anhand diesem Schnipsel lässt sich ermitteln ob ein Block Attribute hat. Jetzt bräuchte ich einen Tip, was ich einbauen müsste damit mir meine Hauptfunktion nicht abbricht, wenn mal ein Block keine Attribute hat (also einfach auslässt).
Code: (defun getattributes (ent) (while (and (setq ent (entnext ent) eg (entget ent)) (not (= "SEQEND" (CDR (ASSOC 0 EG)))) ) (if (= "ATTRIB" (cdr (assoc 0 eg))) eg ) ) )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 22. Aug. 2013 14:56 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Es macht keinen Spaß mehr Dirk, en Code selbst schaue ich mir nicht an, aber: Eine Blockreferenz hat den GC66 (mit dem Wert 1) wenn variable Attribute anhängen, also kannst du in eine Routine den gc66 abfragen, wenn vorhanden -> bearbeiten, wenn nicht -> übergehen. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 22. Aug. 2013 15:06 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 22. Aug. 2013 15:09 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 22. Aug. 2013 16:23 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Ich verstehe noch nicht einmal das: Code: (vlax-vla-object->ename (car x))
Warum verbiegt man sich ein VLA-Objekt in ein Entity Man hat doch eigentlich alles im VLA-Objekt. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 22. Aug. 2013 17:35 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo, noch eine Anmerkung an Wolfgang: wenn das VLA-Objekt bereits da ist, dann geht folgendes: Code:
(defun JBf_list_att_aus_block_vla-obj(vla-obj / A) (if (=(vla-get-hasattributes vla-obj):vlax-true) (mapcar '(lambda(A)(list(strcase(vlax-get A 'TagString))A)) (vlax-safearray->list (vlax-variant-value(vla-getattributes vla-obj)))) ))
Als Rückgabe erhalte ich bei Vorhandensein von Attributen eine Liste mit den VLA-Objekten, den AttNamen vorangestellt, damit ich mit ASSOC drauf zugreifen kann. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Kordinaten einlesen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 22. Aug. 2013 17:38 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo ja mir ist es klar wie ich es auch geschrieben habe Zitat: Man hat doch eigentlich alles im VLA-Objekt.
Ich wollte wissen warum man zwischen den Elementen so hin und her springt. Galt auch mehr als Hinweis! ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. [Diese Nachricht wurde von Meldin am 22. Aug. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 23. Aug. 2013 08:47 <-- editieren / zitieren --> Unities abgeben:
So gesagt mein rumgemorkse zwischen DXF- VLA-objekt hat damit zu tun, das ich mit dem DXF-Obj vertrauter bin. Find ich gut, deine Funktion Jörn, das hilft mir auf jeden Fall weiter im Lernprozess. Demzufolge Wolfgang spitze Hinweis. Danke an alle 10´unterwegs ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |