Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Block über Attribut auswählen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Block über Attribut auswählen (1956 mal gelesen)
strich
Mitglied
Landespfleger


Sehen Sie sich das Profil von strich an!   Senden Sie eine Private Message an strich  Schreiben Sie einen Gästebucheintrag für strich

Beiträge: 57
Registriert: 13.11.2002

AutoCAD2005,
AutoCADMap2011
WindowsXP/Vista/7

erstellt am: 18. Nov. 2004 07:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo allerseits,

ich habe in einer Zeichnung mehrere Blöcke. Die Blöcke sind jeweils gleich, nur die Attributwerte unterscheiden sich. Gibt es eine schnelle Möglichkeit, alle Blöcke mit den jeweils gleichen Attributwerten auszuwählen?
Die Auswahl in AutoCAD (Version 2005) reicht ja nicht so weit

Mit freundlichen Grüßen

Strich

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


Sehen Sie sich das Profil von gmk an!   Senden Sie eine Private Message an gmk  Schreiben Sie einen Gästebucheintrag für gmk

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 18. Nov. 2004 13:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für strich 10 Unities + Antwort hilfreich

was sind für dich attributwerte? (i.d.R. gc1)

der inhalt eines attributs mit der bezeichnung xy?
der inhalt eines beliebigen attributs?
die bezeichnung des attributs selbst?

ciao georg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2490
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: 18. Nov. 2004 14:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für strich 10 Unities + Antwort hilfreich

Hi Strich,
Versuche es mal mit dem Code hier:
(als *.lsp Datei speichern, in Acad laden und mit GETINSERTSBY-VALUE starten!)
Code:

