| |
 | 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 PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: lisp und höhenlinien (2005 mal gelesen)
|
piper Mitglied
 Beiträge: 7 Registriert: 20.09.2004
|
erstellt am: 20. Sep. 2004 21:01 <-- editieren / zitieren --> Unities abgeben:         
hallo, hat jemand schon mal eine lisp-routine gefunden mit der man aus 2d-höhenlinien ein 3d-höhenschichtmodell machen kann? ich versuche nämlich gerade, mir sowas zu basteln, aber ich komm nicht wirklich weiter. angenommen, ich hab drei höhenlinien und ich möchte, dass die erste 10m hoch ist, die zweite 20m und die dritte 30m und zwar in der reihenfolge, wie ich die linien markiert habe. so, dann wird ein selektion set erstellt- mit (setq ss(ssget)) und dann kann ich dieses set extrudieren, mit (princ (setq hb (getreal "\nBitte die Schichthöhe angeben:"))) ;angeben der höhe (command "_extrude" ss"" hb"" ) ;extrudieren der ausgewählen linien (ss) mit höhe (hb) und jetzt bräuchte ich eine schleife die dafür sorgt, das die zweite höhenlinie 20m hoch wird, also sozusagen hb + hb, und die dritte 30m also hb + hb + hb und da komm ich nicht weiter kann mir bitte bitte jemand helfen! viele grüße piper Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 20. Sep. 2004 21:21 <-- editieren / zitieren --> Unities abgeben:          Nur für piper
Hallo Piper! Am besten eignet sich dazu eine repeat-schleife. Als Grundgerüst so in etwa: (if (and(setq ss(ssget)) (setq hb(getreal "\nBitte die Schichthöhe angeben:")) ) (progn (setq index -1) (repeat (sslength ss) (command "_extrude" (ssname ss (setq INDEX(1+ INDEX))) "" (* (+ 1 Index) hb) "" ) ) ) ) P.S. wenn du in die Lispprogrammierung einsteigen willst, kann ich dir Mapcar's Seiten sehr empfehlen. ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 20. Sep. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
piper Mitglied
 Beiträge: 7 Registriert: 20.09.2004
|
erstellt am: 21. Sep. 2004 13:29 <-- editieren / zitieren --> Unities abgeben:         
|
piper Mitglied
 Beiträge: 7 Registriert: 20.09.2004
|
erstellt am: 28. Sep. 2004 16:15 <-- editieren / zitieren --> Unities abgeben:         
hallo, ich hätte da nochmal ein weiteres problem. ich hab das programm noch etwas modifiziert und möchte am ende noch eine abfrage machen, ob die volumenkörper vereinigt werden sollen, dazu möchte ich die objekte, die extrudiert worden sind, die ja eigentlich unter "ss" im selection set stehen müssten, dann an "_union" übergeben. allerdings sagt autocad: "Sollen die Schichten vereinigt werden? j/n:j _union Objekte wählen: 0 gefunden Objekte wählen: Befehl: nil" und irgendwie spiel ich da schon den ganzen tag dran rum und es klappt doch nicht :-( wäre prima, wenn mir da noch mal jemand helfen könnte! hier mal die routine: (defun c:toll () (command "_layer" "_new" "Gelände" "_color" 74 "Gelände" "SEtzen" "Gelände" "") (princ "\nBitte die Linien der Reihe nach von Außen nach Innen anklicken!") (if (and (setq ss (ssget)) (setq sh (getreal "\nBitte die Schichthöhe angeben:")) ) (progn (setq index -1) (repeat (sslength ss) (command "_extrude" (ssname ss (setq INDEX (1+ INDEX))) "" (* (+ 1 Index) sh) "")))) (princ "\nSollen die Schichten vereinigt werden?") ;ist nicht toll, aber wenigstens klappt es (setq frage (getstring " j/n:")) (if (= frage "n") (exit) ) (command "_union" ss"" ) ;hier gehts dann irgendwie nicht weiter ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 28. Sep. 2004 16:25 <-- editieren / zitieren --> Unities abgeben:          Nur für piper
kann nicht gehen .. ss enthält ja immer noch die "Namen" der Polylinien, und nicht der Körper. dafür mußte einen neuen Auswahlsatz kreieren.. so ungefähr ... klammern ect. mußte abgleichen.. (setq Koerper_ss(ssadd)) (setq index -1) (repeat (sslength ss) (command "_extrude" (ssname ss (setq INDEX (1+ INDEX))) "" (* (+ 1 Index) sh) ""))) (ssadd (entlast Koerper-ss)) ) (command "_union" Koerper-ss "" )
------------------ - Thomas - "Bei 99% aller Problemen 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 |
fuchsi Mitglied Programmierer c#.net Datawarehouse
   
 Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 28. Sep. 2004 16:29 <-- editieren / zitieren --> Unities abgeben:          Nur für piper
