Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Steigung einer 3d-Linie anschreiben

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:  Steigung einer 3d-Linie anschreiben (1653 mal gelesen)
mueller-spies
Mitglied


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

Beiträge: 9
Registriert: 06.09.2012

A. Müller-Wissmann
Autocad2004
Autocad2006

erstellt am: 06. Sep. 2012 15:13    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,
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




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: 06. Sep. 2012 15:18    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 mueller-spies 10 Unities + Antwort hilfreich

Steigung = DELTA Z / DELTA L

Delta 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) "%"))
    )
  )
)

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

archtools
Mitglied



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 07. Sep. 2012 12: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 mueller-spies 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von CADmium:
Steigung = DELTA Z / DELTA L

Delta 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


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

Beiträge: 9
Registriert: 06.09.2012

A. Müller-Wissmann
Autocad2004
Autocad2006

erstellt am: 07. Sep. 2012 14:40    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 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



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

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 07. Sep. 2012 14: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 mueller-spies 10 Unities + Antwort hilfreich

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


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

Beiträge: 9
Registriert: 06.09.2012

A. Müller-Wissmann
Autocad2004
Autocad2006

erstellt am: 07. Sep. 2012 14:55    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,
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


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 07. Sep. 2012 16:10    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 mueller-spies 10 Unities + Antwort hilfreich

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


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

Beiträge: 9
Registriert: 06.09.2012

A. Müller-Wissmann
Autocad2004
Autocad2006

erstellt am: 24. Sep. 2012 14:54    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 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


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

Beiträge: 9
Registriert: 06.09.2012

A. Müller-Wissmann
Autocad2004
Autocad2006

erstellt am: 24. Sep. 2012 15:35    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

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

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