(defun C:GETINSERTSBY-VALUE (/ QUESTION SEARCHSTRING WHAT?)
(sssetfirst)
(if (not $$GLOBAL-LAST-SEARCHSTRING)
(setq QUESTION
"\nBitte Such-Text eingeben (wcmatch-Wildcards zulässig): "
)
(setq QUESTION
(strcat
"\nBitte Such-Text eingeben (wcmatch-Wildcards zulässig) <"
$$GLOBAL-LAST-SEARCHSTRING
">: "
)
)
)
(setq SEARCHSTRING (getstring 't QUESTION))
(cond
((and (equal SEARCHSTRING "") $$GLOBAL-LAST-SEARCHSTRING)
(setq SEARCHSTRING $$GLOBAL-LAST-SEARCHSTRING)
)
((not (equal SEARCHSTRING ""))
(setq $$GLOBAL-LAST-SEARCHSTRING SEARCHSTRING)
)
('t (setq $$GLOBAL-LAST-SEARCHSTRING NIL))
)
(if (not $$GLOBAL-LAST-SEARCHSTRING)
(princ "\nKein Such-Text eingegeben, Funktionsende.")
(progn
(initget "Attributname attributWert")
(if (not (setq WHAT?
(getkword
"\nIn welchem Bereich soll der String gesucht werden? [Attributname/attributWert] <attributWert>: "
)
)
)
(setq WHAT? "attributWert")
)
(if (equal WHAT? "Attributname")
(setq WHAT? (DT:OBJECTLIST->SELSET
(FINDBLOCKSWITHATTDEFLIKE
(list $$GLOBAL-LAST-SEARCHSTRING)
)
)
)
(setq WHAT? (DT:OBJECTLIST->SELSET
(FINDBLOCKSWITHATTVALLIKE
(list $$GLOBAL-LAST-SEARCHSTRING)
)
)
)
)
(if WHAT?
(progn
(sssetfirst WHAT? WHAT?)
(princ "\nOK, gefundene Inserts markiert...")
)
(princ "\nKEINE Inserts für Such-Text gefunden...")
)
)
)
(princ)
)


;;; Findet Blöcke im aktuellen Bereich, deren Attributdefinitionen einen bestimmten Namen haben
(defun FINDBLOCKSWITHATTDEFLIKE (LISTOFATTNAMES /)
(FINDBLOCKSWITH-BASE LISTOFATTNAMES 'car)
)

(defun FINDBLOCKSWITHATTVALLIKE (LISTOFVALUES /)
(FINDBLOCKSWITH-BASE LISTOFVALUES 'cdr)
)

;; Findet Strings in Inserts (wcmatch-like)
;; Verwendet die Liste die Funktion "ALL-BL-TXT"
;; zurückgibt -> '(("ATTNAME" . "ATTVALUE")(...))
;; SYMBOL gibt an, was denn nun relevant ist,
;; das 'car oder das 'cdr des punktierten Paares
(defun FINDBLOCKSWITH-BASE (LISTOFSTRINGS SYMBOL /)
(setq VGLSTR (MS_STRDELIMITED LISTOFSTRINGS ","))
(if (setq
SGET (ssget "x"
(list (cons 0 "Insert") (cons 410 (getvar "ctab")))
) ;_ end of ssget
) ;_ end of setq
(if (setq SGET (DT:SELSET->VLA-OBJECTLIST SGET))
(if (setq SGET
(vl-remove-if-not
(function
(lambda (X)
(= (VLAX*GET-PROPERTY X 'HASATTRIBUTES) :vlax-true)
) ;_ end of lambda
) ;_ end of function
SGET
) ;_ end of VL-REMOVE-IF-not
) ;_ end of setq
(progn
(setq SGET
(mapcar
(function
(lambda (X) (list X (mapcar SYMBOL (ALL-BL-TXT X))))
) ;_ end of function
SGET
) ;_ end of mapcar
) ;_ end of setq
(if (setq SGET
(vl-remove-if-not
(function
(lambda (X)
(vl-member-if
(function (lambda (Y) (wcmatch Y VGLSTR)))
(cadr X)
) ;_ end of vl-member-if
) ;_ end of lambda
) ;_ end of function
SGET
) ;_ end of vl-remove-if-not
) ;_ end of setq
(setq SGET (mapcar 'car SGET))
(setq SGET NIL)
) ;_ end of if
) ;_ end of progn
) ;_ end of if
) ;_ end of if
) ;_ end of if
SGET
)

(defun MS_STRDELIMITED (LST TOKEN /)
(vl-string-right-trim
TOKEN
(apply 'strcat
(mapcar '(lambda (X) (strcat X TOKEN)) LST)
) ;_ end of apply
) ;_ end of vl-string-right-trim
)

(defun DT:SELSET->VLA-OBJECTLIST (SELSET / RETVAL)
(if (eq (type SELSET) 'PICKSET)
(if (setq RETVAL (DT:SELSET->ENAMELIST SELSET))
(setq RETVAL
(mapcar (function (lambda (X) (->VLA-OBJECT X))) RETVAL)
) ;_ end of setq
) ;_ end of if
) ;_ end of if
RETVAL
)

;;; z.B. (DT:SELSET-LIKE-DEFINITION (list (cons 0 "IMAGE")(cons 8 "*$BILD$@*")))
(defun DT:SELSET->ENAMELIST (SELSET / INDEX RETVAL)
(if (eq (type SELSET) 'PICKSET)
(progn
(setq INDEX 0)
(repeat (sslength SELSET)
(setq RETVAL (cons (ssname SELSET INDEX) RETVAL)
INDEX (1+ INDEX)
) ;_ end of setq
) ;_ end of repeat
) ;_ end of progn
) ;_ end of if
retval
) ;_ end of defun

(defun DT:OBJECTLIST->SELSET (OBJECTLIST / SGET)
(gc)
(if (setq OBJECTLIST
(vl-remove-if
'null
(mapcar (function (lambda (X) (->ENAME X)))
OBJECTLIST
)
)
)
(progn
(setq SGET (ssadd))
(foreach ELEM OBJECTLIST
(setq SGET (ssadd ELEM SGET))
)
)
)
(if SGET
(if (> (sslength SGET) 0)
SGET
)
)
)

;;; Funktion gibt vla-Objekt zurück, wenn Lisp-Objekt oder vla-Objekt
;;; übergeben worden sind. Ansonsten nil
(defun ->VLA-OBJECT (ENAME /)
(cond
((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME))
((= (type ENAME) 'VLA-OBJECT) ENAME)
(t NIL)
) ;_ end of cond
) ;_ end of defun

;;; Funktion gibt Ename zurück, wenn Lisp-Objekt oder vla-Objekt
;;; übergeben worden sind. Ansonsten nil
(defun ->ENAME (ENAME /)
(cond
((= (type ENAME) 'VLA-OBJECT) (vlax-vla-object->ename ENAME))
((= (type ENAME) 'ENAME) ENAME)
(t NIL)
) ;_ end of cond
) ;_ end of defun


;;; Mapcar-Magie!
;;; Eigenschaftswerte aus Objekten lesen
;;; Beispiel:
;;; Layerfarbe des aktuellen Layers abfragen:
;;; (vlax*get-property nil '(Color ActiveLayer ActiveDocument))
;;;
;;; Abfragen, ob eine Polylinie geschlossen ist:
;;; (VLAX*GET-PROPERTY (vlax-ename->vla-object (car (entsel))) 'CLOSED)
(defun VLAX*GET-PROPERTY (OBJ PROPS /)
(if (->VLA-OBJECT OBJ) ;_ Wenn vla-Objekt draus gemacht werden kann...
(setq OBJ (->VLA-OBJECT OBJ)) ;_ mache auf jeden Fall eines draus
) ;_ end of if
(if (null OBJ)
(setq OBJ (vlax-get-acad-object))
) ;_ end of if
(if (and (listp PROPS) (cdr PROPS))
(vlax-get-property
(VLAX*GET-PROPERTY OBJ (cdr PROPS))
(car PROPS)
) ;_ end of vlax-get-property
(vlax-get-property
OBJ
(if (listp PROPS)
(car PROPS)
PROPS
) ;_ end of if
) ;_ end of vlax-get-property
) ;_ end of if
) ;_ end of defun

;;; Funktion durchsucht den Block, der über ename übergeben wird,
;;; nach ATTRIB's und erzeugt 'ne Textliste
;;; Retval: Liste der Texte oder nil
;; Hier vl-Version
(defun ALL-BL-TXT (ENAME / EDATA RETVAL ATTS)
(setq ENAME (->VLA-OBJECT ENAME)
RETVAL '() ;_ Liste initialiseren
) ;_ end setq
(if (= (VLAX*GET-PROPERTY ENAME 'HASATTRIBUTES) :vlax-true)
(progn
(setq ATTS (vlax-safearray->list
(vlax-variant-value
(vlax-invoke-method ENAME 'GETATTRIBUTES)
) ;_ end of vlax-variant-value
) ;_ end of vlax-safearray->list
) ;_ end of setq
(while ATTS
(setq RETVAL
(cons (cons
(VLAX*GET-PROPERTY (car ATTS) 'TAGSTRING)
(VLAX*GET-PROPERTY (car ATTS) 'TEXTSTRING)
) ;_ end of cons
RETVAL
) ;_ end of cons
) ;_ end of setq
(setq ATTS (cdr ATTS))
) ;_ end of while
(setq RETVAL (reverse RETVAL))
) ;_ end progn
) ;_ end if
RETVAL
)


Hoffe ich habe alle Subs dabei :-); wenn's nicht läuft, poste hier.

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 18. Nov. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

strich
Mitglied
Landespfleger


Sehen Sie sich das Profil von strich an!   Senden Sie eine Private Message an strich  Schreiben Sie einen Gästebucheintrag für strich

Beiträge: 57
Registriert: 13.11.2002

AutoCAD2005,
AutoCADMap2011
WindowsXP/Vista/7

erstellt am: 22. Nov. 2004 07:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


beispiel.zip

 
Hallo Marc,

ich glaube das Programm geht in die richtige Richtung.
Ich habe mal eine Beispielzeichnung angehangen, darin sind 8 Blöcke, jeweils 4 mit dem gleichen Attributwert enthalten.
Das Programm funktioniert jedoch nur bis zu der Stelle, wo entschieden werden muss, ob eine Attributname oder Attributwert gesucht werden soll.
Nach der Eingabe kommt die Meldung "Fehler: no function definition: VLAX-ENAME->VLA-OBJECT".
Liegt's an mir oder am Programm? Meine lisp-Kenntnisse sind leider <=0.

Hab Dank im Voraus.

strich

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.

erstellt am: 22. Nov. 2004 07:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für strich 10 Unities + Antwort hilfreich

gib mal vor Programmaufruf
(vl-load-com)
ein oder füge es als erste Zeile in das Lisp mit ein!

------------------
- 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



Abschlussarbeit Technologie und Innovation - Vorentwicklung (WiSe 24/25)
Jedes Werkzeug kann immer nur so gut sein wie der Mensch, der dahintersteckt. Deshalb suchen wir bei der Festool Group Mitarbeitende, die gemeinsam mit ihren 3.000 Kolleginnen und Kollegen weltweit etwas bewegen wollen. Tauche ein in unsere Welt ? und erlebe, wie stolz es macht, in einem Familienunternehmen die besten Elektrowerkzeuge der Welt zu bauen.

Nur eine kleine Komponente eines Gesamtsystems ...

Anzeige ansehenWeitere: Ingenieure und technische Berufe
marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2490
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: 22. Nov. 2004 08:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für strich 10 Unities + Antwort hilfreich

Hi Stich,
sorry,
hatte etwas vergessen, Du mußt ganz oben im Code ein:
Code:

(vl-load-com)


hinzufügen :-(...
Dann wird es gehen.

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz