Programme

Hier stelle ich das Programm at (Aufteilen) vor.

Dieses Programm teilt mehrere Objekte auf einer bestimmten Länge gleichmäßig auf.

Der Code:

 

;;        AT
(defun C:AT ( / ss punkt1 punkt2 abstand winkel x y z osmode objekt basispunkt neuerpunkt)
  ;; Eingabe
  (setq ss (ssget))
  (if ss
    (progn
      (setq  objekt (ssname ss 0)
                  basispunkt (trans (cdr (assoc 10 (entget objekt ))) 0 1)
      ) ;_ Ende von setq
      (command-s "schieben" objekt "" basispunkt pause)
      (setq punkt1 (trans (cdr (assoc 10 (entget objekt ))) 0 1))
      (setq punkt2 (trans (getpoint punkt1 ) 0 1))
      ;; Berechnung
      (setq abstand (/ (distance punkt1 punkt2 ) (1- (sslength ss)))
                winkel (angle punkt1 punkt2 )
                x     (* abstand (cos winkel ))
                y     (* abstand (sin winkel ))
                z     0
      ) ;_ Ende von setq
      ;; Ausführung
      (setvar "osmode" 0)
      (repeat (1- (sslength ss))
    (setq objekt (ssname ss (setq z (1+ z)))
          basispunkt (trans (cdr (assoc 10 (entget objekt ))) 0 1)
          neuerpunkt      (list    (+ (car punkt1 ) (* z x))
            (+ (cadr p1) (* z y))
            0
          ) ;_ Ende von list
    ) ;_ Ende von setq
    (command-s "schieben" objekt "" basispunkt neuerpunkt)
      ) ;_ Ende von repeat
    ) ;_ Ende von progn
  ) ;_ Ende von if
) ;_ Ende von defun

 

Funktionsweise:

Bevor wir mit der Eingabe beginnen speichern wir den Objektfang "osmode" [os].

Eingabe:

Als Ersters wird ein Auswahlsatz mittels (ssget) erstellt [ss]

Danach das erste Objekt ausgelesen [obj] und der Basispunkt [bp] ausgelesen.

Er wird beim Befehl "schieben" als Basispunkt verwendet

Dann wird das erste Objekt verschoben mit dem Befehl "schieben".

Danach wird der neue Basispunkt ausgelesen und als Anfangspunkt  [p1] gespeichert.

Als nächsters wir eine Hilfslinie von p1 angefangen gezeichnet.

Aus der Hilfslinie wird der zweie Punkt ausgelesen [p2].

Wichtig ist beim auslesen von Punkten das diese Punkte immer in Weltkoordinatensystem gespeichert sind und

deswegen mit der Funktion (trans) ins Benutzerkoordinatensystem transferierte werden müssen.

Danach kann die Hilflinie wieder gelöscht werden: (entdel (entlast)) Löscht das zuletzt erstellte Objekt

Berechnung:

Zuerst wird der Abstand [ab] und der Winkel [wink] der beiden Punkte [p1] [p2] mit (distance) ermittelt.

Danach wird noch der Zähler auf 0 gestellt.

Ausführung:

Als nächsters wir der Objektfang "osmode", mit (setvar), auf 0 gestellt.

Danach benötigen wir eine Schleife. Die Funktion (repeat) wiederholt so oft wie es das erste Argument angibt: in unseren Fall um eins weniger als was Objekte im Auswahlsatz [ss] sind.

In der Schleife wird zuerst das jeweilige Objekt [obj] aus dem Auswahlsatz [ss] gelesen und der dazugehöreige Basispunkt [bp] ermittelt.

Dann wir der neue Punkt [p] errechnet und das Objekt [obj] verschoben. Von Basispunkt [bp] zum neuen Punkt [p].

Zum schluss von der Schleife wird der neue Punkt zum neuen Anfangspunkt [p1].

Danach wir der Objektfang "osmode" noch zurückgesetzt und das wars.