nein, bemi extrudieren wird ein komplett neues objekt erstellt, und das original (deine linien) je nach einstellung der systemvariable sowieso (fällt mir gerade nicht ein) gelöscht. das heisst der auswahlsatz ss ist nacht dem extrude nicht mehr verwendbar. du müsstest nach dem (command "_extrude" ...) in einem auswahlsatz die neue erstellten volumenkörper speichern in etwa so (ungetestet) (defun c:toll () (command "_layer" "_new" "Gelände" "_color" 74 "Gelände" "SEtzen" "Gelände" "") (princ "\nBitte die Linien der Reihe nach von Außen nach Innen anklicken!") (if (and (setq ss (ssget)) (setq sh (getreal "\nBitte die Schichthöhe angeben:")) ) (progn ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq NeuSS (ssadd)) ; lerrene auswahlsatz erzeugen ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq index -1) (repeat (sslength ss) (command "_extrude" (ssname ss (setq INDEX (1+ INDEX))) "" (* (+ 1 Index) sh) "") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq NeuSS (ssadd (entlast) NeuSS) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; )))
(princ "\nSollen die Schichten vereinigt werden?") ;ist nicht toll, aber wenigstens klappt es (setq frage (getstring " j/n:")) (if (= frage "n") (exit) ) (command "_union" Neuss"" ) ;hier gehts dann irgendwie nicht weiter ) Hoffe ich habe mich mit den () nicht verhaut
------------------ WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
piper Mitglied
 Beiträge: 7 Registriert: 20.09.2004
|
erstellt am: 28. Sep. 2004 17:36 <-- editieren / zitieren --> Unities abgeben:         
|
Kramer24 Ehrenmitglied V.I.P. h.c. Architekt
     
 Beiträge: 5899 Registriert: 09.11.2001 Acad Architecture 2023/24 WIN 10
|
erstellt am: 02. Okt. 2004 17:15 <-- editieren / zitieren --> Unities abgeben:          Nur für piper
|
piper Mitglied
 Beiträge: 7 Registriert: 20.09.2004
|
erstellt am: 02. Okt. 2004 20:35 <-- editieren / zitieren --> Unities abgeben:         
hallo lothar, ich kenne mich zwar noch nicht so gut mit lisp aus, aber wenn es ein problem mit einer falsch formatierten liste gibt, fehlt normalerweise irgendwo ne klammer. hier ist mal das programm wie ich es jetzt nutze: (defun c appen () (setq layfr (getstring "Soll ein Gelände-Layer erstellt werden? n/j:")) (if (= layfr "j") (progn (command "_layer" "_new" "Gelände" "_color" 74 "Gelände" "SEtzen" "Gelände" "") ) ) (princ "\nBitte die Linien der Reihe nach von Außen nach Innen anklicken!") (if (and (setq ss (ssget)) (setq sh (getreal "\nBitte die Schichthöhe angeben:")) ) (progn (setq neu-ss (ssadd)) (setq liste -1) (repeat (sslength ss) (command "_extrude" (ssname ss (setq liste (1+ liste))) "" (* (+ 1 liste) sh) "") (setq neu-ss (ssadd (entlast) neu-ss)))) ) (setq frage (getstring "Sollen die Schichten vereinigt werden? j/n:")) (if (= frage "j") (progn (command "_union" neu-ss "" ) ) ) ) (princ"\nPappen erzeugt eine Art Schichtmodell.\nStart mit \"Pappen\"") (princ) also ich arbeite auch mit adt2004 und bei mir läufts ohne probleme! viele grüße piper
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
piper Mitglied
 Beiträge: 7 Registriert: 20.09.2004
|
erstellt am: 02. Okt. 2004 20:41 <-- editieren / zitieren --> Unities abgeben:         
|