Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Messen / Teilen mit Punktnummerierung - Intelligenter Linientyp

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:  Messen / Teilen mit Punktnummerierung - Intelligenter Linientyp (3331 mal gelesen)
Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 26. Mai. 2004 14:21    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 Leute!

Ich hab im Forum Rund um Acad dieses Thema schonmal gepostet:
http://ww3.cad.de/foren/ubb/Forum54/HTML/007317.shtml

Leider ohne viel Erfolg, ist kein lisp- Profi aufgesprungen....

Es geht mir um ein reines 2D- Tool, das vorher mit Teilen / Messen generierte Punkte mit einer einstellbaren Schrittweite durchnummeriert.

Könnte man auch zu einem "Intelligenten Linientyp" ausbauen wenn das ganze in Echtzeit passieren könnte...

Hat da keiner Lust drauf? 

Grüße aus Wien

Helmut

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: 26. Mai. 2004 14:38    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 Helmut Wieser 10 Unities + Antwort hilfreich

Da gibts die Seite www.defun.de ... da wird solche Programmanpassung sicherlich gerne gemacht.. 

------------------
- Thomas -

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 26. Mai. 2004 14:43    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 Helmut Wieser 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Helmut Wieser:
...
Hat da keiner Lust drauf? 
...


Hallo Helmut,

Lust schon, aber für mal eben schnell nebenbei aus dem Hut gezaubert ist es etwas zu aufwändig. ;-)

Grüße Holger

