| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: entity aus liste auswählen (1455 mal gelesen)
|
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 23. Feb. 2007 15:10 <-- editieren / zitieren --> Unities abgeben:
hi, ich habe eine funktion in der eine liste angelegt wird. in der liste befindet sich die entity und ein wert. in einer anderen funktion wähle ich mit entsel eines der entity aus und möchte nun über den ausgewählten entity den in der anderen liste auswählen und auf den zugehörigen wert zu greifen. ich weiß leider nicht wie ich das bewerkstelligen soll, 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: 23. Feb. 2007 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
mal ganz ins Blaue ( so richtig verstehe ich nämlich nicht, was du willst) .. suchst du sowas wie die Funktion assoc oder member ... ?? ------------------ - 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 |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 23. Feb. 2007 17:39 <-- editieren / zitieren --> Unities abgeben:
ja so ähnlich, ich lasse punkte malen und geben diesen einen wert. im nächsten schritt möchte ich das der nutzer zwei dieser punkte selektiert. in der funktion soll dann über den entity-namen namen an die anderen werte eine rechnung erfolgen. also der entity-name soll als schlüssel zum anderen wert dienen. an assoc hab ich schon gedacht, ich weiß aber nicht wie ich das umsetzen soll Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 23. Feb. 2007 20:14 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
Ich weiß zwar immer noch nicht genau, was dein Programm genau bezwecken soll, denke aber , du läufst in die falsche Richtung... Helfen dir vielleicht XDATA oder Blöcken mit (unsichtbaren) Attributen weiter? Dann hast du die Informationen gleich am Objekt? ------------------ - 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 |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 23. Feb. 2007 20:28 <-- editieren / zitieren --> Unities abgeben:
nunja bin neuling in vlisp, ich möchte erst die knoten mit eigenschaften erstellen. danach sollen eben 2 ausgewählt werden, das gefaelle berechnet werden zwischen den beiden und dann eine pline gezeichnet werden mit dem text dran des gefaelles. mit dem ersten befehl male ich die knoten und gebe die hoehe dazu ein, entity mit dem hoehenwert kommt in in eine liste mit allen punkten. mit dem naechsten befehl sollen eben 2 ausgewählt werden (entsel) und dann wollte ich eben ein befehl der über den entitynamen aus der ersten liste den eintrag auswählt um dann mit ihm arbeiten zu können, ich weiß ich schwer zu verstehen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 23. Feb. 2007 20:42 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
du kannst doch auch einen Punkt gleich 3Dimensional erzeugen _Point 10,20,30 Bsp-weise (cdr(assoc 10(entget(entlast)))) liefert dir dann die Koordinaten mit denen du weiter rechnen kannst. ach ja .. lies dir doch übers WE mal Mapcars Lisp Tutorial durch ... solls vielleicht demnächst auch als Buch geben (kleiner Tipp für den Prof. ) ------------------ - 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 |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 23. Feb. 2007 20:59 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 23. Feb. 2007 21:17 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
na dann nimm (assoc ENTITYNAME LISTE) und die Liste baust du z.B. so (setq LISTE (cons ENT1 HOEHE1) LISTE) (setq LISTE (cons ENT2 HOEHE2) LISTE) ... das ganze in ner While-Schleife oder wie auch immer.
------------------ - 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 |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 24. Feb. 2007 09:11 <-- editieren / zitieren --> Unities abgeben:
(while (setq Pto (getpoint "\nPunkt eingeben: ")) (command "_point" Pto) (setq ent (entlast) hoehe (getreal "\nHoehe eingeben: ") inf_ptos (list ent hoehe) list_ptos (cons inf_ptos list_ptos) das ist meine syntax für das erstellen der liste. in der nächsten funktion mache dann das (setq pto1 (entsel) pto2 (entsel) ) und dann weiß ich nicht weiter, mit assoc geht es nicht weil ja in der ersten liste das format ist [3] Entityname hoehe , ich möchte also über pto1 an die hoehe der in der list_ptos Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 24. Feb. 2007 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
Tutorial schon durch ??? probier mal (setq pto1 (car(entsel "\nerster Pkt:") pto2 (car(entsel "\n2. Pkt:")) ) (setq H1 (cadr(assoc pto1 list_ptos))) (setq H2 (cadr(assoc pto2 list_ptos))) ... ------------------ - 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 |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 24. Feb. 2007 10:58 <-- editieren / zitieren --> Unities abgeben:
danke, welches tutorial meinst du? das von vlisp finde ich sehr schlecht. ich habe vlisp auf einem praktikum in kuba etwas erlernt und möchte nun meine fähigkeiten festigen und ausbauen. nun ein anderes problem was ich schon öfters hatte. die zeile stimmt, h1 (cadr(assoc pto1 list_ptos)) kontrolliere ich den wert mit inspect mit den klammern stimmt der wert, kontrolliere ich jedoch h1 mit inspect steht dort nil, warum sehr unlogisch.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied | |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 24. Feb. 2007 11:53 <-- editieren / zitieren --> Unities abgeben:
|
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 27. Feb. 2007 19:04 <-- editieren / zitieren --> Unities abgeben:
hi, ich habe ein eigenartiges problem. die zeile sollte der variable dis eigentlich einen wert zu weisen. (setq dis (distance (cdr (assoc '10 (entget pto1))) (cdr (assoc '10 (entget pto2)))) ) wenn ich die werte kotrolliere also die (distance (cdr (assoc '10 (entget pto1))) (cdr (assoc '10 (entget pto2)))) stimmt der wert, kontrolliere ich jedoch die variable dis ist sie nil. das kommt im meinem programm öfters vor und ich komme leider nicht weiter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Feb. 2007 19:18 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
Zitat: kontrolliere ich jedoch die variable dis ist sie nil. das kommt im meinem programm öfters vor und ich komme leider nicht weiter
Du solltest doch das Tutorial durchgehen <ja, das kostet Zeit - aber dadurch lernt man - und viele Fehler entstehen erst garnicht> 1. Der Wert wird überschrieben mit einem "setq" (das denke ich hier mal nicht) oder 2. die Variable ist Lokal und du bereits wieder aus der Funktion wenn du sie abrufen tust. Lese-Tip die X-te: http://www.autolisp.mapcar.net/namespace.html (wobei man eigentlich mit dem 1.Wort des Anfänger-tutorials anfangen sollte) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 27. Feb. 2007 21:05 <-- editieren / zitieren --> Unities abgeben:
(defun c ipes (/ list_ptos) (setq pto2 (car (entsel "\nPlease select the higher point: ")) pto1 (car (entsel "\nPlease select the lower point: ")) h1 (cadr (assoc pto1 list_ptos)) h2 (cadr(assoc pto2 list_ptos)) diff (- h2 h1) ) ich finde meinen fehler nicht, trotz lesen des tuts. ich verlasse weder die funktion noch wird eine globale variable benutzt. wie gesagt, h1 u h2 ist nil, (cadr (assoc pto1 list_ptos)) und (cadr(assoc pto2 list_ptos)) hat aber einen wert. die variablen werden nur in dieser funktion benutzt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 27. Feb. 2007 21:11 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
list_ptos ist ne lokale Variable, der du in der Funktion an keiner Stelle was zuweist, die also "nil" ist.. demzufolge sind h1 und h2 auch nil und ( - h2 h1 ) ergibt n Fehler... ------------------ - 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 |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 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: 28. Feb. 2007 09:59 <-- editieren / zitieren --> Unities abgeben: Nur für zauber3r
Edit: GOTT!!! ICH HASSE DIESE AUTO-Smiley KACKE!!! Aaaaaaaalllllbertttt!!! Zitat: Original erstellt von zauber3r: (defun c:pipes (/ list_ptos) (setq pto2 (car (entsel "\nPlease select the higher point: ")) pto1 (car (entsel "\nPlease select the lower point: ")) h1 (cadr (assoc pto1 list_ptos)) h2 (cadr(assoc pto2 list_ptos)) diff (- h2 h1) ) ...ich verlasse weder die funktion noch wird eine globale variable benutzt....
Ganz im Gegenteil. In diesem Beispiel verwendest Du gleich FÜNF GLOBALE VARIABLEN: LOKAL wären sie, wenn das erste Listenargument Deiner defun so aussehen würde: Code:
(defun c:pipes (/ pto2 pto1 h1 h2 diff) ...
Ich vermute mal Du hast da einiges durcheinandergebracht. Wenn Du der Funktion "c:pipes" den Wert der Variable "list_ptos" übergeben willst, gibt es zwei Möglichkeiten: 1. "list_ptos" wird extern als globale Var festgelegt. Dann mußt Du "list_ptos" aus der Liste der lokalen Variablen entfernen. Also NICHT hier reinschreiben:
Code: (defun c:pipes (/ list_ptos)...
2. Der Wert für "list_ptos" soll beim Funktionsaufruf übergeben werden. Dann müßte Deine Funktionsdefinition so beginnen:
Code: (defun c:pipes (list_ptos / )...
Der Funktionsaufruf wäre dann z.B.:
Code: (c:pipes '((1 2)(3 4)(5 6)))
Aber dann ist die Funktionsdef eher falsch (auch wenn es funzt), denn defun C: ermöglicht es einer Lispfunktion wie ein Acad Befehl aufgerufen werden zu können. Und da sind dann Argumentübergaben eher selten ;-) In dem Fall also eher:
Code: (defun pipes (Aufrufargument / lokale-Variablen)...
... ------------------ Ciao, Marc Mein AG sucht u.a. Architekten und Bauzeichner! Mein alter AG sucht 'nen CADMIN
[Diese Nachricht wurde von marc.scherer am 28. Feb. 2007 editiert.] [Diese Nachricht wurde von marc.scherer am 28. Feb. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zauber3r Mitglied Student
Beiträge: 15 Registriert: 23.02.2007
|
erstellt am: 04. Mrz. 2007 19:11 <-- editieren / zitieren --> Unities abgeben:
|