26.07.2014 13:21    

brolin59
Halen lisp öğrencisiyim :) .dcl ile ilgili birkaç şey sormak istiyorum. Yardımcı olursanız sevinirim.

Kod:

deneme : dialog {
: edit_box {label="Pencere Eni:";key="penen";edit_width=10;}
: edit_box {label="Pencere Boyu:";key="penboy";edit_width=10;}
ok_cancel;}


Bu şekilde bir dcl hazırladım ve autocad/support içine "deneme.dcl" olarak kaydetim.

Kod:

(defun c:deneme ()
  (setq dnm (load_dialog "deneme.dcl"))
  (new_dialog "deneme" dnm)
  (start_dialog)
.................................???????
  (unload_dialog dnm)
)


Anlayabildiğim kadarı ile diyoloğu bu şekilde çağırabiliyoruz. unload dediğimizde de bellekten siliniyor. Benim çözemediğim kısım ise şu. bu diyolog içinde girilen veriyi bir değişkene nasıl aktarırız. Ben amatörce (setq degisken penen) gibi bişey denedim de tabiki olmadı. :) Yani diyalog içerisindeki bilgileri lisp içerisinde değişkenlere nasıl aktarırız? Bunun bir rutini varmıdır?

26.07.2014 17:31    

yazgunesi
Daha önce sitemizde paylaşım yaptığım '' Yol En Kesit Lispi '' programından bir alıntı yapayım..

enkesit.lsp dosyası içeriği :

Kod:

;  DTR programı

(defun dtr (x)
(* pi (/ x 180.0 )) )
(princ)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                  ;;
;;            A Tipi Üçgen Çizim Lispi              ;;
;;                                                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:ucg_a_tipi ( / old_snap dcl_id max_x max_y enkx11 enky11 yr1 ucgyatay ucgdikey)

;; osmode yi özel bir değişkene kaydedelim
(setq old_snap (getvar "osmode"))
(setvar "osmode"0)  ;; osmode sıfırlayalım
 
(setq dcl_id (load_dialog "enkesit.dcl"))   ;; dialog dosyasını tanımlayalım
(if (not (new_dialog "enkesit_a_dg" dcl_id) ) (exit))

(start_image "img1")             ;; dcl dilagta     
(setq max_x (dimx_tile "img1"))   ;; imaje / resim   
(setq max_y (dimy_tile "img1"))    ;; (slide imaje) 
(slide_image 0 0 max_x max_y "ucg_a")  ;; ile ilgili
(end_image)                               ;; kodlama
 
(action_tile "enkstciz" "(done_dialog) (setq userclick T)")  ;; çizdir butonu
(action_tile "iptal_et" "(exit)")               ;; iptal butonu..
(action_tile "enksx" "(setq en_ksx $value)")  ;; diloagtaki enksx key'i ile ilgili..
(action_tile "enksy" "(setq en_ksy $value)")  ;; diloagtaki enksy key'i ile ilgili..
(start_dialog) ;; diloag başlatılsın dedik


(setq enkx11 (atof en_ksx)) ;; atof ile değerlşeri rakam
(setq enky11 (atof en_ksy)) ;; rakam olarak tanımlayalım

(setq yr1 (getpoint "\n Üçgenin merkezi için tıkla :")) ;; başlangıç noktası için ekrana tıklayalım
(setq ucgyatay (polar yr1 (dtr 180) (- enkx11) ))  ;;; kordinat hesabı
(setq ucgdikey (polar yr1 (dtr 90)  enky11 )) ;;  kordinat hesabı

;;;;   şimdi çizime başlayalım    ;;;;;;

;  üçgenin hipotenüs çizgisi çizimi
(command "line" ucgyatay ucgdikey ""
         "change" "l" "" "p" "lt" "" "c" "1" "" )
 
; üçgenin yatay kenarı çizimi 
(command "line" ucgyatay yr1 "" )

; üçgenin dikey kenarı çizimi 
(command "line" ucgdikey yr1 "" ) 
 
(unload_dialog dcl_id)
(setvar "osmode" old_snap)  ; osmode yi eski haline çevirelim..
(princ)
) ;; program son satır

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ilk yüklenildiğinde ekranda komut ismini görelim
(princ "Program ismi ->> ucg_a_tipi  <<- ")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



enkesit.dcl dosyası içeriği :

Kod:

//////////////////////////////////////////////////////////
//                                                      //
//                 Yol En Kesit Lispi                   //
//                                                      //
//                    DCL Kodları                       //
//                                                      //
//////////////////////////////////////////////////////////


enkesit_a_dg: dialog {
  label = " En / Kesit Çizim Dialogu  (A Tipi)";

    : row {
  fixed_height=true;
  fixed_width=true;

: column {

     :boxed_column{
           label=" - A - Tipi Üçgen Formu";
           
        : image_button {
            color = black ;
            fixed_height = true ;
            fixed_width = true ;
            height = 12 ;
            key = "img1" ;
            width = 36 ;
            alignment  = centered ;
        }

        : boxed_column {
label = "Ölçüleri giriniz...";
       
      : edit_box {
label = "En kesit  > X < değeri :"; //// çizim için bilgi girişi
        key = "enksx";   //// x ölçüsünün key'i
      }
      : edit_box {
label = "En kesit  > Y < değeri :";  ////  çizim için bilgi girişi
        key = "enksy";  //// y ölçüsünün key'i
      }
    }
   }
}

        }
:button {
key = "enkstciz";
label = "Şimdi Çizdir !";
is_default = true;
height = 2 ;
}
       
:button {
key = "iptal_et";
label = "İptal et  ..";
   }

} //  dialog end


Yukarıdaki örnek programın olduğu konu başlığı :



Linkleri görebilmek için ÜYE olmalısınız.



En kesit lispi downlaod : 3562-en-kesit.rar

DCL dialog örnek dosyalar ve eğitim dökümanı :
3562-dcl-evraklar.rar

yazgunesi (26.07.2014 17:41 GMT)

> 1 <
Copyright © 2004-2022 SQL: 0.919 saniye - Sorgu: 44 - Ortalama: 0.02088 saniye