------------------
Holger Brischke
(defun - Lisp over night!
AutoLISP-Programmierung für AutoCAD
Da weiß man, wann man's hat!

Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

m-troeger
Mitglied
gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS


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

Beiträge: 295
Registriert: ..

ACAD14 und 2005;
MAP4; GeoCAD; PARIS;
( Vermessung )

erstellt am: 26. Mai. 2004 17:38    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hallo Helmut,

wenn ich richtig verstehe, dann schau hier mal rein http://ww3.cad.de/foren/ubb/Forum54/HTML/006555.shtml

Das Tool zum Messen und Teilen müßte man doch umbasteln, und eine Beschriftungsroutine hinzufügen können.

< EDIT
ich hab nun mal dem Tool von HEIDI (sh. Link oben) etwas hinzugefügt, so dass die Bruchpunkte beschriftet werden.(bei mir funzte nur teilen ???)
Die Beschriftung ist natürlich ausbaufähig.

Code:

(defun c:BTel(/ entity SegLn Letztes Pts cmd kw Segmente ss count nummer)
  (setq osmd (getvar "osmode"))
  (setvar "osmode" 0)

  (setq ss (ssget "_I"))
  (if ss
    (if (= 1 (sslength ss))
        (setq entity (ssname ss 0))
    )
  )
  (if (not entity)
    (if (setq entity (entsel "\nObjekt wählen"))
        (setq entity (car entity))
    )
  )
  (if entity (progn
    (initget "M T")
    (setq kw (getkword "\nMessen/Teilen: ")
          cmd (getvar "cmdecho")
          Letztes (entlast)
    )
    (setvar "cmdecho" 0)

    (if (= "M" kw)(progn
      (setq SegLn (getdist "\nLänge der Segmente: "))
      (command "_measure" entity SegLn)
    )(progn
      (setq Segmente (getint "\nAnzahl der Segmente: "))
      (command "_divide"  entity Segmente)
    ))
    (setq nummer (getreal "\n1. Beschriftungsnummer: "))
    (setq Pts(SammlePunkte Letztes)
          count (length pts)
    )
    (if Pts (progn
      (Brechen entity Pts)
      (Beschriften Pts)
      ;-- Lösche die Punkte die AutoCAD durch _MEASURE _DIVIDE einfügte
      (mapcar 'entdel pts)
    ))
    (setvar "cmdecho" cmd)
  ))
  (if (= "M" kw)
    (mapcar 'princ (List "\nEs wurden " (1+ count) " Einzelstücke erzeugt"))
    (princ "Fertig!")
  )
  (setvar "osmode" osmd)
  (princ)
)

; Aufbrechen der Polylinie <pl> an den Punkten die durch
; die Liste der Entitynamen <pts> angegeben sind
(defun Brechen(pl pts / en n)
  (foreach n pts
    (command "_break" pl (cdr (assoc 10 (entget n))) "@")
    (setq pl (entlast))
  )
)

; Beschriten der Polylinie <pl> an den Punkten die durch
; die Liste der Entitynamen <pts> angegeben sind
(defun Beschriften ( pts / n)
  (foreach n pts
    (command "text" (cdr (assoc 10 (entget n))) "" "" (rtos nummer 2 0) "")
;                  (    Einfügepunkt Text  ) "Texthöhe" "Einfügewinkel"  (Nummer runden auf 0 Nachkomma)  "ENTER" 
    (setq nummer (+ nummer 1))
  )
)

   
; <en> ist entlast bevor die Punkte eingefügt wurden
; Result: Liste der Elementnamen aller Punkte
(defun SammlePunkte(en / result )
(while (setq en(entnext en))
  (setq result (cons en result))
)
(reverse result)
)


ende EDIT >

------------------
Servus,
Mario  
www.the-skier.de

[Diese Nachricht wurde von m-troeger am 26. Mai. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 27. Mai. 2004 09:20    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi Helmut,
komme aus dem GIS Bereich und habe diverse Tools zur 2D Kanal Darstellung. Mach mal 'ne Skizze von dem was Du willst und poste die hier.
Dann kann ich Dir sagen OB ich das richtige Tool habe und welches das ist.

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 27. Mai. 2004 12:03    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


MESSEN.zip

 
Hallo alle!

Ich hab mal eine Datei angehängt wie das Ergebnis ausschauen könnte.

@Mario:
Bei mir bricht der Befehl mittendrin ab...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 27. Mai. 2004 13:29    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi,
also willst Du eine Stationierungsroutine!?

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 27. Mai. 2004 14:06    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 marc.scherer:
Hi,
also willst Du eine Stationierungsroutine!?


Unter "Stationierungsroutine" stell ich mir leider nichts vor, weiß also garnicht ob ich sowas will

Helmut

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 27. Mai. 2004 15: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 Nur für Helmut Wieser 10 Unities + Antwort hilfreich

Hi Helmut,
na sowas:

..

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 27. Mai. 2004 16:27    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

Schaut gut aus!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 27. Mai. 2004 17:09    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 Helmut Wieser 10 Unities + Antwort hilfreich

units an CADchup !!!!!

;;; STA geändert von CADchup
(defun C:STA (/ TXL AO MS EP was?)
  (setq savezin (getvar "DIMZIN"))
  (setvar "DIMZIN" 0)
  (setq SC  1000.0 ; ZE Meter, Maßstab 1:1000
TXL (* (getvar "TEXTSIZE")
      12.0
    ) ;_ end *
  ) ;_ end setq
  (initget "Kilometer Station Meter")
  (setq was? (getkword "Kilometer, Station oder Meter?"))
;Abfrage, wie bemasst werden soll
  (defun DOLOOP (PL / PT CPT LEN LENSTR PAR FD ANG PT2 TX WID)
    (while (setq PT (getpoint "\nPunkt wählen: "))
      (setq CPT (vlax-curve-getclosestpointto PL PT)
    LEN (vlax-curve-getdistatpoint PL CPT)
    PAR (vlax-curve-getparamatpoint PL CPT)
    FD (vlax-curve-getfirstderiv PL PAR)
    ANG (angle '(0 0 0) FD)
    ANG (if (> ANG pi)
  (+ ANG (/ pi 2))
  (- ANG (/ pi 2))
) ;_ end if
    PT2 (polar CPT ANG TXL)
      ) ;_ end setq
      (vla-addline MS (vlax-3d-point CPT) (vlax-3d-point PT2))
      (setq
TX
(strcat ; Texterzeugung komplett geändert
  (cond
    ((= "Kilometer" was?)
      (strcat (cond ((minusp LEN) "km ")
    ((zerop LEN) "km %%p")
    (t "km +")
      )
      (rtos (/ (fix LEN) SC) 2 3)
      ","
      (substr (rtos (/ LEN SC) 2 5)
      (- (strlen (rtos (/ LEN SC) 2 5)) 1)
      2
      )
      )
    ) ; Text für Kilometer
    ((= "Station" was?)
      (cond ((> 10 (fix LEN))
    (strcat "Stat. 0+00" (rtos LEN 2 2))
    )
    ((> 100 (fix LEN))
    (strcat "Stat. 0+0" (rtos LEN 2 2))
    )
    ((< 999 (fix LEN))
    (strcat
      "Stat. "
      (substr
(setq LENSTR (rtos LEN 2 2))
1
(- (vl-string-position (ascii ".") LENSTR) 3)
      )
      "+"
      (substr LENSTR (- (strlen LENSTR) 5))
    )
    )
    (t (strcat "Stat. 0+" (rtos LEN 2 2)))
      )
    )
; Text für Station
    ((= "Meter" was?) (rtos LEN 2 2))
; Text für Meter
  ) ;_ end cond
) ;_ end strcat

;;; AUSKOMMENTIERT, weil es unter A2k nicht lief
;;; TO (vla-addtext
;;; MS
;;; TX
;;; (vlax-3d-point '(0 0 0))
;;; (getvar "TEXTSIZE")
;;;       ) ;_ end vla-addtext
;;;      ) ;_ end setq
;;;      (vla-put-alignment TO acalignmentbottomright)
;;;      (vla-put-rotation TO ANG)
;;;      (vla-put-textalignmentpoint TO (vlax-3d-point PT2))

      ) ;_ end setq
      (setq
WID (cdr (assoc 41 (tblsearch "style" (getvar "textstyle"))))
      )
      (entmake (list (cons 0 "TEXT")
    (cons 1 TX)
    (cons 7 (getvar "TEXTSTYLE"))
    (cons 10 CPT)
    (cons 11 PT2)
    (cons 40 (getvar "TEXTSIZE"))
    (cons 41 WID)
    (cons 50 ANG)
    (cons 72 2)
    (cons 73 1)
      )
      )
    ) ;_ end while
  ) ;_ end defun
  (vl-load-com)
  (setq AO (vlax-get-acad-object)
MS (vla-get-modelspace (vla-get-activedocument AO))
  ) ;_ end setq
  (if (setq EP (entsel))
    (DOLOOP (vlax-ename->vla-object (car EP)))
  ) ;_ end if
  (setvar "DIMZIN" savezin)
  (princ)
) ;_ end defun

ciao georg

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 27. Mai. 2004 17: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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi Helmut,
ja sowas habe ich in Lisp fertig.
Sogar relativ modularisiert und flexibel bezüglich einer eigenen Anpassung Deinerseits.
Ich müßte das jedoch erst mal aus meiner Funktions-Bibliothek rauslösen.
Hast Du Interesse daran?

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

m-troeger
Mitglied
gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS


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

Beiträge: 295
Registriert: ..

ACAD14 und 2005;
MAP4; GeoCAD; PARIS;
( Vermessung )

erstellt am: 27. Mai. 2004 17:16    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hallo Marc,

wenn es dem Tool egal ist ob's ein Kanal oder eine Gasleitung ist, dann hab ich auch Interesse.

------------------
Servus,
Mario 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 27. Mai. 2004 17:57    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi Mario,
dem Tool ist so ziemlich alles egal :-).
Ist aber ausschließlich auf 2D ausgelegt.
Dafür Stationiert es alles, was ActiveX so mit den vlax-curve Sachen machen kann. Splines, Polylines, LWpolylines, Bögen, Linien...


Btw, es ist 'ne ziemlich stark modularisierte und manipulierte Version von CADchups "STA" Routine.
------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 27. Mai. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

m-troeger
Mitglied
gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS


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

Beiträge: 295
Registriert: ..

ACAD14 und 2005;
MAP4; GeoCAD; PARIS;
( Vermessung )

erstellt am: 31. Mai. 2004 21: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 Nur für Helmut Wieser 10 Unities + Antwort hilfreich

Hallo Marc,

nu das klingt doch nicht schlecht. Wäre nett wenn du mir das Teil mal zumailen könntest.

------------------
Servus,
Mario 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 01. Jun. 2004 08: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 Marc!

Klar hab ich Interesse an sowas!
Immer rüber mit dem Teil!

Helmut

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 01. Jun. 2004 09:19    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi,
testet mal das hier.
Hoffe, es fehlt keine Sub. Wenn ja, bitte hier posten...

Edit: Ach ja, den Aufruf zum Setzen des Layers habe ich mal dringelassen, da müßt Ihr dann in der Sub "MS:STAT-LAYER" Euren eigenen Layer-Setzer einbauen :-). Ansonsten könnt Ihr's ja umbauen.

Code:

;;; Globale Variable für Stationierungslayer
(setq $MS:STATLAY "P_$-TRASSIERUNG")

;;; Funktion zum Stationslayer setzen
(defun MS:STAT-LAYER ()
  (if (not SETZLAYER)
    (if (/= (load "set_lay" "err") "err")
      (MS:STAT-LAYER)
    ) ;_ end of if
    (if $MS:STATLAY
      (SETZLAYER $MS:STATLAY)
    ) ;_ end of if
  ) ;_ end of if
) ;_ end of defun


(defun C:STATION (/         L         M         OERR      OSM
                  OCE       SELECT    STAT      TEXTHÖHE? TEXTPREFIX
                  TEXTSUFFIX
                 )
  (defun *STAT_ERR* (S)
    (command "_.UNDO" "_End")
    (setvar "OSMODE" OSM)
    (setvar "cmdecho" OCE)
    (setq *ERROR* OERR)
    (princ)
  ) ;_ end of defun
  ;; Neue Fehlerfunktion aktivieren:
  (setq OERR    *ERROR*
        *ERROR* *STAT_ERR*
        OSM     (getvar "OSMODE")
        OCE     (getvar "cmdecho")
  ) ;_ end of setq


  ;; VORGABEWERTE:
  (setq STAT 100.0 ;_ Vorgabewert für Stationierungsinkrement
        M 1 ;_ Vorgabewert für Textmaßstab
        TEXTHÖHE? 1.25
        TEXTPREFIX
         ""
        TEXTSUFFIX
         ""
  ) ;_ end of setq

  (setvar "OSMODE" 0)
  (setvar "cmdecho" 0)

  (MS:STAT-LAYER) ;_ Layer setzen

;;;  (if (/= (tblsearch "style" "SIMPLEX") NIL) ;_ Textstil setzen
;;;    (setvar "textstyle" "SIMPLEX")
;;;  ) ;_ end of if

  (if (not
        (setq
          L (getreal "\nWert für Anfangsstationierung eingeben <0>: ")
        ) ;_ end of setq
      ) ;_ end of not
    (setq L 0)
  ) ;_ end of if
  ;; Undo-Gruppe erstellen:
  (command "_.UNDO" "_End" "_.UNDO" "_Group")
  (command "_.ucs" "_w")
  (if (not (setq SELECT
                  (entsel
                    "\nZu Stationierendes Objekt (Linie, Polylinie oder Spline) wählen: "
                  ) ;_ end of entsel
           ) ;_ end of setq
      ) ;_ end of not
    (princ "\nKein Objekt gewählt! Funktionsende.")
    (if (not (member (cdr (assoc 0 (entget (car SELECT))))
                     '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE")
             ) ;_ end of member
        ) ;_ end of not
      (princ
        "\nObjekt war weder Linie, Polylinie noch Spline! Funktionsende."
      ) ;_ end of princ
      (MS:STATION
        (car SELECT) ;_ Objname
        (cadr SELECT) ;_ geklickter Punkt
        L ;_ Anfangs-Station
        STAT ;_ Stationierungsinkrement
        M ;_ Maßstab für Texteintragungen
        TEXTHÖHE? ;_ Texthöhe
        TEXTPREFIX ;_ Präfix für Text
        TEXTSUFFIX ;_ Suffix für Text
        2 ;_ Textausrichtungs-Modus (hier: Immer in Stationierungsrichtung)
        2
      ) ;_ end of MS:STATION
    ) ;_ end of if
  ) ;_ end of if
  ;; Undo-Gruppe beenden:
  (command "_.UNDO" "_End")
  ;; Systemvariablen zuruecksetzen:
  (setvar "OSMODE" OSM)
  (setvar "cmdecho" OCE)
  (setq *ERROR* OERR)
  (princ)
) ;_ end of defun

(defun C:STATION2 (/         L         M         OERR      OSM
                   OCE       SELECT    STAT      TEXTHÖHE? TEXTPREFIX
                   TEXTSUFFIX
                  )
  (defun *STAT_ERR* (S)
    (command "_.UNDO" "_End")
    (setvar "OSMODE" OSM)
    (setvar "CMDECHO" OCE)
    (setq *ERROR* OERR)
    (princ)
  ) ;_ end of defun
  ;; Neue Fehlerfunktion aktivieren:
  (setq OERR    *ERROR*
        *ERROR* *STAT_ERR*
        OSM     (getvar "OSMODE")
        OCE     (getvar "CMDECHO")
  ) ;_ end of setq


  ;; VORGABEWERTE:
  (setq M 1 ;_ Vorgabewert für Textmaßstab
        TEXTPREFIX
         ""
        TEXTSUFFIX
         ""
  ) ;_ end of setq

  (setvar "OSMODE" 0)
  (setvar "CMDECHO" 0)

  (MS:STAT-LAYER) ;_ Layer setzen

;;;  (if (/= (tblsearch "style" "SIMPLEX") NIL) ;_ Textstil setzen
;;;    (setvar "textstyle" "SIMPLEX")
;;;  ) ;_ end of if

  (if (not
        (setq
          L (getdist
              "\nWert für Anfangsstationierung eingeben/picken <0>: "
            ) ;_ end of getdist
        ) ;_ end of setq
      ) ;_ end of not
    (setq L 0)
  ) ;_ end of if
  (if (not (setq STAT
                  (getdist
                    "\nWert für Stationierungs-Inkrement eingeben/picken <100.0>: "
                  ) ;_ end of getdist
           ) ;_ end of setq
      ) ;_ end of not
    (setq STAT 100.0)
  ) ;_ end of if
  (if (not (setq TEXTHÖHE?
                  (getdist "\nWert für Texthöhe eingeben/picken <1.25>: "
                  ) ;_ end of getdist
           ) ;_ end of setq
      ) ;_ end of not
    (setq TEXTHÖHE? 1.25)
  ) ;_ end of if

  ;; Undo-Gruppe erstellen:
  (command "_.UNDO" "_End" "_.UNDO" "_Group")
  (command "_.ucs" "_w")
  (if (not (setq SELECT
                  (entsel
                    "\nZu Stationierendes Objekt (Linie, Polylinie oder Spline) wählen: "
                  ) ;_ end of entsel
           ) ;_ end of setq
      ) ;_ end of not
    (princ "\nKein Objekt gewählt! Funktionsende.")
    (if (not (member (cdr (assoc 0 (entget (car SELECT))))
                     '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE")
             ) ;_ end of member
        ) ;_ end of not
      (princ
        "\nObjekt war weder Linie, Polylinie noch Spline! Funktionsende."
      ) ;_ end of princ
      (MS:STATION
        (car SELECT) ;_ Objname
        (cadr SELECT) ;_ geklickter Punkt
        L ;_ Anfangs-Station
        STAT ;_ Stationierungsinkrement
        M ;_ Maßstab für Texteintragungen
        TEXTHÖHE? ;_ Texthöhe
        TEXTPREFIX ;_ Präfix für Text
        TEXTSUFFIX ;_ Suffix für Text
        2 ;_ Textausrichtungs-Modus (hier: Immer in Stationierungsrichtung)
        2
      ) ;_ end of MS:STATION
    ) ;_ end of if
  ) ;_ end of if
  ;; Undo-Gruppe beenden:
  (command "_.UNDO" "_End")
  ;; Systemvariablen zuruecksetzen:
  (setvar "OSMODE" OSM)
  (setvar "CMDECHO" OCE)
  (setq *ERROR* OERR)
  (princ)
) ;_ end of defun


(defun C:STATION-FROM (/           BEGIN-AT    PRECISION   SCALING
                       TEXTMODE    TXTPREFIX   TXTSIZE     TXTSUFFIX
                      )
  (defun *STAT_ERR* (S)
    (setvar "OSMODE" OSM)
    (setq *ERROR* OERR)
    (princ)
  ) ;_ end of defun
  ;; Neue Fehlerfunktion aktivieren:
  (setq OERR    *ERROR*
        *ERROR* *STAT_ERR*
        OSM     (getvar "OSMODE")
  ) ;_ end of setq

  (setvar "OSMODE" 0)

  (MS:STAT-LAYER) ;_ Layer setzen

;;;  (if (/= (tblsearch "style" "SIMPLEX") NIL) ;_ Textstil setzen
;;;    (setvar "textstyle" "SIMPLEX")
;;;  ) ;_ end of if

  ;; VORGABEWERTE:
  (setq BEGIN-AT 0
        SCALING 1
        TXTSIZE 1.25
        TXTPREFIX ""
        TXTSUFFIX ""
        TEXTMODE 2
        PRECISION 2
  ) ;_ end of setq
  (MS:STATION-FROM
    BEGIN-AT SCALING TXTSIZE TXTPREFIX TXTSUFFIX TEXTMODE PRECISION) ;_ end of MS:STATION-FROM
;_ end of MS:STATION-FROM
  (setvar "OSMODE" OSM)
  (setq *ERROR* OERR)
  (princ)
) ;_ end of defun

(defun C:STATION-FROM2 (/           BEGIN-AT    PRECISION   SCALING
                        TEXTMODE    TXTPREFIX   TXTSIZE     TXTSUFFIX
                       )
  (defun *STAT_ERR* (S)
    (setvar "OSMODE" OSM)
    (setq *ERROR* OERR)
    (princ)
  ) ;_ end of defun
  ;; Neue Fehlerfunktion aktivieren:
  (setq OERR    *ERROR*
        *ERROR* *STAT_ERR*
        OSM     (getvar "OSMODE")
  ) ;_ end of setq

  (setvar "OSMODE" 0)

  (MS:STAT-LAYER) ;_ Layer setzen

;;;  (if (/= (tblsearch "style" "SIMPLEX") NIL) ;_ Textstil setzen
;;;    (setvar "textstyle" "SIMPLEX")
;;;  ) ;_ end of if

  (if (not
        (setq
          BEGIN-AT
           (getdist
             "\nWert für Anfangsstationierung eingeben/picken <0>: "
           ) ;_ end of getdist
        ) ;_ end of setq
      ) ;_ end of not
    (setq BEGIN-AT 0)
  ) ;_ end of if
  (if (not (setq TXTSIZE
                  (getdist "\nWert für Texthöhe eingeben/picken <1.25>: ")
           ) ;_ end of setq
      ) ;_ end of not
    (setq TXTSIZE 1.25)
  ) ;_ end of if
  (setq TXTPREFIX ""
        TXTSUFFIX ""
        SCALING 1.0
        TEXTMODE 2
        PRECISION 2
  ) ;_ end of setq
  (MS:STATION-FROM
    BEGIN-AT SCALING TXTSIZE TXTPREFIX TXTSUFFIX TEXTMODE PRECISION) ;_ end of MS:STATION-FROM
;_ end of MS:STATION-FROM
  (setvar "OSMODE" OSM)
  (setq *ERROR* OERR)
  (princ)
) ;_ end of defun


(defun C:TEST (/ INKREMENT? MODE? OBJ? PKT? PREFIX? SEL SKALIERUNG? STARTWERT? SUFFIX? TXTGRÖßE? PRÄZISION?)
  (setq SEL (entsel))
  (if SEL
    (progn
      (setq OBJ?        (car SEL)
            PKT?        (cadr SEL)
            STARTWERT?  (getdist "\nStartwert für Stationierung eingeben/picken: ")
            SKALIERUNG? (getreal "\nMaßstab für Stationierung eingeben: ")
            INKREMENT?  (getdist "\nInkrement für Stationierung eingeben/picken: ")
            TXTGRÖßE?   (getdist "\nTexthöhe für Stationierung eingeben/picken: ")
            PRÄZISION?  (getint "\nAnzahl Nachkommastellen? (0-8): ")
            PREFIX?     (getstring t "\nPrefix: ")
            SUFFIX?     (getstring t "\nSuffix: ")
      ) ;_ end of setq
      (initget "Ja Nein")
      (setq MODE? (getkword "\nTextausrichtung immer in Stationierungsrichtung? [Ja/Nein] <Ja>: "))
      (if (not mode?)
        (setq mode? "Ja")
        )
      (if (= mode? "Ja")
        (setq mode? 2)
        (setq mode? 1)
        )
      (MS:STATION OBJ? PKT? STARTWERT? INKREMENT? SKALIERUNG? TXTGRÖßE? PREFIX? SUFFIX? mode? PRÄZISION?)
    ) ;_ end of progn
  ) ;_ end of if
)

(defun C:TEST2 (/            MODE?        PREFIX?      PRÄZISION?
                SKALIERUNG?  STARTWERT?   SUFFIX?      TXTGRÖßE?
               )
  (setq STARTWERT?  (getdist "\nStartwert für Stationierung eingeben/picken: "
                    ) ;_ end of getdist
        SKALIERUNG? (getreal "\nMaßstab für Stationierung eingeben: ")
        TXTGRÖßE?   (getdist "\nTexthöhe für Stationierung eingeben/picken: ")
        PRÄZISION?  (getint "\nAnzahl Nachkommastellen? (0-8): ")
        PREFIX?     (getstring t "\nPrefix: ")
        SUFFIX?     (getstring t "\nSuffix: ")
  ) ;_ end of setq
  (initget "Ja Nein")
  (setq MODE?
         (getkword
           "\nTextausrichtung immer in Stationierungsrichtung? [Ja/Nein] <Ja>: "
         ) ;_ end of getkword
  ) ;_ end of setq
  (if (not MODE?)
    (setq MODE? "Ja")
  ) ;_ end of if
  (if (= MODE? "Ja")
    (setq MODE? 2)
    (setq MODE? 1)
  ) ;_ end of if
  (MS:STATION-FROM
    STARTWERT? SKALIERUNG? TXTGRÖßE? PREFIX? SUFFIX? MODE? PRÄZISION?) ;_ end of MS:STATION-FROM
;_ end of MS:STATION-FROM
;_ end of MS:STATION-FROM
  (princ)
)

;;; ************ Sub-Routines **********************

(vl-load-com)
;;; Startparameter für MS:STATION
;;; objname    = Lisp-Objektname der Polylinie
;;; begin-at   = Startwert für Stationierung
;;; increment  = Stationierungsinkrement
;;; scaling    = Maßstabs-Faktor für Inkrement-Werte
;;; txtsize    = Textgröße
;;; txtprefix  = Präfix für numerischen Wert
;;; txtsuffix  = Suffix für numerischen Wert
;;; TEXTMODE   = Steuert die Ausrichtung der Textobjekte 1 = Immer lesbar 2= In Stationierungsrichtung
;;; PRECISION  = Steuert die Anzahl der Nachkomma-Stellen 0-8 ist möglich (wie luprec).
;;;              Werte über acht werden auf 8 gesetzt
(defun MS:STATION (OBJNAME      PICKPT       BEGIN-AT     INCREMENT
                   SCALING      TXTSIZE      TXTPREFIX    TXTSUFFIX TEXTMODE PRECISION
                   /            END-PKT      INDEX        OBJLENGTH
                   PARTS        REVERSED     START-PKT    STATION-LST
                   VLA-OBJNAME
                  )
  (setq OBJLENGTH   (LIN-LENGTH? OBJNAME)
        INCREMENT   (float INCREMENT)
        PARTS       (fix (/ OBJLENGTH INCREMENT)) ;_ Anzahl der Teile in integer
        VLA-OBJNAME (vlax-ename->vla-object OBJNAME)
        INDEX       1
  ) ;_ end of setq
  (if (IS-AT-START? OBJNAME PICKPT) ;_ gegen Erstellungsrichtung arbeiten oder in Erstellungsrichtung
    (setq START-PKT (vlax-curve-getstartpoint VLA-OBJNAME)
          END-PKT   (vlax-curve-getendpoint VLA-OBJNAME)
          REVERSED  NIL
    ) ;_ end of setq
    (setq END-PKT   (vlax-curve-getstartpoint VLA-OBJNAME)
          START-PKT (vlax-curve-getendpoint VLA-OBJNAME)
          REVERSED  t
    ) ;_ end of setq
  ) ;_ end of if
  (if (> TEXTMODE 1)
    (if REVERSED
      (setq TEXTMODE 3)
    ) ;_ end of if
  ) ;_ end of if
  (MS:STATIONPLACING
    VLA-OBJNAME
    START-PKT
    (strcat TXTPREFIX
            (MS:REFORMAT-TXT
              (rtos (* (+ 0.0 BEGIN-AT) SCALING) 2 PRECISION)
              "."
              PRECISION
            ) ;_ end of MS:REFORMAT-TXT
            TXTSUFFIX
    ) ;_ end of strcat
    TXTSIZE
    TEXTMODE
  ) ;_ end of MS:STATIONPLACING
  (MS:STATIONPLACING
    VLA-OBJNAME
    END-PKT
    (strcat TXTPREFIX
            (MS:REFORMAT-TXT
              (rtos (* (+ OBJLENGTH BEGIN-AT) SCALING)
                    2
                    PRECISION
              ) ;_ end of rtos
              "."
              PRECISION
            ) ;_ end of MS:REFORMAT-TXT
            TXTSUFFIX
    ) ;_ end of strcat
    TXTSIZE
    TEXTMODE
  ) ;_ end of MS:STATIONPLACING
  (if (not (zerop PARTS))
    (progn
      (repeat PARTS
        (setq STATION-LST (cons (* INCREMENT INDEX)
                                STATION-LST
                          ) ;_ end of cons
              INDEX       (1+ INDEX)
        ) ;_ end of setq
      ) ;_ end of repeat
      (setq STATION-LST (reverse STATION-LST))
      (foreach ELEM STATION-LST
        (MS:STATIONPLACING
          VLA-OBJNAME
          (CALCULATE-INSERTATION OBJNAME PICKPT ELEM)
          (strcat TXTPREFIX
                  (MS:REFORMAT-TXT
                    (rtos (* (+ ELEM BEGIN-AT) SCALING)
                          2
                          PRECISION
                    ) ;_ end of rtos
                    "."
                    PRECISION
                  ) ;_ end of MS:REFORMAT-TXT
                  TXTSUFFIX
          ) ;_ end of strcat
          TXTSIZE
          TEXTMODE
        ) ;_ end of MS:STATIONPLACING
      ) ;_ end of foreach
      (princ (strcat "\nOK, >"
                     (itoa (+ PARTS 2))
                     "< Stationierungen eingefügt!"
             ) ;_ end of strcat
      ) ;_ end of princ
    ) ;_ end of progn
    (princ "\nOK, >2< Stationierungen eingefügt!")
  ) ;_ end of if
) ;_ end of defun


;;; Stationierung nach geklicktem Punkt
(defun MS:STATION-FROM (BEGIN-AT    SCALING     TXTSIZE     TXTPREFIX
                        TXTSUFFIX   TEXTMODE    PRECISION   /
                       )
  (defun DOLOOP (SELECTED /)
    (setq OBJNAME (car SELECTED)
          PICKPT  (cadr SELECTED)
          PL      (vlax-ename->vla-object OBJNAME)
    ) ;_ end of setq
    (if (IS-AT-START? OBJNAME PICKPT) ;_ gegen Erstellungsrichtung arbeiten oder in Erstellungsrichtung
      (setq REVERSED NIL) ;_ end of setq
      (setq REVERSED t) ;_ end of setq
    ) ;_ end of if
    (if (> TEXTMODE 1)
      (if REVERSED
        (setq TEXTMODE 3)
      ) ;_ end of if
    ) ;_ end of if
    (while (setq PT (getpoint "\nPunkt für Station wählen: "))
      (setq CPT (vlax-curve-getclosestpointto PL PT))
      (if (not REVERSED)
        (setq LEN (vlax-curve-getdistatpoint PL CPT))
        (setq
          LEN (- (LIN-LENGTH? OBJNAME)
                 (vlax-curve-getdistatpoint PL CPT)
              ) ;_ end of -
        ) ;_ end of setq
      ) ;_ end of if
      (setq IPT (CALCULATE-INSERTATION OBJNAME PICKPT LEN))

      (if (or (equal CPT (vlax-curve-getendpoint PL)) ;_ wenn der berechnete Einfügepunkt auf End-oder Startpunkt liegt,
              (equal CPT (vlax-curve-getstartpoint PL))
          ) ;_ end of or
        (if (not (equal CPT PT)) ;_ ...und dann der gepickte Punkt nicht auch dort war (OFang!),
          (princ
            "\nGeklickter Punkt war VOR Startpunkt oder HINTER Endpunkt des linearen Objekts..."
          ) ;_ end of princ
          (progn
            (if (equal CPT (vlax-curve-getendpoint PL))
              (setq INS-PKT (vlax-curve-getendpoint PL))
              (setq INS-PKT (vlax-curve-getstartpoint PL))
            ) ;_ end of if
            (MS:STATIONPLACING
              PL
              INS-PKT
              (strcat TXTPREFIX
                      (MS:REFORMAT-TXT
                        (rtos (* (+ LEN BEGIN-AT) SCALING)
                              2
                              PRECISION
                        ) ;_ end of rtos
                        "."
                        PRECISION
                      ) ;_ end of MS:REFORMAT-TXT
                      TXTSUFFIX
              ) ;_ end of strcat
              TXTSIZE
              TEXTMODE
            ) ;_ end of MS:STATIONPLACING
          ) ;_ end of progn
        ) ;_ end of if
        (MS:STATIONPLACING
          PL
          IPT
          (strcat TXTPREFIX
                  (MS:REFORMAT-TXT
                    (rtos (* (+ LEN BEGIN-AT) SCALING)
                          2
                          PRECISION
                    ) ;_ end of rtos
                    "."
                    PRECISION
                  ) ;_ end of MS:REFORMAT-TXT
                  TXTSUFFIX
          ) ;_ end of strcat
          TXTSIZE
          TEXTMODE
        ) ;_ end of MS:STATIONPLACING
      ) ;_ end of if
    ) ;_ end while
  ) ;_ end defun
  (princ "\nZu Stationierendes Objekt (Linie, Polylinie oder Spline) wählen: ")
  (if (setq EP (entsel))
    (DOLOOP EP)
  ) ;_ end if
  (princ)
) ;_ end of defun

(defun MS:REFORMAT-TXT (LTXT       DELIMITER  PRECISION  /
                        DECIMAL    FRST       POST-DEC   REAL
                        REST       RETVAL     SUBSTRACTION
                        TEILER OLD-DIMZIN OLD-LUPREC
                       )
  (setq OLD-DIMZIN (getvar "dimzin")
        OLD-LUPREC (getvar "luprec")
  ) ;_ end of setq
  (setvar "dimzin" 1)
  (if (> PRECISION 8)
    (setq PRECISION 8)
  ) ;_ end of if
  (setvar "luprec" PRECISION)
  (setq LTXT (rtos (atof LTXT) 2 PRECISION))
  (if (setq DECIMAL (vl-string-position (ascii ".") LTXT))
    (setq
      POST-DEC (substr
                 (rtos (- (atof LTXT) (atoi (substr LTXT 1 DECIMAL)))
                       2
                       PRECISION
                 ) ;_ end of rtos
                 3
               ) ;_ end of substr
    ) ;_ end of setq
    (setq POST-DEC "")
  ) ;_ end of if
  (setq TEILER       1000.0
        REAL         (atof LTXT)
        FRST         (fix (/ REAL TEILER))
        SUBSTRACTION (* FRST TEILER)
        REST         (itoa (fix (- REAL SUBSTRACTION)))
  ) ;_ end of setq
  (if (not (zerop PRECISION))
    (setq RETVAL (strcat (itoa FRST)
                         " +"
                         (MS:MK000 REST 3)
                         DELIMITER
                         (MS:MK000 POST-DEC PRECISION)
                 ) ;_ end of strcat
    ) ;_ end of setq
    (setq RETVAL (strcat (itoa FRST)
                         " +"
                         (MS:MK000 REST 3)
                 ) ;_ end of strcat
    ) ;_ end of setq
  ) ;_ end of if
  (setvar "dimzin" OLD-DIMZIN)
  (setvar "luprec" OLD-LUPREC)
  RETVAL
) ;_ end of defun

(defun MS:MK000 (WRT ANZAHL /)
  (if (not (zerop ANZAHL))
    (if (/ (strlen WRT) ANZAHL)
      (repeat (- ANZAHL (strlen WRT))
        (setq WRT (strcat "0" WRT))
      ) ;_ end of repeat
    ) ;_ end of if
    (setq wrt "")
  ) ;_ end of if
  WRT
) ;_ end of defun


;;; Mode steuert wie die Texte plaziert werden
;;; Mode = 1 Texte sind immer von vorne und rechts lesbar
;;; Mode = 2 Texte sind immer in Stationierungsrichtung, Polylinie wird in Erstellungsrichtung stationiert
;;; Mode = 3 Texte sind immer in Stationierungsrichtung, Polylinie wird GEGEN Erstellungsrichtung stationiert
(defun MS:STATIONPLACING
       (PL PT TXT TXTSIZE MODE / ANG FD MS PAR PT2 TO TXL)
  (if (not PT)
    (princ "\nUngültig!")
    (progn
      (setq MS  (vla-get-modelspace
                  (vla-get-activedocument (vlax-get-acad-object))
                ) ;_ end of vla-get-modelspace
            TXL (* TXTSIZE (+ (strlen TXT) 2))
            PT  (vlax-curve-getclosestpointto PL PT)
            PAR (vlax-curve-getparamatpoint PL PT)
            FD  (vlax-curve-getfirstderiv PL PAR)
            ANG (angle '(0 0 0) FD)
      ) ;_ end of setq
      (cond
        ((= MODE 1)
         (setq ANG (if (> ANG pi)
                     (+ ANG (/ pi 2))
                     (- ANG (/ pi 2))
                   ) ;_ end of if
         ) ;_ end of setq
        )
        ((= MODE 2)
         (setq ANG (- ANG (/ pi 2))
         ) ;_ end of setq
        )
        ((= MODE 3)
         (setq ANG (+ ANG (/ pi 2))
         ) ;_ end of setq
        )
      ) ;_ end of cond
      (setq PT2 (polar PT ANG TXL))
      (vla-addline MS (vlax-3d-point PT) (vlax-3d-point PT2))
      (setq TO (vla-addtext
                 MS
                 TXT
                 (vlax-3d-point '(0 0 0))
                 TXTSIZE
               ) ;_ end vla-addtext
      ) ;_ end setq
      (vla-put-alignment TO acalignmentbottomright)
      (vla-put-rotation TO ANG)
      (vla-put-textalignmentpoint TO (vlax-3d-point PT2))
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun

;;; Länge eines linearen Objektes berechnen:
;;; -> Elementname
;;; <- Länge des linearen Elements
(defun LIN-LENGTH? (ENAME /)
  (setq ENAME (->VLA-OBJECT ENAME))
  (vlax-curve-getdistatparam
    ENAME
    (vlax-curve-getendparam ENAME)
  ) ;_ end of vlax-curve-getdistatparam
) ;_ end of defun

;;; Funktion gibt Ename zurück, wenn Lisp-Objekt oder vla-Objekt
;;; übergeben worden sind. Ansonsten nil
(defun ->ENAME (ENAME /)
  (cond
    ((= (type ENAME) 'VLA-OBJECT) (vlax-vla-object->ename ENAME))
    ((= (type ENAME) 'ENAME) ENAME)
    (t NIL)
  ) ;_ end of cond
) ;_ end of defun

;;; Funktion gibt vla-Objekt zurück, wenn Lisp-Objekt oder vla-Objekt
;;; übergeben worden sind. Ansonsten nil
(defun ->VLA-OBJECT (ENAME /)
  (cond
    ((= (type ENAME) 'ENAME) (vlax-ename->vla-object ENAME))
    ((= (type ENAME) 'VLA-OBJECT) ENAME)
    (t NIL)
  ) ;_ end of cond
) ;_ end of defun

;;; ermittelt, ob der Pickpunkt näher am Start-oder End-Punkt des linearen Objekts war
;;; das ist wichtig für die Abstandsberechnung (gegen oder in Objektrichtung rechnen?)
;;; -> Obj = Elementname
;;; -> Pkt = Pickpunkt auf Element
(defun IS-AT-START? (OBJ PKT /)
  (< (2P-DIST OBJ PKT (START-PKT? OBJ)) ;_ Ist der Pickpunkt näher am Startpunkt?
     (2P-DIST OBJ PKT (END-PKT? OBJ))
  ) ;_ end of <
) ;_ end of defun

;;; Endpunkt in WKS für lineares Objekt ermitteln
(defun END-PKT? (ENAME /)
  (vlax-curve-getendpoint (->VLA-OBJECT ENAME))
) ;_ end of defun

;;; Startpunkt in WKS für lineares Objekt ermitteln
(defun START-PKT? (ENAME /)
  (vlax-curve-getstartpoint (->VLA-OBJECT ENAME))
) ;_ end of defun

;;; Berechnung der Länge zwischen zwei Punkten
;;; die auf einer Polylinie liegen
;;; -> Punkt1, Punkt2 und Elementname
;;; <- Länge zwischen diesen Punkten
(defun 2P-DIST (ENAME PT1 PT2 /)
  (setq ENAME (->VLA-OBJECT ENAME))
  (abs (- (vlax-curve-getdistatpoint
            ENAME
            (vlax-curve-getclosestpointto
              ENAME
              PT1
            ) ;_ end of vlax-curve-getclosestpointto
          ) ;_ end of vlax-curve-getDistAtPoint
          (vlax-curve-getdistatpoint
            ENAME
            (vlax-curve-getclosestpointto
              ENAME
              PT2
            ) ;_ end of vlax-curve-getClosestPointTo
          ) ;_ end of vlax-curve-getdistatpoint
       ) ;_ end of -
  ) ;_ end of abs
) ;_ end of defun

;;; Berechnet den Punkt auf einem linearen Objekt
;;; -> Obj = Elementname
;;; -> Pkt = Pickpunkt auf Element
;;; -> Abstand, der abzutragen ist
(defun CALCULATE-INSERTATION (OBJ PKT ABSTAND /)
  (if (IS-AT-START? OBJ PKT)
    (FIND-PT OBJ ABSTAND)
    (FIND-PT-REVERSE OBJ ABSTAND)
  ) ;_ end of if
) ;_ end of defun

;;; Punkt finden, der in einem bestimmten Abstand zum Startpunkt liegt.
;;; IN RICHTUNG des linearen Objektes.
;;; -> Abstand, Element
;;; <- Welt-Koordinate oder nil (wenn nicht auf Element!)
(defun FIND-PT (ENAME ABSTAND /)
  (vlax-curve-getpointatdist
    (->VLA-OBJECT ENAME)
    ABSTAND
  ) ;_ end of vlax-curve-getpointatdist
) ;_ end of defun

;;; Punkt finden, der in einem bestimmten Abstand zum ENDpunkt liegt.
;;; IN RICHTUNG des linearen Objektes.
;;; -> Abstand, Element
;;; <- Welt-Koordinate oder nil (wenn nicht auf Element!)
(defun FIND-PT-REVERSE (ENAME ABSTAND /)
  (setq ENAME (->VLA-OBJECT ENAME))
  (vlax-curve-getpointatdist
    ENAME
    ;; Differenz zwischen Geamtlänge des Elements
    ;; und Distanz ergiebt Länge vom Startpunkt
    (- (vlax-curve-getdistatparam
         ENAME
         (vlax-curve-getendparam ENAME)
       ) ;_ end of vlax-curve-getdistatparam
       ABSTAND
    ) ;_ end of -
  ) ;_ end of vlax-curve-getpointatdist
) ;_ end of defun


;;; Punkt finden, der in einem Abstand RELATIV zu einem Punkt
;;; auf dem linearen Objekt liegt.
;;; Abstand NEGATIV angeben für relativ ENTGEGEGEN der Richtung!
;;; -> Abstand, Element, Startpunkt
;;; <- Welt-Koordinate oder nil (wenn nicht auf Element!)
(defun FIND-PT-RELATIVE (ENAME PKT ABSTAND /)
  (setq ENAME (->VLA-OBJECT ENAME))
  (vlax-curve-getpointatdist
    ENAME
    (+ (vlax-curve-getdistatpoint
         ENAME
         (vlax-curve-getclosestpointto
           ENAME
           PKT
         ) ;_ end of vlax-curve-getclosestpointto
       ) ;_ end of vlax-curve-getdistatpoint
       ABSTAND
    ) ;_ end of +
  ) ;_ end of vlax-curve-getpointatdist
) ;_ end of defun


(princ "\nStationierungsroutinen")
(princ "\nAufruf: STATION[2], STATION-FROM[2] oder TEST[2]")
(princ)



..

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 01. Jun. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 01. Jun. 2004 11:32    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 Marc!

Spürst Du den warmen U-Regen?

Das Tool funktioniert!

Trägt alle 100 Zeichnungeinheiten entlang einer Plinie/Linie/Spline einen Text ein und Addiert zu einem Anfangswert jeweil 100 dazu. (Das weißt Du natürlich, ich schreib dass jetzt eher für mich und andere Uneingeweihte).

Jetzt meine Frage:

Kann mann die Teilungslänge und den Differenzwert (unabhängig voneinander) einstellen also z.B. alle 50 Zeichnungseinheiten einen Wert von 1 addieren (das wären dann 2% Gefälle) oder muß man da das ganze lisp umschreiben, und wenn ja, wo?

Wie gesagt: Herzlichen Dank - Leute wie Du helfen mir mein angeknackstes Vertrauen in die Menschheit wieder etwas aufzupolieren!

Helmut

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 01. Jun. 2004 11:52    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi,
Du meinst also eine Beschriftung, die unabhängig von der jeweiligen Länge der Pline arbeitet? Im Augenblick orientiert sich die Beschriftung ja an der Länge der Pline bzw. der Abschnittslänge...
Hm...
Im Prinzip müßte das mit dem "Scaling" der Sub MS:Station funktionieren.
Rufe mal die Funktion Test auf.
Folgender Dialog ergibt sich:
Objekt wählen: [Wähle ein Objekt]
Startwert für Stationierung eingeben/picken: 0
Maßstab für Stationierung eingeben: 0.02
Inkrement für Stationierung eingeben/picken: 50
Texthöhe für Stationierung eingeben/picken: 2
Anzahl Nachkommastellen? (0-8): 2
Prefix: [Enter]
Suffix: [Enter]
Textausrichtung immer in Stationierungsrichtung? [Ja/Nein] <Ja>: [Enter]

Durch den Maßstab (Kehrwert von 50) sollte der von Dir gewünschte Effekt eintreten.

Wenn Du Dir mal alle "defun C[Doppelpunkt]" Funktionen anguckst, wirst Du sicherlich nachvollziehen können, wie Du Dir relativ leicht 'ne eigene Funktion zusammenbauen kannst. Alle nutzen nämlich die gleiche Sub "MS:STATION", welche Du dann nur mit den richtigen Argumenten füttern mußt, nachzulesen im jeweiligen Kommentar:

;;; objname    = Lisp-Objektname der Polylinie
;;; begin-at   = Startwert für Stationierung
;;; increment  = Stationierungsinkrement

!!!Achtung!!!!:
Hier kommt das für Dich relevante Argument:
;;; scaling    = Maßstabs-Faktor für Inkrement-Werte

;;; txtsize    = Textgröße
;;; txtprefix  = Präfix für numerischen Wert
;;; txtsuffix  = Suffix für numerischen Wert
;;; TEXTMODE   = Steuert die Ausrichtung der Textobjekte 1 = Immer lesbar 2= In Stationierungsrichtung
;;; PRECISION  = Steuert die Anzahl der Nachkomma-Stellen 0-8 ist möglich (wie luprec).
;;;              Werte über acht werden auf 8 gesetzt

..

------------------
Ciao,
Marc

[Diese Nachricht wurde von marc.scherer am 01. Jun. 2004 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 01. Jun. 2004 12:11    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 Marc!

Das mit dem Scaling hab ich mittlerweile selbst rausgefunden, funktioniert auch super!

Bei Deiner Funktion TEST haut bei mir die Eingabe des Wertes der Anfangsstationierung nicht hin, was bei "Station" funktioniert? Ok- das krieg ich vielleicht auch selbst raus...

Die Funktion geht auf BKS Welt - muß dass sein?

Nochmals Dank

Helmut


PS:

Wenn Dir meine Anfänger- Fragen lästig sind ist dass für mich auch vollkommen ok.
Du hast mir den Weg gezeigt, gehen muß ich ihn wohl selbst...

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 01. Jun. 2004 13: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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi,
ja, BKS Welt muß sein.
Wenn man jedoch die Funktionen um den bereits hier geposteten Standarderrorhandler (oder andererweitige Mechanismen zum Zurücksetzen vorheriger Werte) erweitert, könnte die Funktion auch das vorherige BKS wiederherstellen.
In etwa so:
(Um die Änderungen in den anderen defun C's umzusetzen, gucke Dir die hier stellvertretend geänderte an. Änderungen findest Du überall wo ";;; CAD.DE -Edit:" im Quellcode steht. Alles nach der Funktion Station ist dann der Errorhandler, bzw. gehört dazu.)
Code:

(defun C:STATION (/  L M SELECT STAT TEXTHÖHE? TEXTPREFIX TEXTSUFFIX)
;;; CAD.DE -Edit: Standard-Errorhandler, handelt UCS, Undo uns Sysvars
  (STARTERRORHANDLER
    "Funktion C:STATION" ;_ Zusatz zur Fehermeldung > on error und wenn *verbose* = T
    't ;_ Undomode? T= Ja, nil = Nein
    '( ;_ Sysvars sichern und auf folgende Werte setzen....
      ("CMDECHO" . 0)
      ("CMDDIA" . 0)
      ("OSMODE" . 0)
    )
    'SAVE-UCS                          ; on-start
    'RESTORE-UCS                        ; on-good
    NIL                                ; on-error (tue nix, Undo setzt auch das BKS zurück!)
  ) ;_ end of STARTERRORHANDLER
;;; CAD.DE -Edit: Altes Errorhandling, deaktiviert
;;;  (defun *STAT_ERR* (S)
;;;    (command "_.UNDO" "_End")
;;;    (setvar "OSMODE" OSM)
;;;    (setvar "cmdecho" OCE)
;;;    (setq *ERROR* OERR)
;;;    (princ)
;;;  ) ;_ end of defun
;;;  ;; Neue Fehlerfunktion aktivieren:
;;;  (setq OERR    *ERROR*
;;;        *ERROR* *STAT_ERR*
;;;        OSM    (getvar "OSMODE")
;;;        OCE    (getvar "cmdecho")
;;;  ) ;_ end of setq


  ;; VORGABEWERTE:
  (setq STAT 100.0 ;_ Vorgabewert für Stationierungsinkrement
        M 1 ;_ Vorgabewert für Textmaßstab
        TEXTHÖHE? 1.25
        TEXTPREFIX
        ""
        TEXTSUFFIX
        ""
  ) ;_ end of setq


;;; CAD.DE -Edit: Alte Settings, deaktiviert
;;;  (setvar "OSMODE" 0)
;;;  (setvar "cmdecho" 0)

  (MS:STAT-LAYER) ;_ Layer setzen

;;;  (if (/= (tblsearch "style" "SIMPLEX") NIL) ;_ Textstil setzen
;;;    (setvar "textstyle" "SIMPLEX")
;;;  ) ;_ end of if

  (if (not
        (setq
          L (getreal "\nWert für Anfangsstationierung eingeben <0>: ")
        ) ;_ end of setq
      ) ;_ end of not
    (setq L 0)
  ) ;_ end of if
  ;; Undo-Gruppe erstellen:
;;; CAD.DE -Edit: Altes Undo, altes WKS wird vom Standarderror übernommen
;;;  (command "_.UNDO" "_End" "_.UNDO" "_Group")
;;;  (command "_.ucs" "_w")

  (if (not (setq SELECT
                  (entsel
                    "\nZu Stationierendes Objekt (Linie, Polylinie oder Spline) wählen: "
                  ) ;_ end of entsel
          ) ;_ end of setq
      ) ;_ end of not
    (princ "\nKein Objekt gewählt! Funktionsende.")
    (if (not (member (cdr (assoc 0 (entget (car SELECT))))
                    '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE")
            ) ;_ end of member
        ) ;_ end of not
      (princ
        "\nObjekt war weder Linie, Polylinie noch Spline! Funktionsende."
      ) ;_ end of princ
      (MS:STATION
        (car SELECT) ;_ Objname
        (cadr SELECT) ;_ geklickter Punkt
        L ;_ Anfangs-Station
        STAT ;_ Stationierungsinkrement
        M ;_ Maßstab für Texteintragungen
        TEXTHÖHE? ;_ Texthöhe
        TEXTPREFIX ;_ Präfix für Text
        TEXTSUFFIX ;_ Suffix für Text
        2 ;_ Textausrichtungs-Modus (hier: Immer in Stationierungsrichtung)
        2
      ) ;_ end of MS:STATION
    ) ;_ end of if
  ) ;_ end of if
  ;; Undo-Gruppe beenden:
;;; CAD.DE -Edit: Altes Undo, wird vom Standarderror übernommen
;;;  (command "_.UNDO" "_End")
  ;; Systemvariablen zuruecksetzen:
;;; CAD.DE -Edit: Sysvars resetten, wird vom Standarderror übernommen
;;;  (setvar "OSMODE" OSM)
;;;  (setvar "cmdecho" OCE)
;;;  (setq *ERROR* OERR)

;;; CAD.DE -Edit: Reset der alten Werte mit Hilfe des Standarderrorhandlers
  (ENDERRORHANDLER)
  (princ)
) ;_ end of defun


;|
Basis-Errorhandling zum Kopieren in Funktionen
Für die ganz faulen...

Am Anfang:

(STARTERRORHANDLER
  "Funktion [N A M E]" ;_ Zusatz zur Fehermeldung > on error und wenn *verbose* = T
  't ;_ Undomode? T= Ja, nil = Nein
  '( ;_ Sysvars sichern und auf folgende Werte setzen....
    ("CMDECHO" . 0)
    ("CMDDIA" . 0)
    ("FILEDIA" . 0)
    ("OSMODE" . 0)
    ("BLIPMODE" . 0)
    ("HIGHLIGHT" . 0)
    ("ATTREQ" . 0)
    ("ATTDIA" . 0)
  )
  'SAVE-UCS                            ; on-start
  'RESTORE-UCS                          ; on-good
  NIL                                  ; Undo setzt auch das BKS zurück!
) ;_ end of STARTERRORHANDLER

Am Ende:

(ENDERRORHANDLER)

|;

;|
Globaler Errorhandler
Inklusive Undo-Funktion
Inklusive Huckepack-Funktions Unterstützung
- Beim Start
- Bei Durchlauf ohne Fehler
- Im Fehlerfall

Februar 2004
In Zusammenarbeit mit diversen CAD.DE Membern entstanden

Besonderer Dank an MAPCAR (http://www.autolisp.mapcar.net) für den Basis-Error-Handler
und all die netten Informationen über die netten Lisp-Interna :-).

StartErrorHandler : Stapelbare Fehlerbehandlungsroutine
Argumente:
NAME     = Frei wählbarer String.
Wenn eine (*error*)-Funktion etwas auf dem Bildschirm ausgibt,
setzt sie diesen Namen dazu, damit man erkennen kann, was von
welcher Instanz des Errhandlers kommt.

UNDOMODE    = kann T oder nil sein.
Gibt an, ob im Fehler- bzw. Abbruchsfall gleich der Befehl 'UNDO'
ausgeführt werden soll, um alle bis dahin
vorgenommen Aktionen sofort rückgängig zu machen.

VARS_TO_SAVE = Eine Liste der zu setzenden System- und globalen Variablen

ON-START    = Funktion die beim Start ausgeführt wird (nil für "nichts ausführen")

ON-GOOD     = Funktion die bei fehlerfreiem Durchlauf ausgeführt wird  (nil für "nichts ausführen")

ON-BAD      = Funktion die im Fehlerfall ausgeführt wird (nil für "nichts ausführen")

***********************************************************
* Debugging / Rückmeldungen des Errorhandlers aktivieren: *
* Setzen der GLOBALEN Variablen (setq *VERBOSE* T)        *
***********************************************************

Beispiel 1: Setzen / Rücksetzen von Sysvars
-------------------------------------------
(defun C:TEST (/)
  (STARTERRORHANDLER
    "Funktion TEST"
    't
    '(("cmdecho" . 0) ("filedia" . 0))
    nil
    nil
    nil
  ) ;_ end of startErrorHandler
 
  (machwas)
 
  (ENDERRORHANDLER) ;_ setzt die Variablen aus dem Argument NAME wieder zurück
) ;_ end of defun

Beispiel 2: Verwendung von User-definierten Variablen
-----------------------------------------------------
(defun C:LV-TEST (/)
  (STARTERRORHANDLER
    "LV-Test"
    't
    NIL
    '(lambda (/)
      (if (= INSTANCE 1)
        (SAVE-VARS '(MYVAR1 MYVAR2 MYVAR3) '*MYVARSTACK*)
      ) ;_ end of if
    ) ;_ end of lambda
    NIL
    '(lambda (/)
      (if (= INSTANCE 1)
        (RESTORE-VARS '*MYVARSTACK*)
      ) ;_ end of if
    ) ;_ end of lambda
  ) ;_ end of startErrorHandler
  (setq MYVAR1 4
        MYVAR2 5
        MYVAR3 6
  ) ;_ end of setq
  (getint "\nIrgendeine Zahl eingeben oder ESC für Abbruch: ")
  (ENDERRORHANDLER)
) ;_ end of defun

Beispiel 3: Setzen des WKS / Rücksetzen des BKS
-----------------------------------------------------
(defun C:WKSTEST (/)
  (STARTERRORHANDLER
    "WKSTest"
    't
    '(
      ("CMDECHO" . 0)
      ("CMDDIA" . 0)
      ("FILEDIA" . 0)
    )
    'SAVE-UCS                          ; on-start
    'RESTORE-UCS                        ; on-good
    NIL                                ; Undo setzt auch das BKS zurück!
  ) ;_ end of startErrorHandler
  (getint "\nIrgendeine Zahl eingeben oder ESC für Abbruch: ")
  (ENDERRORHANDLER)
) ;_ end of defun

|;
(defun STARTERRORHANDLER (NAME        UNDOMODE    VARSTOSAVE
                          ON-START    ON-GOOD      ON-BAD
                          /            ERRORTEMPLATE
                          SAVELIST    INSTANCE    O_CMDECHO
                        )
  (setq ERRORTEMPLATE
        '((MSG        /          NAME        UNDO        SAVEDVARS
            PREVIOUSHANDLER        INSTANCE    ON-START    ON-GOOD
            ON-BAD
          )
          ;;... Zeile wird noch eingesetzt  ;(setq instance <> )
          ;;... Zeile wird noch eingesetzt  ;(setq undo [T|nil])
          ;;... Zeile wird noch eingesetzt  ;(setq previoushandler <> )
          ;;... Zeile wird noch eingesetzt  ;(setq name <> )
          ;;... Zeile wird noch eingesetzt  ;(setq savedvars (quote ...
          ;;... Zeile wird noch eingesetzt  ;(setq on-start...
          ;;... Zeile wird noch eingesetzt  ;(setq on-good...
          ;;... Zeile wird noch eingesetzt  ;(setq on-bad...
          (while (> (getvar "cmdactive") 0) (command))
          (if
            (= INSTANCE 1)
            (progn
            (command "_undo" "_end")
            (if
              (and UNDO MSG)
              (command "_u")
            )
            )
          )
          (foreach
            PAIR
            SAVEDVARS
            (setvar (car PAIR) (cdr PAIR))
            (if
            (and MSG *VERBOSE*)
            (progn
              (princ
              (strcat
                "\n"
                NAME
                "("
                (itoa INSTANCE)
                "): Setze \""
                (car PAIR)
                "\" zurück auf "
              )
              )
              (princ (cdr PAIR))
            )
            )
          )
          (if
            MSG
            (progn
            (if
              (and (= INSTANCE 1) *VERBOSE*)
              (princ
              (strcat "\nError:" NAME "(" (itoa INSTANCE) "): \"" MSG "\"")
              )
            )
            (if
              ON-BAD
              ((eval ON-BAD))
            )
            )
            (if
            ON-GOOD
            ((eval ON-GOOD))
            )
          )
          (setq *ERROR* PREVIOUSHANDLER)
          (if
            (= INSTANCE 1)
            (princ)
            (*ERROR* MSG)
          )
          )
  ) ;_ end of setq

  ;;*****************************************************

  (setq INSTANCE
        (if (or (= (type *ERROR*) 'SUBR) (null *ERROR*))
          1
          (1+ (caddr (cadr *ERROR*)))
        ) ;_ end of if
  ) ;_ end of setq
  (if (= INSTANCE 1)
    (progn
      (setq O_CMDECHO (getvar "cmdecho"))
      (setvar "cmdecho" 0)
      (command "_undo" "_begin")
      (setvar "cmdecho" O_CMDECHO)
    ) ;_ end of progn
  ) ;_ end of if
  (foreach PAIR VARSTOSAVE
    (setq SAVELIST
          (cons
            (cons (car PAIR) (getvar (car PAIR)))
            SAVELIST
          ) ;_ end of cons
    ) ;_ end of setq
    (setvar (car PAIR) (cdr PAIR))
  ) ;_ end of foreach
  (if ON-START
    ((eval ON-START))
  ) ;_ end of if
  (setq *ERROR*
        (append
          (list (car ERRORTEMPLATE))
          (list (list 'setq 'INSTANCE INSTANCE))
          (if UNDOMODE
            '((setq UNDO 't))
            '((setq UNDO NIL))
          ) ;_ end of if
          (list
            (list 'setq
                  'PREVIOUSHANDLER
                  (cons 'quote (list *ERROR*))
            ) ;_ end of list
          ) ;_ end of list
          (list (list 'setq 'NAME NAME))
          (list
            (cons 'setq
                  (cons 'SAVEDVARS
                        (list (cons 'quote (list SAVELIST)))
                  ) ;_ end of cons
            ) ;_ end of cons
          ) ;_ end of list
          (list (list 'setq 'ON-START ON-START))
          (list (list 'setq 'ON-GOOD ON-GOOD))
          (list (list 'setq 'ON-BAD ON-BAD))
          (cdr ERRORTEMPLATE)
        ) ;_ end of append
  ) ;_ end of setq
  (princ)
) ;_ end of defun

;|
Globalen Errorhandler zurücksetzen und Sysvars wiederherstellen.

Besonderer Dank an MAPCAR (http://www.autolisp.mapcar.net) für seinen Error-Handler

endErrorHandler : Errorhandler zurücksetzen und Sysvars wiederherstellen
Argumente:
Keine

Beispiel:
Einfach am Ende der Routine

(ENDERRORHANDLER)

aufrufen.

|;
(defun ENDERRORHANDLER (/)
  (*ERROR* NIL)
) ;_ end of defun

;;; Sub-Functions für eventuelle Huckepack-Funktionen des Errorhandler.

;;; Funktion ermittelt, ob das Welt-Koordinatensystem
;;; zur Zeit des Aufrufs aktuell ist.
;;; Wenn nicht, wird es gesetzt und T zurückgegeben
;;; Wenn ja gibt die Funktion nil zurück
(defun WORLD-UCS (/)
  (if (= (getvar "worlducs") 0)
    (progn (command "_.ucs" "_w") 't)
  ) ;_ end of if
) ;_ end of defun

;;; Funktion stellt vorheriges BKS wieder her, wenn UCSFLAG T ist
(defun PREVIOUS-UCS (/)
  (if UCSFLAG
    (command "_.ucs" "_p")
  ) ;_ end of if
) ;_ end of defun

;;; Greift auf die Variable instance des
;;; Errorhandlers zu - nur in diesem
;;; Environment aufrufen!
(defun SAVE-UCS (/ UCSFLAG)
  (if (= INSTANCE 1)
    (progn
      (setq UCSFLAG (WORLD-UCS))
      (SAVE-VARS '(UCSFLAG) '*UCSDATA*)
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun


;;; Greift auf die Variable instance des
;;; Errorhandlers zu - nur in diesem
;;; Environment aufrufen!
(defun RESTORE-UCS (/ UCSFLAG)
  (if (= INSTANCE 1)
    (progn
      (RESTORE-VARS '*UCSDATA*)
      (PREVIOUS-UCS)
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun

(defun MS:CLEARSTACK (STACKSYM /)
  (while (eval STACKSYM)
    (POP! STACKSYM) ;_ end of pop!
  ) ;_ end of while
) ;_ end of defun

(defun RESTORE-UCS+UNSTACK ()
  (MS:CLEARSTACK '$OSM$)
  (RESTORE-UCS)
) ;_ end of defun

;;; Legt ein Element auf einem Stapel ab und gibt es zurück
;;; Notwendig z.B. für das Wiederherstellen von Uservariablen u.ä.
;;; Argumente:
;;; ELM = Name der Variablen
;;; STACKSYM = Name des Stacks
(defun PUSH! (ELM STACKSYM /)
  (set STACKSYM (cons ELM (eval STACKSYM)))
  ELM
) ;_ end of defun


;;; Nimmt ein Element von einem Stapel herunter und gibt es zurück
;;; Notwendig z.B. für das Wiederherstellen von Uservariablen u.ä.
;;; Argumente:
;;; STACKSYM = Name des Stacks
(defun POP! (STACKSYM / ELM)
  (setq ELM (car (eval STACKSYM)))
  (set STACKSYM (cdr (eval STACKSYM)))
  ELM
) ;_ end of defun

;;; Sub-Function für das Sichern von Uservariablen auf einem Stack
;;; Argumente:
;;; VARS = Liste von Variablennamen
;;; STACK = Name des Stacks
(defun SAVE-VARS (VARS STACK /)
  (foreach VAR VARS
    (PUSH! (cons VAR (eval VAR)) STACK)
  ) ;_ end of foreach
) ;_ end of defun

;;; Sub-Function für das Wiederherstellen von Uservariablen aus einem Stack
;;; Argumente:
;;; STACK = Name des Stacks
(defun RESTORE-VARS (STACK / VAR)
  (repeat (length (eval STACK))
    (setq VAR (POP! STACK))
    (set (car VAR) (cdr VAR))
  ) ;_ end of repeat
) ;_ end of defun


(defun MS:SAVEVARS (LISTOFPAIRS SYMBOLNAME / VARLIST)
  (foreach PAIR LISTOFPAIRS
    (setq varlist
        (cons
          (cons (car PAIR) (getvar (car PAIR)))
          varlist
        ) ;_ end of cons
    ) ;_ end of setq
    (setvar (car PAIR) (cdr PAIR))
  ) ;_ end of foreach
  (PUSH! varlist SYMBOLNAME)
) ;_ end of defun


(defun MS:RESTOREVARS (SYMBOLNAME)
  (if (setq VARLIST (POP! SYMBOLNAME))
    (foreach PAIR VARLIST
      (setvar (car PAIR) (cdr PAIR))
    ) ;_ end of foreach
  ) ;_ end of if
  VARLIST
) ;_ end of defun

(princ)



Schön, dass Du jetzt 'nen Ansatz für Deine weiteres Vorgehen gefunden hast. Wäre klasse, wenn Du das Endergebniss dann wieder der Gemeinschaft hier zur Verfügungs stellst.

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Helmut Wieser
Mitglied
Mitarbeiter in Architekturbüro


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

Beiträge: 134
Registriert: 08.03.2004

AutoCAD 2002

erstellt am: 01. Jun. 2004 14:16    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 Marc!

Meine "Lösung" werde ich sicher hier posten.

Muß hier nochmals was zum allgem. Verständnis sagen:

Ich bin ein absoluter Lisp- Laie, arbeite also nach dem Versuch & Irrtum- Prinzip, fürchte also nicht viel "Allgemeingültiges" produzieren zu können, mal sehen... 

Etwas habe ich herausgefunden:

Bei der frei einstellbaren Funktion TEST gibts das Problem, dass auch der Anfangswert mit dem Skalierungsfaktor multipliziert wird.
Die sonstigen Einstellungen hab ich soweit im Griff.
Ich brauch aber eine Zahlenreihe, die bei einem exakten Wert anfängt und dann steigt - z.b.: 325,54 (über Wr. Null)- 325,56 - 325,58 - ...

Hab nach intensiven Studium Deiner Lisp- Datei zwar das eine oder andere AHA- Erlebnis gehabt, wo Du dem Programm aber sagst: Multipliziere den Startwert mit dem Skalierungsfaktor und zähle ihn zum Inkrement dazu hab ich nicht rausgefunden.

Vielleicht kannst Du da nochmal helfen ....


Grüße aus Wien

Helmut

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
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: 01. Jun. 2004 14:39    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi,
zwei Tips:
1. Benutze den in Acad eingebauten VLisp-Editor zum Bearbeiten/Anschauen der Lisp (falls Du das noch nicht tust)

2. Suche einfach im Code nach dem Argument "Scaling" dann siehst Du, wo da was multipliziert wird.

------------------
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

m-troeger
Mitglied
gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS


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

Beiträge: 295
Registriert: ..

ACAD14 und 2005;
MAP4; GeoCAD; PARIS;
( Vermessung )

erstellt am: 01. Jun. 2004 17:44    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 Helmut Wieser 10 Unities + Antwort hilfreich

Hi Marc,
schönes Teil!

hier noch 2 kleine Helferlein

1. Tool zoomt auf die Station (Stationswert eingeben) einer PL, Bogen, Linie und markiert sie mit einem Pfeil

Code:

(prompt "Start mit LS_STAT")
(defun
   C:LS_STAT
    (/ ACHSE_PL STRECKE_PL STAT_PKT TEMP_PKT0 TEMP_PKT1 TEMP_PKT2 TEMP_PKT3
     TEMP_INFO TEMP_INFO1)
  (vl-load-com)
  (setq ACHSE_PL (car (entsel "\nProfillinie wählen: ")))
  (setq STRECKE_PL (getreal "\rStation eingeben : "))
  (setq
    STAT_PKT
     (VLAX-CURVE-GETPOINTATDIST
       (VLAX-ENAME->VLA-OBJECT ACHSE_PL)
       STRECKE_PL
       ) ;_ Ende von vlax-curve-getPointAtDist

    ) ;_ Ende von setq
  (setq TEMP_PKT1 (polar STAT_PKT 5.6 10))
  (setq TEMP_PKT2 (polar STAT_PKT 5.8 5))
  (setq TEMP_PKT3 (polar STAT_PKT 5.4 5))
  (setq TEMP_PKT0 (list (car STAT_PKT) (cadr STAT_PKT)))
  (setq TEMP_PKT1 (list (car TEMP_PKT1) (cadr TEMP_PKT1)))
  (setq TEMP_PKT2 (list (car TEMP_PKT2) (cadr TEMP_PKT2)))
  (setq TEMP_PKT3 (list (car TEMP_PKT3) (cadr TEMP_PKT3)))
  (command "_ZOOM" "M" STAT_PKT (/ 20 (getvar "LTSCALE")))
  (grvecs
    (list
      1 TEMP_PKT1 TEMP_PKT0 1 TEMP_PKT0 TEMP_PKT2 1 TEMP_PKT2 TEMP_PKT3 1 TEMP_PKT3
      TEMP_PKT0) ;_ Ende von list
    ) ;_ Ende von grvecs
  (princ "\nEnde !")
  (princ)
  ) ;_ Ende von defun


2. Picken sie neben der zu stationierenden PL, Bogen, Linie so wird die Station und der Abstand vom gepickten Punkt zum station. Objekt in der Befehlszeile ausgegeben.

Code:

(prompt "Start mit LS_STAT1")
(defun
   C:LS_STAT1
     (/ ACHSE_PL PICK_PUNKT LOT_PL STATION DIST)
  (vl-load-com)
  (setq ACHSE_PL (car (entsel "\nProfillinie wählen: ")))
  (setq PICK_PUNKT (getpoint "\rPunkt der gesuchten Station picken: "))
  (while (/= PICK_PUNKT NIL)
    (setq PICK_PUNKT (list (car PICK_PUNKT) (cadr PICK_PUNKT)))
    (setq
      LOT_PL
       (vlax-curve-getclosestpointto
(vlax-ename->vla-object ACHSE_PL)
PICK_PUNKT
) ;_ Ende von vlax-curve-getClosestPointTo
      ) ;_ Ende von setq
    (setq
      STATION
       (vlax-curve-getdistatpoint
(vlax-ename->vla-object ACHSE_PL)
LOT_PL
) ;_ Ende von vlax-curve-getDistAtPoint
      ) ;_ Ende von setq
    (setq DIST (distance LOT_PL PICK_PUNKT))
    (grdraw LOT_PL PICK_PUNKT 1 1)
    (princ
      (strcat
"\rStation : "
(rtos STATION 2 3)
" Abstand zur Profillinie : "
(rtos DIST 2 3)
) ;_ Ende von strcat
      ) ;_ Ende von princ
    (setq PICK_PUNKT NIL)
    (setq
      PICK_PUNKT
       (getpoint
(strcat
   "\rStation : "
   (rtos STATION 2 3)
   " Abstand zur Profillinie : "
   (rtos DIST 2 3)
   "  nächsten Punkt der gesuchten Station picken: "
   ) ;_ Ende von strcat
) ;_ Ende von getpoint
      ) ;_ Ende von setq
    ) ;_ Ende von while
  (princ "\nEnde !")
  (princ)
  ) ;_ Ende von defun

Servus, Mario
www.the-skier.de

[Diese Nachricht wurde von m-troeger am 01. Jun. 2004 editiert.]

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