| |
| 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: Steigung einer 3d-Linie anschreiben (1782 mal gelesen)
|
mueller-spies Mitglied
Beiträge: 9 Registriert: 06.09.2012 A. Müller-Wissmann Autocad2004 Autocad2006
|
erstellt am: 06. Sep. 2012 15:13 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin auf der Suche nach einer Routine, die mir die Steigung einer Linie anzeigt. Ich habe bis jetzt nur Routinen gefunden, die mir die Steigung berechnet aus der x und y-Koordinate anzeigt. Ich benötige aber die Steigung aus der z-Koordinate (Höhe). Die Routine von CADWiesel habe ich gefunde, aber sie bringt mich nicht weiter. Gibt es eine solche Routine? Gruß A. Müller-Wissmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 06. Sep. 2012 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für mueller-spies
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 07. Sep. 2012 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für mueller-spies
Zitat: Original erstellt von CADmium: Steigung = DELTA Z / DELTA LDelta Z=Z2-Z1 Delta L= sqrt ((X2-X1)²+(Y2-Y1)²+(Z2-Z1)²) wo ist das Problem ? Erweiter einfach deine Routine (defun C:steigung(/ L P1 P2 X1 X2 Y1 Y2 Z1 Z2 S) (if(and (setq L(car(entsel "\nLinie wählen: "))) (setq L(entget L)) (=(cdr(assoc 0 L))"LINE") (setq P1 (cdr(assoc 10 L))) (setq P2 (cdr(assoc 11 L))) (setq X1(car P1) Y1(cadr P1) Z1(caddr P1) X2(car P2) Y2(cadr P2) Z2(caddr P2) ) ) (progn (setq S (/(- Z2 Z1) (sqrt(+(*(- X2 X1)(- X2 X1)) (*(- Y2 Y1)(- Y2 Y1)) (*(- Z2 Z1)(- Z2 Z1)) ) ) ) ) (princ (strcat "\nSteigung gegenüber der XY-Ebene beträgt "(rtos (* S 100) 2 2) "%")) ) ) )
... und für alle komplizierteren Fälle sei auf vlax-curve-getFirstDeriv und vlax-curve-getSecondDeriv hingewiesen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mueller-spies Mitglied
Beiträge: 9 Registriert: 06.09.2012 A. Müller-Wissmann Autocad2004 Autocad2006
|
erstellt am: 07. Sep. 2012 14:40 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, erstmal danke für die Hilfe. Nun aber das nächste Problem. Ich habe die Routine in die Routine von CADwiesel eingefügt, aber sie läuft nicht richtig. Hier die geänderte Routine: ; Lisp-Programm zum Absetzen eines Textes für %o-Angabe (defun c rozenthoehe ( / ech sli li proz sel el diff L P1 P2 X1 X2 Y1 Y2 Z1 Z2 S) (setq ech (getvar "CMDECHO")) (setvar "CMDECHO" 0) (princ "\n ") (princ "\n Angabe über %-Neigung einer Linie") (princ "\n Wert durch Ersetzen eines vorhandenen Textes absetzen") (princ "\n von tgl am 17.08.2000") (princ "\n ") (if(and (setq L(car(entsel "\nLinie wählen: "))) (setq L(entget L)) (=(cdr(assoc 0 L))"LINE") (setq P1 (cdr(assoc 10 L))) (setq P2 (cdr(assoc 11 L))) (setq X1(car P1) Y1(cadr P1) Z1(caddr P1) X2(car P2) Y2(cadr P2) Z2(caddr P2) proz(rtos (* S 1000) 2 2) ) ) ;Dummy-Text wählen: sel (entsel "\n vorhandenen Text picken... ") ; Element und Pickpunkt el (entget (car sel)) ; Element (Text) ;Dummy-Text durch Wert (berechnet) ersetzen: el (subst (cons 1 proz) (assoc 1 el) el) ) ;of setq (entmod el) ;Dummy-Text schreiben (princ proz) (princ (strcat "\nSteigung gegenüber der XY-Ebene beträgt "(rtos (* S 1000) 2 2) "%o")) (setvar "CMDECHO" ech) (prin1) ) ;end. Kann mir jemand helfen?
Danke und Gruß A. Müller-Wissmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 07. Sep. 2012 14:49 <-- editieren / zitieren --> Unities abgeben: Nur für mueller-spies
Zitat: Original erstellt von mueller-spies:
Kann mir jemand helfen?
Was funktioniert denn nicht? Ich vermute, es fehlt nur ein ENTUPD nach dem ENTMOD. Davon abgesehen sind die DXF-Gruppenlisten der ENTGET-Listen keine echten Assoziationslisten. Der Gruppencode 1 kann da beliebig oft vorkommen, weshalb sowohl ASSOC als auch SUBST schief gehen können. Da musst Du Dir eine eigene SUBST-ähnliche Funktion schreiben, die das sauber erledigt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mueller-spies Mitglied
Beiträge: 9 Registriert: 06.09.2012 A. Müller-Wissmann Autocad2004 Autocad2006
|
erstellt am: 07. Sep. 2012 14:55 <-- editieren / zitieren --> Unities abgeben:
Hallo, wo kommen denn diese beiden Befehle hin? Ich hab nicht so viel Ahnung von Autolisp. Hier die Kommentierung bein laden in Autocad2004: Fehler: Zu viele Argumente: (IF (AND (SETQ L (CAR (ENTSEL "\nLinie wählen: "))) (SETQ L (ENTGET L)) (= (CDR (ASSOC 0 L)) "LINE") (SETQ P1 (CDR (ASSOC 10 L))) (SETQ P2 (CDR (ASSOC 11 L))) (SETQ X1 (CAR P1) Y1 (CADR P1) Z1 (CADDR P1) X2 (CAR P2) Y2 (CADR P2) Z2 (CADDR P2) PROZ (RTOS (* S 1000) 2 2))) SEL (ENTSEL "\n vorhandenen Text picken... ") EL (ENTGET (CAR SEL)) EL (SUBST (CONS 1 PROZ) (ASSOC 1 EL) EL)) Danke A. Müller-Wissmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 07. Sep. 2012 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für mueller-spies
Hallo, ich habe nur ganz kurz drüber geschaut: 1. hinter ";Dummy-Text wählen:" muss ein (PROGN eingefügt werden und die öffnende (SETQ-Anweisung für "sel" fehlt auch. 2. Für die Berechnung von "proz" verwendest Du die Variable "S", die ist aber nirgenwo vorher bestimmt (hast Du wohl vergessen aus CADmium's Code rauszukopieren). viel Erfolg ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mueller-spies Mitglied
Beiträge: 9 Registriert: 06.09.2012 A. Müller-Wissmann Autocad2004 Autocad2006
|
erstellt am: 24. Sep. 2012 14:54 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe mal an dem Skript weiter gebastelt. nun funktioniert das Erstzen eines vorhandenen Textes nicht. Es kommt die Fehlermeldung: Fehler: Fehlerhafter Argumenttyp: lentityp nil Hier das erweiterte Skrpt (defun C:steigung(/ L P1 P2 X1 X2 Y1 Y2 Z1 Z2 S proz el sel) (if(and (setq L(car(entsel "\nLinie wählen: "))) (setq L(entget L)) (=(cdr(assoc 0 L))"LINE") (setq P1 (cdr(assoc 10 L))) (setq P2 (cdr(assoc 11 L))) (setq X1(car P1) Y1(cadr P1) Z1(caddr P1) X2(car P2) Y2(cadr P2) Z2(caddr P2) ) ) (progn (setq S (/(- Z2 Z1) (sqrt(+(*(- X2 X1)(- X2 X1)) (*(- Y2 Y1)(- Y2 Y1)) (*(- Z2 Z1)(- Z2 Z1)) ) ) ) ) (princ (strcat "\nSteigung gegenüber der XY-Ebene beträgt "(rtos (* S 1000) 2 2) "%o")) ;Dummy-Text wählen: sel (entsel "\n vorhandenen Text picken... ") ; Element und Pickpunkt el (entget (car sel) ; Element (Text) ;Dummy-Text durch Wert (berechnet) ersetzen: proz (rtos (* S 1000) 2 2) proz(strcat proz "%o") el (subst (cons 1 proz) (assoc 1 el) el) ) ;of setq ;Dummy-Text schreiben (princ S) (setvar "CMDECHO" ech) (prin1) ) ) Vielen Dank im Voraus
A. Müller-Wissmann [Diese Nachricht wurde von mueller-spies am 24. Sep. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mueller-spies Mitglied
Beiträge: 9 Registriert: 06.09.2012 A. Müller-Wissmann Autocad2004 Autocad2006
|
erstellt am: 24. Sep. 2012 15:35 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von mueller-spies: Hallo zusammen, ich habe mal an dem Skript weiter gebastelt. nun funktioniert das Erstzen eines vorhandenen Textes nicht. Es kommt die Fehlermeldung: Fehler: Fehlerhafter Argumenttyp: lentityp nilHier das erweiterte Skrpt (defun C:steigung(/ L P1 P2 X1 X2 Y1 Y2 Z1 Z2 S proz el sel) (if(and (setq L(car(entsel "\nLinie wählen: "))) (setq L(entget L)) (=(cdr(assoc 0 L))"LINE") (setq P1 (cdr(assoc 10 L))) (setq P2 (cdr(assoc 11 L))) (setq X1(car P1) Y1(cadr P1) Z1(caddr P1) X2(car P2) Y2(cadr P2) Z2(caddr P2) ) ) (progn (setq S (/(- Z2 Z1) (sqrt(+(*(- X2 X1)(- X2 X1)) (*(- Y2 Y1)(- Y2 Y1)) (*(- Z2 Z1)(- Z2 Z1)) ) ) ) ) (princ (strcat "\nSteigung gegenüber der XY-Ebene beträgt "(rtos (* S 1000) 2 2) "%o")) ;Dummy-Text wählen: sel (entsel "\n vorhandenen Text picken... ") ; Element und Pickpunkt el (entget (car sel) ; Element (Text) ;Dummy-Text durch Wert (berechnet) ersetzen: proz (rtos (* S 1000) 2 2) proz(strcat proz "%o") el (subst (cons 1 proz) (assoc 1 el) el) ) ;of setq ;Dummy-Text schreiben (princ S) (setvar "CMDECHO" ech) (prin1) ) ) Vielen Dank im Voraus
A. Müller-Wissmann Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |