02.01.2015 14:03    

ismailasi
Arkadaşlar merhaba, image_button'a tıkladığımda başka bir menünün açılmasını istiyorum. Yapamadım, acaba lisp kodlarının nasıl olacağını bilen biri yardımcı olabilir mi?
Teşekkürler.

04.01.2015 21:01    

ehya
Başka bir menü derken???
yeni bir dcl mi açılacak?
biraz daha detay lütfen???

05.01.2015 00:12    

yazgunesi
DCL dosyası ile Autolisp dosyası arasındaki veri iletişimi , dcl dosyasinda kullanılan elemanlarda "key" denilen bir degisken tanımlama ve Autolisp programı içindeki kullandığımız "action_tile" sayesinde gerceklesir. Isin özü her key'e karşılık bir tanimlama fonksiyonu kullanmamizdir.. Böylece dcl dosyasinda kullanılan buton, text, slide image gibi elemanlar bir ise yarar.

Şu anda cep telefonu uzerinden yazdığım icin ornek bir program paylasamiyorum fakat eve varınca dcl dilog örnekleri paylasabilirim sizin için..

Yapmaya çalıştığınız programi paylasirsaniz yardimci olmaya calisiriz..

Yararlı konu linkleri :

autocadbeyni.com/autocad-dcl-dosyalari-ogreticisi/



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





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



3562-dcl-evraklar.rar Dcl ve autolisp ile ilgili egitici evraklar..

3562-enkesit.rar Dcl image kullandığım bir programa örnek, sitemizden istek gelmişti bir ara yapmistim bir arkadasimiz icin.. Bu dosya şifrelidir, şifresi : www.autocadokulu.com dur.

admin (17.12.2017 11:49 GMT)

05.01.2015 13:51    

ismailasi
Sevgili ehya aynen dediğiniz gibi başka bir DCL menünün açılmasını istiyorum. Programın ilk olarak açtığı ana menüde, tıkladığım bir image butonunun başka bir DCL menüsünü açmasını istiyorum. Sevgili yazgüneşi paylaşımların için teşekkürler. Elimde bir Autolisp kitabım var ancak bazı yerlerde yetersiz kalıyor. Ehya kardeşim, senin bu konuda uzman olduğunu biliyorum. Yardımcı olacağını ümit ediyorum. :)
Teşekkürler.

05.01.2015 14:33    

ismailasi
Yazgüneşi, 3562-enkesit.rar dosyası hatalı mı acaba? şifre istiyor, nedir? www.cizimokulu.com ise denedim indirdi ama dosyaların içleri boş.

06.01.2015 16:29    

ehya
Bilgiayar başına gectigimde yazar gönderirim.

06.01.2015 23:03    

yazgunesi
3562-enkesit.rar Dcl image kullandığım bir programa örnek, sitemizden istek gelmişti bir ara yapmistim bir arkadasimiz icin.. Bu dosya şifrelidir, şifresi : www.autocadokulu.com dur.

Not : Yıkarıdaki programda dcl image buton örneği yok , dcl dialogta kullanılan slide imaje var..

07.01.2015 18:18    

ehya
DCL Bölümü

Kod:

tablo_01:dialog
{label="Tablo-1 Deneme01 ";
:image_button {key = "tbl-01" ; height = 5 ; width = 20 ;}
ok_cancel;}

tablo_02:dialog
{label="Tablo-2 Deneme02 ";
:text {label = "2NCİ TABLO AKTİF...";}
ok_cancel;}



LISP Bölümü

Kod:

(defun tablo-2-yukle ()
    (setq dcl_id1 (load_dialog "deneme.dcl"))
     (if (null (new_dialog "tablo_02" dcl_id1))(exit))
(if (= 1 (start_dialog))(princ "\nİşlem Tamam")))

 
(defun c:deneme ()
    (setq dcl_id (load_dialog "deneme.dcl"))
     (if (null (new_dialog "tablo_01" dcl_id))(exit))
  (action_tile "tbl-01" "(tablo-2-yukle)")
        (if (= 1 (start_dialog))
  (princ "\nİşlem Tamam"))
  (princ))

09.01.2015 08:16    

ismailasi
çok teşekkürler

08.03.2015 21:22    

alpayelmas
Merhaba DCL menuye bırkac buton ekledım ve dcl dosyasını olusturdum. lisp dosyasınıda olusturup yukledım menum cok guzel calıstı butonlardan bırıne bastıgımda bır baska lısp komutlarını ıceren foksıyonun calısmasını ıstıyorum kı bu fonksıyon baska bır lısp dosyasının komple dcl yı cagıran lsp doyasına kopyalanmıs halı . menudekı butona basınca error: no function definition: KES dıye bır hata verıyor sebebı nedır? bu hatayı n eden verır. dcl dekı bır butona basınca bır baska load edılmıs lısp ı calıstırmak ıcın ne yapmalıyım.

