| |
 | 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: Attributposition verschieben (1604 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
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: 13530 Registriert: 30.11.2003 .
|
erstellt am: 22. Aug. 2013 13:39 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
    
 Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
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: 22497 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: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 22. Aug. 2013 15:06 <-- editieren / zitieren --> Unities abgeben:         
|
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 22. Aug. 2013 15:09 <-- editieren / zitieren --> Unities abgeben:          Nur für cadplayer
|
Meldin Mitglied
 
 Beiträge: 398 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: 1776 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<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: 398 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: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
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 |