;********************************************************************************************* ; Dateiname : SD_StretchOnEdge.lsp ; Autor : SSM ; Erstellt : ; geändert : ;********************************************************************************************* ; Beschreibung: - bewegen von Flächen in abhängigkeit einer Kantenlänge ; - ;********************************************************************************************* ; Änderungen ; ;********************************************************************************************* (in-package :Teo) (use-package :OLI) (sd-defdialog 'SD_StretchOnEdge :dialog-title "Stretch on Edge" :toolbox-button t ; :toolbox-button t :variables '((Flaeche :title "Flaeche" :prompt-text "Bitte Flaeche anwaehlen" :value-type :face :after-input (sd-set-variable-status 'Kante :enable t ) );end Flaeche ("-") ;Separationslinie ("Feldunterteilung") ("-") (Kante :title "Kante" :prompt-text "Bitte Kante anwaehlen" :value-type :edge :initial-enable nil ; :start-input-feedback :check-function chkKante_getRtg :after-input (progn (setq istLaenge (messeKantenlaenge Kante) ) (setq Laenge istLaenge) (sd-set-variable-status 'Laenge :enable t ) );progn );end Flaeche (Laenge :title "Soll-Laenge" :prompt-text "Bitte Sollkantenlaenge angeben" :initial-enable nil :value-type :positive-length );end Flaeche (istLaenge :initial-visible t :value-type :display-only ) ; end istLaenge (Richtung :initial-visible nil :value-type :display-only ) ; end istLaenge ("-") (autoRnd :titel "Verrnd neu" :value-type :boolean :initial-value t ) ; end autoRnd (TangBehalt :titel "Tang beh" :value-type :boolean :initial-value nil ) ;end TangBehalt ); end variables :ok-action '(stretch-face Flaeche Richtung (- Laenge istLaenge ) :p_autoBlend (if autoRnd :yes :no) :p_autoTan (if TangBehalt :yes :no) ); end stretch :help-action ' (progn (sd-display-url ( Format NIL "~A/SD_StretchOnEdge.htm" (oli::sd-convert-filename-from-platform (oli::sd-sys-getenv "SCHILLERHELPDIR")))) ); end progn :local-functions '( (messeKantenlaenge ( p_Edge ) (sd-call-cmds (measure_dist :edge_length p_Edge ) ) ) ;end messeKantenlaenge ;; ------------------------ (chkKante_getRtg ( p_Edge ) (let (edge_Struct SPkt EPkt SAbst EAbst ) (setf edge_Struct (sd-inq-edge-geo p_Edge :dest-space :global )) (setf SPkt (sd-edge-start-pnt edge_Struct)) (setf EPkt (sd-edge-end-pnt edge_Struct)) (setq SAbst (sd-call-cmds (measure_dist :point_surface SPkt Flaeche ) )) (setq EAbst (sd-call-cmds (measure_dist :point_surface EPkt Flaeche ) )) (if (= SAbst EAbst) ;; Kante liegt parallel zur Flaeche (values :error "Die gewaehlte Kante liegt parallel zur Flaeche") (if (not (or (< 0 SAbst) (< 0 EAbst) )) ;; Kante beruehrt die Flaeche nicht (values :error "Die Kante beruehrt die Flaeche nicht") (progn (if(> SAbst EAbst) (setf Richtung (sd-vec-subtract EPkt SPkt ) ) (setf Richtung (sd-vec-subtract SPkt EPkt ) ) ); end if :ok ) ;end progn ) ;emd if {or ... ) ;end if {= )) ;end let chkKante_getRtg ;; ------------------------ (stretch-face ( p_face p_rtg p_dist &key (p_autoBlend :yes) (p_autoTan :yes) ) (sd-call-cmds (move :faces p_face :check :blend_auto p_autoBlend :keep_tangent p_autoTan :transformation :translate :two_ptv (make-gpnt3d) (sd-vec-scale (sd-vec-normalize p_rtg) p_dist) )); end move / sd-call-cmds ) ;end stretch-face ) ;end local-functions ) ;end sd-def-dialog ;; ------------------------------------------------------------------------------------------ ; (sd-call-dialog 'StretchOnEdge )