Code:
(in-package :greskamp)
(use-package :OLI)
(export 'Kreis_auf_geteilte_Linie)
(sd-defdialog 'Kreis_auf_geteilte_Linie
:dialog-title "nach Materialstärke suchen"
:toolbox-button nil
:variables
'(
(ca_Abstand :value-type :positive-number
:multiple-items nil
:title "ca. Abstand"
:prompt-text "Geben Sie das ca. Maß für die Lochabstände ein"
:initial-value nil
)
(Anzahl_Loecher :value-type :positive-number
:multiple-items nil
:title "Anzahl der Löcher "
:prompt-text "Geben Sie die gewünschte Anzahl an Löchern ein"
:initial-value nil
)
("-")
(Loch_Bohrung :value-type :positive-number
:title "Durchmesser"
:multiple-items nil
:prompt-text "Geben Sie Bohrungsdurchmesser an"
; :after-input
; (progn
; (WHEN (> ca_Abstand 0)
; (IF (<= ca_Abstand Loch_Bohrung)
; (progn
; (display "Der Lochdurchmesser ist größer oder gleich zum Lochabstand, bitte Durchmesser neu eingeben")
; (setf Loch_Bohrung nil)
; )
; )
; )
; )
)
);ende variables
:mutual-exclusion '(ca_Abstand Anzahl_Loecher)
:cancel-action '()
:ok-action '(Kreis_auf_geteilte_Linie_X Loch_Bohrung ca_Abstand Anzahl_Loecher)
)
(defun Kreis_auf_geteilte_Linie_X (Kreis_Durchmesser Abstand_geteilt Anzahl_Loecher)
(setq Kreis_Punkte1 ())
(setq weiße_Linien
(frame2::getres (GET_SELECTION :FOCUS_TYPE *sd-edge-2d-seltype*
:no_highlight
:curr_wp_only
:select
:all_2d )))
(display Kreis_Durchmesser)
(display Abstand_geteilt)
(display Anzahl_Loecher)
(display "")
(IF Abstand_geteilt
(dolist (EDGE weiße_Linien)
(setq Laenge_weisse_Linie (frame2::getres(MEASURE_DIST :edge_length EDGE)))
(setq Teilung (/ Laenge_weisse_Linie Abstand_geteilt))
(setq Teilung (round Teilung))
(split EDGE :segments Teilung complete)
)
)
(setq Loch_pro_Linie (* (/ (- Anzahl_Loecher (length weiße_Linien)) (length weiße_Linien)) 1.0))
(IF Anzahl_Loecher
(dolist (EDGE weiße_Linien)
(setq Laenge_weisse_Linie (frame2::getres(MEASURE_DIST :edge_length EDGE)))
(setq Teilung1 (/ Laenge_weisse_Linie Loch_pro_Linie))
(setq Teilung1 (/ Laenge_weisse_Linie Teilung1))
(setq Teilung1 (+ (round Teilung1) 1))
(split EDGE :segments Teilung1 complete)
)
)
(setq weiße_Linien_geteilt
(frame2::getres (GET_SELECTION :FOCUS_TYPE *sd-edge-2d-seltype*
:no_highlight
:curr_wp_only
:select
:all_2d )))
(toggle_type weiße_Linien_geteilt)
(dolist (EDGE weiße_Linien_geteilt)
(setq Anfangs_Punkt (sd-gpnt3d-to-2d (sd-edge-start-pnt (sd-inq-edge-geo EDGE :dest-space :local))))
(setq Ends_Punkt (sd-gpnt3d-to-2d (sd-edge-end-pnt (sd-inq-edge-geo EDGE :dest-space :local))))
(setq Kreis_Punkte1 (adjoin Anfangs_Punkt Kreis_Punkte1 :test 'equal ))
(setq Kreis_Punkte1 (adjoin Ends_Punkt Kreis_Punkte1 :test 'equal ))
)
(dolist (ITEM Kreis_Punkte1)
(frame2::getres (circle :cen_rad ITEM (/ Kreis_Durchmesser 2))); complete ))
)
(display (format nil "Es wurden ~a Lochkreise erzeugt!" (length Kreis_Punkte1)))
(setq Abstand_geteilt ())
(setq Kreis_Durchmesser ())
(setq Anzahl_Loecher ())
)