Tesekkurler.

08.03.2015 21:45    

Travaci
Diğer komutu çağırırken kullandığın butondaki kodu yazarsan ordan bişiler çıkartabiliriz.

08.03.2015 22:45    

alpayelmas
dcl KOD
Kod:

no_name : dialog {
    label="";
        : button {
            key        = "DCLButton1" ;
            label      = "KIR" ;
            width      = 20 ;
            height     =  4 ;
            alignment     = top ;
            is_tab_stop = false ;
        }
        : button {
            key        = "DCLButton2" ;
            label      = "UZAT" ;
            width      = 20 ;
            height     =  4 ;
            alignment     = top ;
            is_tab_stop = false ;
        }

ok_cancel_help;
}



lISP KOD
Kod:

(defun C:KES (/ *error* doc spc ss Objlst Obj iLst Altlst lst)
  (vl-load-com)

  (defun *error* (msg)
    (if doc (vla-EndUndoMark doc))
    (if ov (mapcar 'setvar vl ov))
    (if (not
          (wcmatch
            (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
      (princ
        (strcat "\n** Error: " msg " **")))
    (princ))

  (setq doc (vla-get-ActiveDocument
              (vlax-get-Acad-Object))
        spc (if (zerop (vla-get-activespace doc))
              (if (= (vla-get-mspace doc) :vlax-true)
                (vla-get-modelspace doc)
                (vla-get-paperspace doc))
              (vla-get-modelspace doc)))
 
  (setq vl '("CMDECHO" "OSMODE")
        ov (mapcar 'getvar vl))
 
  (vla-StartUndoMark doc)
  (or *brk$dis* (setq *brk$dis* 5.))
  (if (setq ss (ssget '((0 . "*LINE,ARC"))))
    (progn
      (or (not
            (setq tmp
              (getdist
                (strcat "\nSpecify Break Distance <" (rtos *brk$dis* 2 2) "> : "))))
          (setq *brk$dis* tmp))
      (setq Objlst
        (mapcar 'vlax-ename->vla-object
          (vl-remove-if 'listp
            (mapcar 'cadr (ssnamex ss)))))
      (while (setq Obj (car Objlst))
        (foreach iObj (setq Objlst (cdr Objlst))
          (setq iLst
            (cons
              (cons Obj
                (vlax-list->3D-point
                  (vlax-invoke Obj
                    'IntersectWith iObj acExtendNone))) iLst))))
      (mapcar 'setvar vl '(0 0))
      (foreach Int (vl-remove-if-not
                     (function
                       (lambda (x)
                         (vl-consp (cdr x)))) iLst)
        (setq Obj (car Int))
        (foreach Pt (cdr Int)
          (and Altlst (setq lst Altlst))
          (if (not (setq bDis (vlax-curve-getDistatPoint Obj Pt)))
            (while (and (not bDis) lst)
              (setq bDis (vlax-curve-getDistatPoint (setq Obj (car lst)) Pt)
                    lst (cdr lst))))
          (if bDis
            (progn
              (or (setq bPt1 (vlax-curve-getPointatDist Obj
                               (+ bDis (/ *brk$dis* 2.))))
                  (setq bPt1 (vlax-curve-getEndPoint Obj)))
              (or (setq bPt2 (vlax-curve-getPointatDist Obj
                               (- bDis (/ *brk$dis* 2.))))
                  (setq bPt2 (vlax-curve-getStartPoint Obj)))
              (command "_.Break"
                (list (vlax-vla-object->ename Obj) pt) "_F" bPt1 bPt2)
              (setq AltLst (cons (vlax-ename->vla-object (entlast)) AltLst)))))))
    (princ "\n** Nothing Selected **"))
  (vla-EndUndoMark doc)
  (mapcar 'setvar vl ov)
  (princ))
             

(defun vlax-list->3D-point (lst)
  (if lst
    (cons (list (car lst) (cadr lst) (caddr lst))
          (vlax-list->3D-point (cdddr lst)))))



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 
(defun LoadDialog_no_name( / dcl_id)
   (defun init_handler()   ;Initialation_Code
       (princ)
   );End of Initial Function
   (defun set_data() ;Start Set function
       (princ)
   (action_tile "DCLButton1" "(KES)")
   );End of Set function
  (defun get_data() ;Start Get function
       (princ)
   
   );End of Get function
   (if (setq dcl_id (load_dialog "MENU.DCL"))
       (if (new_dialog "no_name" dcl_id)
           (progn
              (setq result nil)
             (init_handler)
             (set_data)
(action_tile "accept" "(get_data)(done_dialog)(setq result T)")
              (start_dialog)
              (unload_dialog dcl_id)
              result
            )
       )
    )
)
(LoadDialog_no_name)

08.03.2015 22:47    

alpayelmas
Travaci ilk mesajımdaki sorunu aştım ama bu seferde butona tıkladıgımda komut satırında select object dıyor ama menu ekranda kaldıgı ıcın hıc bır ıslev yapamıyorum ve ctrl alt del den baska bır carem kalmıyor.

08.03.2015 22:49    

Travaci
Komutun (defun kes ...) olsaydı (kes) diye çağırırsın (c:kes) diye çağırmalısın.

09.03.2015 08:31    

alpayelmas
travaci;
(c:kes) dediğimde evet kes lispi çalışıyor ama ekranda bir işlem yapamıyorum. Çünkü DCL menüm ekranda kalıyor ve komut satırında select object yazmasına rağmen menü ekranda kaldıgı ıcın hıcbır obje secemıyorum . menu ekranda olmasına ragmen menunun ok cancel komutlarıda ıslemıyor sankı menuyu sureklı load eden bır dongu varmıs gıbı davranıyor. Halbukı kes butonuna basınca menu kaybolup lisp in işlemesı ve ıslem bıtınce menunun tekrar gorunmesı gerekmezmı?

09.03.2015 08:38    

Travaci
Kodları incelemeye vaktim yok mesaideyik :) Her butonunda done_dialog var mı ?

09.03.2015 09:13    

alpayelmas
Abi ben en iyisi baştan bir başlayıp basit bir örnekle diyalog butonları nasıl çalışır bir kez daha konu tekrarı yapayım. Neticesinde bir sonuca ulaşamazsam ozaman tekrar burdan bır cevap ararım . Armut piş olunca habire sizlerinde vaktini basit işler için almak istemiyorum. Şimdilik teşekkürler bi bakıp aşamazsam tekrar yazarım. Teşekkürler...

09.03.2015 09:42    

Travaci
Armut piş olunca vakit almaktan önemlisi sen öğrenemiyorsun kolay gelsin ; )

10.03.2015 20:57    

yazgunesi
Aşağıdaki kodlamayı bir incele..

flag 2 done dilaog 2'ye karşılık gelmektedir..
Kod:

   (action_tile "dcl_dialog_keyi_01"  "(done_dialog)")
   (action_tile "dcl_dialog_keyi_02" "(done_dialog 2) (unload_dialog dcl_id)")
   (action_tile "dcl_dialog_keyi_03" "(done_dialog 3) (unload_dialog dcl_id)")
   (action_tile "dcl_dialog_keyi_04" "(done_dialog 4) (unload_dialog dcl_id)")
 
  (setq flag (start_dialog))

            (if (= flag 1)   
             (progn   
              (exit)
      ) )
           (if (= flag 2)   
            (progn   
              (c:komut_calistir_02_dcl_key_icin)
      ) )
 
           (if (= flag 3)   
            (progn   
              (c:komut_calistir_03_dcl_key_icin)
      ) )

           (if (= flag 4)   
            (progn   
              (c:komut_calistir_04_dcl_key_icin)
      ) )
 

(princ) 
(unload_dialog dcl_id)
 
(princ) 
)


Eğer herhangi bir dcl dialogta buton üzerinden çıkış yaptırmak ister isen, action tile olan yerde şu şekilde bir kodlama kullanman gerekli :

Kod:

(action_tile  "butona_ait_key"  "(done_dialog)(exit)") 


Başka bir örnek kodlama :

Kod:

(setq dcl_id (load_dialog "dilog_dosya_ismi.dcl"))
(if (not (new_dialog "dialog_isimini_buraya_yaz" dcl_id) ) (exit))
 
(action_tile "ornek_key_01"  "(done_dialog)")
(action_tile "ornek_key_02" "(done_dialog 1)")
(action_tile "ornek_key_03" "(done_dialog 2)")
(setq flag (start_dialog))   
   
         (if (= flag 1)   
            (progn   
              (c:komut01)
      ) )

         (if (= flag 2) 
            (progn   
              (c:komut02)
      ) )

(unload_dialog dcl_id)
  )
)
 
(setvar "cmdecho" HQcmd)
(princ))

yazgunesi (10.03.2015 21:24 GMT)

10.03.2015 23:14    

Travaci
yazgunesi


(action_tile "butona_ait_key" "(done_dialog) (exit)")
Benim önerim (exit) kullanmamak, komut satırında yanlış bir işlem yapmış gibi çıkış gösteriyor.

Kod:

(defun c:example (/ ex)
  ...
  ...
  (action_tile "butona_ait_key" "(done_dialog) (setq ex nil)")
  ...
  (if ex
    (progn ....
    )
  ) (princ)
)

Şeklinde sanki daha yakışıklı oluyor :)
Onun dışında (if (= flag 1) (progn (c:komut01))) burdaki progn larımız fazla.

Kod:

(cond ((= flag 1) (c:komut01))
      ((= flag 2) (c:komut02)))

Kolay gelsin.

Copyright © 2004-2022 SQL: 2.105 saniye - Sorgu: 102 - Ortalama: 0.02064 saniye