| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: verunsichert über (ssget _p) (1512 mal gelesen)
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 07. Sep. 2005 12:54 <-- editieren / zitieren --> Unities abgeben:
HI, kann es sein, dass (ssget "_p") KEINE Auswahlsätze findet, die mit (ssadd) ERZEUGT wurden (und in den danach noch weitere Elemente mit ssadd hinzugefügt wurden)? Ich glaube, das irgendwann einmal irgendwo gelesen zu haben, bin mir aber nicht mehr sicher, kann dazu aber nichts mehr finden. Jedenfalls würde das ein Problem bei meinem Prog erklären. danke und Gruß, ------------------ have fun, Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2005 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
was hast du denn für ein Konstrukt?? mit (setq AWS(ssadd)) wird ein leerer Auswahlsatz erzeugt mit (setq AWS(ssadd (car(entsel))) ein neuer mit dem Entity in beiden kannst du mit (ssadd (car(entsel))AWS) Elemente hinzufügen, wobei jetzt AWS geändert wird und nicht explizit mittels setq zugewiesen werden muß in AWS hast du dann auf jeden Fall den Auswahlsatz ohne nochmaliges (ssget..) ------------------ - 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 |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Sep. 2005 13:24 <-- editieren / zitieren --> Unities abgeben:
vorerst danke, dass du dich meiner Frage angenommen hast. mein Prog sieht so aus: (defun fnkSset (Slist / i Sset) (setq i 0 Sset (ssget)) (while (< i (length Slist)) (setq Sset (ssadd (nth i Slist) Sset)) (setq i (1+ i)) ) Sset );defun "Slist" ist eine "Selection-List", soll bedeuten eine Liste mit ENAMES. Das Prog erhält eine solche Liste, und gibt ein Selection-Set, gefüttert mit den Elementen der in Slist enthaltenen ENAMES zurück. Nun möchte ich danach gerne auf das dadurch generierte Selection-Set mit (ssget "_p") zugreifen, geht aber anscheinend nicht. Daher meine Frage, ob die geäußerte Vermutung (siehe Eröffnung dieses thread's) richtig ist. Bitte um Geduld, es wird sonst zu umfangreich, wenn ich weiter aushole. Für weitere Fragen stehe ich jedoch gerne zur Verfügung. Gruß, ------------------ have fun, Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2005 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
deine Funktion schreib lieber so: (defun fnkSset (Slist / Sset) (or (setq SSET (ssget)) (setq SSET (ssadd)) ) (repeat (length Slist) (ssadd (car Slist) SSET)) (setq SLIST(cdr SLIST)) ) SSET ) und wenn du die in deinem Progie aufrufst dann mach doch statt (setq AWS(ssget "_p")) dann (setq AWS(fnkSset Slist)) ansonsten guck dir noch die Funktionen sssetfirst und ssgetfirst an ------------------ - 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 |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Sep. 2005 14:13 <-- editieren / zitieren --> Unities abgeben:
nagut dann doch ein bisschen umfangreicher... Zitat: ansonsten guck dir noch die Funktionen sssetfirst und ssgetfirst an
genau das will ich machen. ...Zuerst wähle ich Elemente mit ssget aus der Zeichnung. Dann wird dieses Sset in eine Slist umgewandelt. Diese wird nach bestimmten Kriterien gefiltert. Die gefilterte Slist wird wieder in ein Sset zurück-umgewandelt. ... Dann will ich auf die gefilterten Elemente mit (sssetfirst nil (ssget "_p")) zugreifen. Das ist ja alles ganz nett und schön, was du schreibst, du kennst dich besser aus, als ich, ich freu mich auch, dass du mir eine Antwort gibst und ich kann viel von dir lernen. Bitte versteh' das nicht als Beleidigung, aber warum weichst du einer Antwort auf meine Frage aus? Wenn ich etwas NICHT frage, bin ich selbst schuld, wenn ich blöd sterbe, oder? Bekomme ich solche Infos trotzdem, ist das schön und gut, aber ich glaube schon zu wissen, was ich (wissen) will. Ich fühle mich nicht wie ein erwachsener Mensch behandelt, wenn ich nicht zumindest auf die Frage eine Antwort bekomme, die ich stellte. (siehe erster Beitrag, erste Zeile nach HI) Das betrifft übrigens nicht nur dich. Andere lesen sich die Beiträge, auf die sie antworten, sogar nicht einmal richtig durch. Tut mir leid, das es jetzt dich getroffen hat. Bin aber, wie gesagt, trotzdem froh, dass du überhaupt etwas antwortest. Danke und Gruß,
------------------ have fun, Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2005 14:36 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Zitat: Original erstellt von autocart: HI, kann es sein, dass (ssget "_p") KEINE Auswahlsätze findet, die mit (ssadd) ERZEUGT wurden (und in den danach noch weitere Elemente mit ssadd hinzugefügt wurden)?
Was sagt denn ein Test am lebenden Objekt ?? einmal (setq a(ssget)) (setq b(ssadd (car(entsel)))) (setq c (ssget "_p")) (sssetfirst C C) und einmal Zeile 1 und Zeile 2 vertauscht ? Bei mir wird über (ssget "_p") nur der mittels (ssget..) erstellte Auswahlsatzt gefunden. Entschuldige vielmals, das ich andere Wege aufgezeigt habe. Passiert nicht wieder
------------------ - 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 |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Sep. 2005 15:03 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank, das hätte ich wirklich selbst ausprobieren sollen, bevor ich postete. bitte entschuldige. die anderen wege finde ich eh super. Nur leider kann ich mich nicht so gut auf was anderes konzentrieren, solange noch eine unbeantwortete Frage in meinem Kopf herumschwirrt. Hast du noch soviel Geduld mit mir, um deinen Code zu erklären? Ich versteh diese Zeilen nicht ganz: (or (setq SSET (ssget)) (setq SSET (ssadd)) ) Stimmt diese Interpretation?: Zuerst werde ich gefragt, ob ich ein selectionset mit picken/Fenster erzeugen will (zu dem dann die Slist-Elemente hinzugefügt werden würden). Wenn ich eines händisch anlege, ist (or ...) auf jedenfall wahr und Lisp wertet (ssadd) nicht mehr aus. Wenn ich ohne Elemente auszuwählen bestätige, legt mir Lisp ein leeres selction-set mit (ssadd) an. Hmm, wäre, wenn meine Interpretation richtig ist, nicht genau, was ich machen will, aber die kurze schreibweise mit (or ...) gefiele mir. Ich werde es mit folgenden letzten 2 Zeilen probieren: (command "_.select" SSET "") SSET ...und siehe da (habe es gerade probiert), es funktioniert! p.s.: CADmium, danke, dass du mir nicht böse warst. Gruß, ------------------ have fun, Stephan "Don't assume, go as far as possible with the known facts, then ask." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2005 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Zitat: Original erstellt von autocart:
Ich versteh diese Zeilen nicht ganz: (or (setq SSET (ssget)) (setq SSET (ssadd)) ) Stimmt diese Interpretation?: Zuerst werde ich gefragt, ob ich ein selectionset mit picken/Fenster erzeugen will (zu dem dann die Slist-Elemente hinzugefügt werden würden). Wenn ich eines händisch anlege, ist (or ...) auf jedenfall wahr und Lisp wertet (ssadd) nicht mehr aus. Wenn ich ohne Elemente auszuwählen bestätige, legt mir Lisp ein leeres selction-set mit (ssadd) an.
Ja, is so .. so wird garantiert, das die Funktionsrückgabe ein Pickset ist(ob leer oder gefüllt, ist ne andere Sache) ------------------ - 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 |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 07. Sep. 2005 15:14 <-- editieren / zitieren --> Unities abgeben:
Aber es wird nicht garantiert, dass man die Funktionsrückgabe nach Programmende mit (sssetfirst (ssget "_p")) wählen kann. ------------------ have fun, Stephan "Don't assume, go as far as possible with the known facts, then ask." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Sep. 2005 15:15 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 08. Sep. 2005 13:02 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Zitat:
(defun fnkSset (Slist / i Sset) (setq i 0 Sset (ssget)) (while (< i (length Slist)) (setq Sset (ssadd (nth i Slist) Sset)) (setq i (1+ i)) ) Sset );defun
ich versteh jetzt zwar nicht, warum du da ein ssget drin hast (laut deiner beschreibung soll lediglich einem liste mit enames zu einem Auswahlsatz werden), aber egal. Warum willst du diesen Auswahlsatz mit (ssget "_p") ansprechen ? Wir arbeiten in Lisp, da gibt es doch bekanntlich Variablen. Wenn du diesen erstellten Auswahlsatz brauchst, dann weise den doch einer Variable zu (setq neuerAuswahlsatz (fnkSset LEnameliste)) Funktionen können auch Werte zurückgeben :-) aber andere Frage. Du baust die Liste ausgrund einer Auswahl und bestimmten Filterkriterien. Was sind denn diese Filterkriterien. Vielleicht kann man diese bereits in die Auswahl einbinden ?
(setq asw (ssget (list (cons 8 "layer0")))) Objektwahl, wobei nur Objekte am Layer layer0 akzeptiert werden.
------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 08. Sep. 2005 13:25 <-- editieren / zitieren --> Unities abgeben:
Hallo Anton, sehr aufmerksam! Es gibt dich also - dich, den aufmerksamen Leser! Ich bin sehr froh. Das ist tatsächlich ein fehler. Es sollte natürlich heißen: (defun fnkSset (Slist / i Sset) (setq i 0 Sset (ssadd)) (while (< i (length Slist)) (setq Sset (ssadd (nth i Slist) Sset)) (setq i (1+ i)) ) (command "_.select" SSET "");Diese Zeile habe ich erst gestern neu eingefügt. Sset );defun Das ssget rutschte mir rein, da ich vor dem posten kurz herumprobierte, wie ich es vielleicht schnell und einfach, ohne viel Nachdenken (nicht lachen!), schaffen könnte, das Problem zu beheben. Was das (ssget "_p") betrifft: Ich will damit nicht innerhalb einer Funktion einen Auswahlsatz verwenden, sondern NACHDEM die Funktion abgeschlossen ist, als stinknormaler ACAD-Anwender auf den letzten Auswahlsatz zugreifen können um damit IRGENTWAS (vielleicht jedesmal was anderes) zu machen (so, wie man auf die Auswahl nach "ssx" zugreifen kann - siehe ET). Die Filterkriterien sind auch immer wieder verschieden. Diese kleine Funktion hier kann von verschiedenen progs verwendet werden, die alle nach etwas anderem filtern. Damit habe ich aber eh kein Problem. danke für deinen Beitrag, liebe Grüße,
------------------ have fun, Stephan "Don't assume, go as far as possible with the known facts, then ask." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 08. Sep. 2005 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
man kann auch Globale Variablen verwenden!!!! Solange die Zeichnung nicht geschlossen wird und die Variable (global) nicht überschrieben wird, kann man auf sie zugreifen /auslesen .. -> informier dich mal auf MAPCARs Seiten oder in dem Beitrag. da die Funktionen irgentwie in zeitlicher Nähe aufgerufen werdens, (sonst macht das (ssget "_p") ja auch keinen Sinn) bietet sich solch Vorgehen eigentlich an! Das wollte ich dir eigentlich schon einiges weiter oben verklickern ... ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." [Diese Nachricht wurde von CADmium am 08. Sep. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 08. Sep. 2005 14:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas! Was globale Variablen sind, weiß ich doch :-) Habe trotzdem nochmals Mapcars Seiten mit google durchstöbert und mir den gelinkten Beitrag zu Gemüte geführt. Besonders der Beitrag war sehr interessant. Mapcars Seiten auch, aber die kannte ich ja schon. Das mit dem Verwenden globaler Vars für Auswahlsätze hat was für sich. Werde versuchen, es im Kopf zu behalten. Danke für den Hinweis. Alles Gute, ------------------ have fun, Stephan "Don't assume, go as far as possible with the known facts, then ask." 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: 09. Sep. 2005 09:05 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
Hi, also wenn ich gerne möchte, dass ein User etwas mit einem bestimmten Satz von Objekten tut, wähle ich die mit sssetfirst vor. Was anderes macht ja auch kaum Sinn... Code:
(defun C:TESTUS (/ SGET) (setvar "pickfirst" 1) (princ "\nLos jetzt, wähl' was!") (if (setq SGET (ssget)) (progn (princ "\nLos jetzt, mach' was damit!") (sssetfirst nil SGET) ) ) (princ) )
...------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 13. Sep. 2005 11:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Ihr Netten! Muß mich nochmals kurz melden, um alle Programmier-Anfänger davor zu WARNEN, meinen Code zu übernehmen (nur für den Fall eines verirrten Schafes): Die Zeile (command "_.select" SSET "") in der fnkSset-Funktion führt zu einem Programm-Abbruch, wenn man die Funktion aus einem (command ...) in der "Mutter-Funktion" aufruft! Habe zwar eine momentane Lösung für mich gefunden, möchte dies hier aber nicht posten, da sie anscheinend ziemlich langsam arbeitet. @Marc: Ja, das macht schon Sinn. Habe das auch in einem anderen Fall angewendet, nur möchte ich mir diese Funktion ganz allgemein halten. Wenn, dann würde ich das (sssetfirst ...) in der "Mutter-Funktion" aufrufen. Danke. Gruß, Gruß,
------------------ have fun, Stephan "Don't assume, go as far as possible with the known facts, then ask." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Sep. 2005 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für autocart
(command "_.select" SSET "") schmeckt es nicht, wenn SSET nil bzw. kein PICKSET ist .... auch wenn's ein leerer Auswahlsatz ist, macht es wenig Sinn. Deshalb vorher drauf testen!! Besser ist auch vl-cmdf -> Siehe Hilfe. ------------------ - 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 |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|