Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Attribute eines ausgewählten Block auslesen

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:  Attribute eines ausgewählten Block auslesen (1573 mal gelesen)
neuling99
Mitglied
Selbstständig

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

Beiträge: 3
Registriert: 07.10.2011

Autocad 2011

erstellt am: 07. Okt. 2011 08:39    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 Forum,
Als Neuling in der Lips-Welt, muss ich mich heute mal an euch wenden, da ich nicht weiter komme.
Ich möchte in jedem Raum einen Block mit dem Raumnamen, der Etage und der Wohnungsnummer, sowie diverse andere Daten einfügen. Das ist auch kein Problem.
In meiner Zeichnung habe ich auch einen Block mit Attributen  „Objektdaten“ den es nur einmal in der Zeichnung gibt und einige Grunddaten enthält.
Nun habe ich hier im Forum folgenden Text gefunden

(setq blockname "Objektdaten")
(if (setq aws(ssget "X" (list(cons 0 "INSERT")(cons 2 blockname))))

(progn
(setq liste nil)
  (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.")))
  (cond
  ((= ebene "-1") (Setq estrich (atof (nth 8 (reverse liste)))))
  ((= ebene "10") (Setq estrich (atof (nth 9 (reverse liste)))))
  ((= ebene "12") (Setq estrich (atof (nth 10 (reverse liste)))))
  ((= ebene "14") (Setq estrich (atof (nth 11 (reverse liste)))))
  ((= ebene "16") (Setq estrich (atof (nth 12 (reverse liste)))))
  ((= ebene "18") (Setq estrich (atof (nth 13 (reverse liste)))))
  )
  (setq Estrich (rtos Estrich 2 3))
So konnte ich die Estrichhöhen in den Einzelenen Ebenen auslesen und weiter verarbeiten.
Im Grunde genau das was ich gesucht habe.

Mein Problem ist es nun als Neuling, dass ich den Block in einem bestimmten Raum mit der Maus auswählen möchte und dann dort die Daten herausnehmen kann. Ich denke das die ersten zwei Zeilen umgeschrieben werden muss. Wie komme ich an die Daten des mit der Maus ausgewählten Block heran.
Einen Hinweis fand ich bisher im Forum nicht, nur immer die Auswahl gleicher Blöcke oder Attribute.
Ich Bedanke mich jetzt schon mal für eure Hilfe und werde mich, dank diesem Forum mit Lisp weiterbilden.
Gruß Detlef

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

.

erstellt am: 07. Okt. 2011 08:46    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 neuling99 10 Unities + Antwort hilfreich

(if(and(setq OBJ(car(entsel "\nBlockref wählen : "))
       (setq DATA(entget OBJ))
       (=(cdr(assoc 0 DATA))"INSERT")
       (=(cdr(assoc 66 DATA))1)
    )
  (progn
    (while (and(setq obj (entnext obj))
               (/=(cdr(assoc 0(entget obj)))"SEQEND"))
       (setq liste (cons (cdr(assoc 1 (entget obj)))liste))
     )
......


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

neuling99
Mitglied
Selbstständig

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

Beiträge: 3
Registriert: 07.10.2011

Autocad 2011

erstellt am: 07. Okt. 2011 09: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

Hallo Thomas, vielen Dank für deine schnelle Antwort, leider bekomme ich nach der Eingabe des Text die Meldung: Falsch formatierte Liste in Eingabe.
Ich finde den Fehler aber nicht und bitte dich deshalb noch einmal um Hilfe.
Gruß Detlef

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

spider_dd
Mitglied



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

Beiträge: 1111
Registriert: 27.11.2003

Win 10Pro
Intel(R) Core(TM) i7-7700
NVIDIA Quadro P1000
ACAD, Civil-3D 2018

erstellt am: 07. Okt. 2011 11:41    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 neuling99 10 Unities + Antwort hilfreich

Hallo Detlef,

da hilft nur Klammern abgleichen. Irgenwo ist da wohl noch eine zuwenig.
Am besten hierzu mal den gesamten Code in den VL-Editor nehmen, dort kann man dann leichter die entsprechenden Klammernpaare finden (Doppelklick vor bzw. hinter Klammer).
Bei Fragen ...

Gruß
Thomas

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

.

erstellt am: 07. Okt. 2011 11:49    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 neuling99 10 Unities + Antwort hilfreich

ich hab dir den Anfang (Blockrefwahl bis Erstellung einer Liste mit den Attributwerten ) .. wie die Atts aussehen, was du damit machen willst usw. weiß ich ja nicht .... aber eine Klammer fehlt echt .. passiert, wenn man hier rein tippt
also
(if(and(setq OBJ(car(entsel "\nBlockref wählen : ")))
      (setq DATA(entget OBJ))
      (=(cdr(assoc 0 DATA))"INSERT")
      (=(cdr(assoc 66 DATA))1)
    )
  (progn
    (while (and(setq obj (entnext obj))
                (/=(cdr(assoc 0(entget obj)))"SEQEND")
            )
      ..... machwas mit .....
    )
  )
)

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

neuling99
Mitglied
Selbstständig

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

Beiträge: 3
Registriert: 07.10.2011

Autocad 2011

erstellt am: 07. Okt. 2011 12:24    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

Vielen Dank für eure Hilfe, ich es nun auch mit dem folgenden Code geschafft zum Ziel zu kommen.

(setq obj nil
      DATA nil
      liste nil)
(setq OBJ(car(entsel "\nBlockref wählen : ")))
      (setq DATA(entget OBJ))
  (progn
    (while (and(setq obj (entnext obj))
    (/=(cdr(assoc 0(entget obj)))"SEQEND"))
      (setq liste (cons (cdr(assoc 1 (entget obj)))liste))
    ))
nun kann ich weitere Materialblöcke einfügen und muss nicht alle Daten neu eingeben, da ich sie ja jetzt aus den Raumblöcken übernehmen kann.
BESTEN DANK noch mal an alle.
Gruß Detlef
bis zum nächsten Problem, wo ich wieder auf eure Hilfe hoffen darf, zumindest solange ich noch Anfänger bin.

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