23.09.2022 19:27    

turgaygirgin

Herkese merhaba,
Program içerisinde çizim parm butonu ile açılan Dcl sayfasında kullanıcının kanal ile ilgili istediği yazıları çizerken özelliklerini de seçebilmesini sağlamak istiyorum. (yazının layer , renk ve yukseklik) . mevcut durumda tanımlı layer ve renk listesi görünüyor. ""
Kod:

(setq LayL (list "MK-HV Kanal SUPPLY" "MK-HV Kanal FRESH" "MK-HV Kanal RETURN" "MK-HV Kanal EGZOST"
                             "MK-HV Kanal YAZI")
   ClrL (list "ByLayer" "ByBlock" "1 Red" "2 Yellow" "3 Green" "4 Cyan" "5 Blue" "6 Magenta" "7 White"
                            "Select Color..."))   ""

Ben Aktif dosyada ki layer ların listelenmesini ve mümkünse renk içinde, autocad de ki properties toolbarındaki gibi renkleri seçebilmek istiyorum.
dcl dosyam ;
Kod:

Cizparam : dialog {
           label ="Çizim Parametreleri";
           width = 30;
          height = 20 ;
         : boxed_column {
           label ="Yazdırma Seçenekleri";
           :row {
           : column {
   : row { : toggle { key = "Pndim_tog"; label = "Parça Numarası " ; alignment = centered ;}}
   : row { : toggle { key = "Kndim_tog"; label = "Kanal Ebadı    " ; alignment = centered ;}}
   : row { : toggle { key = "AFdim_tog"; label = "Hava Debisi    " ; alignment = centered ;}}
   : row { : toggle { key = "Padim_tog"; label = "Basınc Kaybı   " ; alignment = centered ;}}
   : row { : toggle { key = "Vldim_tog"; label = "Hava Hızı      " ; alignment = centered ;}}
   : row { : toggle { key = "Ftdim_tog"; label = "Fittings Adı   " ; alignment = centered ;}}
        }
   : column {
   : row { : popup_list { label = "Layer:" ;  key = "PnoLay_lst";  alignment = centered ; value = "1" ;}}
   : row { : popup_list { label = "Layer:" ;  key = "KnELay_lst";  alignment = centered ; value = "0" ;}}
   : row { : popup_list { label = "Layer:" ;  key = "AflLay_lst";  alignment = centered ; value = "0" ;}}
   : row { : popup_list { label = "Layer:" ;  key = "PamLay_lst";  alignment = centered ; value = "0" ;}}
   : row { : popup_list { label = "Layer:" ;  key = "VelLay_lst";  alignment = centered ; value = "0" ;}}
   : row { : popup_list { label = "Layer:" ;  key = "FttLay_lst";  alignment = centered ; value = "0" ;}}
        }
   : column {
   : row { : popup_list { label = "Color:" ;  key = "PnoClr_lst";  alignment = centered ; value = "8" ;}}
   : row { : popup_list { label = "Color:" ;  key = "KnEClr_lst";  alignment = centered ; value = "8" ;}}
   : row { : popup_list { label = "Color:" ;  key = "AflClr_lst";  alignment = centered ; value = "8" ;}}
   : row { : popup_list { label = "Color:" ;  key = "PamClr_lst";  alignment = centered ; value = "8" ;}}
   : row { : popup_list { label = "Color:" ;  key = "VelClr_lst";  alignment = centered ; value = "8" ;}}
   : row { : popup_list { label = "Color:" ;  key = "FttClr_lst";  alignment = centered ; value = "8" ;}}
        }
   : column {
   : row { : edit_box { key = "Pno_eb";  label = "Yazı Yüksekliği :" ; edit_width = 3; fixed_width = true; allow_accept = false; alignment = centered ;}}
   : row { : edit_box { key = "KnE_eb";  label = "Yazı Yüksekliği :" ; edit_width = 3; fixed_width = true; allow_accept = false; alignment = centered ;}}
   : row { : edit_box { key = "Afl_eb";  label = "Yazı Yüksekliği :" ; edit_width = 3; fixed_width = true; allow_accept = false; alignment = centered ;}}
   : row { : edit_box { key = "Pam_eb";  label = "Yazı Yüksekliği :" ; edit_width = 3; fixed_width = true; allow_accept = false; alignment = centered ;}}
   : row { : edit_box { key = "Vel_eb";  label = "Yazı Yüksekliği :" ; edit_width = 3; fixed_width = true; allow_accept = false; alignment = centered ;}}
   : row { : edit_box { key = "Ftt_eb";  label = "Yazı Yüksekliği :" ; edit_width = 3; fixed_width = true; allow_accept = false; alignment = centered ;}}
    }
       }
         : row {  width = 50; fixed_width = true; alignment = centered ;
           : button { key = "Accept"; label = "Tamam"; width = 15; fixed_width = true; alignment = left; is_default = true; is_cancel = false; mnemonic = "T"; }
           : button { key = "Cancel"; label = "Iptal"; width = 15; fixed_width = true; alignment = left; is_default = false; is_cancel = true; mnemonic = "I"; }
           : button { key = "Hlp"; label = "Yardım"; width = 15; fixed_width = true; alignment = left; is_default = false; mnemonic = "Y"; }
               }
                         }
         } // dialog end.

Lisp dosyam da ;
Kod:

(defun c:Cpr ( / LayL ClrL Dclid_Cp CzPar)
  (setq LayL (list "MK-HV Kanal SUPPLY" "MK-HV Kanal FRESH" "MK-HV Kanal RETURN" "MK-HV Kanal EGZOST" "MK-HV Kanal YAZI")
ClrL (list "ByLayer" "ByBlock" "1 Red" "2 Yellow" "3 Green" "4 Cyan" "5 Blue" "6 Magenta" "7 White" "Select Color..."))
  (setq Dclid_Cp (load_dialog "DrwParam.DCL"))
   (if (not (new_dialog "Cizparam" Dclid_Cp))(exit)
    (progn
      (start_list "PnoLay_lst")(mapcar 'add_list LayL)(end_list)  ; Parça numarası yazısı layeri ( Part Number Text Layer)
      (start_list "PnoClr_lst")(mapcar 'add_list ClrL)(end_list)  ; Parça numarası yazı rengi ( Part number text layer color)
      (start_list "KnELay_lst")(mapcar 'add_list LayL)(end_list)  ; Parça Ebadı yazısı ( Part Dimension Text Layer)
      (start_list "KnEClr_lst")(mapcar 'add_list ClrL)(end_list)  ; Parça Ebadı yazı rengi ( Part Dimension text layer color)
      (start_list "AflLay_lst")(mapcar 'add_list LayL)(end_list)  ; Hava debisi yazısı ( Airvolume Text Layer)
      (start_list "AflClr_lst")(mapcar 'add_list ClrL)(end_list)  ; Hava debisi yazı rengi ( Airvolume text layer color)
      (start_list "PamLay_lst")(mapcar 'add_list LayL)(end_list)  ; Basınc kaybı yazısı ( Pressure lose Text Layer)
      (start_list "PamClr_lst")(mapcar 'add_list ClrL)(end_list)  ; Basınc kaybı yazı rengi ( Pressure lose text layer color)
      (start_list "VelLay_lst")(mapcar 'add_list LayL)(end_list)  ; Hava hızı yazısı ( AirVelocity Text Layer)
      (start_list "VelClr_lst")(mapcar 'add_list ClrL)(end_list)  ; Hava hızı yazı rengi ( AirVelocity text layer color)
      (start_list "FttLay_lst")(mapcar 'add_list LayL)(end_list)  ; Fitingsno yazısı ( Fittings Number Text Layer)
      (start_list "FttClr_lst")(mapcar 'add_list ClrL)(end_list)  ; Fitingsno yazı rengi ( Fittings Number text layer color)
      (action_tile "Accept" "(done_dialog 1)")
      (action_tile "Cancel" "(done_dialog 0)")
      (setq CzPar (start_dialog))
      (unload_dialog Dclid_Cp)
       (if (= CzPar 1) (alert "Çizim Parametreleri Kaydedildi.!!"))
       (if (= CzPar 0) (alert "Çizim Parametreleri Kaydedilmedi.!!"))
    )
   )
)

Yardımcı olursanız çok sevinirim.

ProhibiT (24.09.2022 08:07 GMT)

24.09.2022 07:58    

ProhibiT
Bu kadar ayrıntılı soruya cevap vermek biraz zor doğrusu. Bu nedenle baştan ele almakta fayda var. Sizin olmazsa belki başka birinin işine yarar.

Öncelikle "İletişim Kutusu"'nun (Dialog Box'ın) etkinleştirilmesi, görüntülenmesi ve işletilmesi bölümünü değiştirmenizi tavsiye ederim. Bununla ilgili sitemizde epeyce paylaşım bulabilirsiniz. Örnek olması bakımından 20 küsur yıl önce yazdığım bir fonksiyon üzerinden açıklamaya çalışayım.
Kod:

  (if (< (setq dcl_id (load_dialog "karolaj.dcl")) 0) (exit))
  (setq siradaki_ne 0)
  (while (< siradaki_ne 1)
    (if (not (new_dialog "karolaj" dcl_id)) (exit))
    (set_tile "krx" (rtos boyx 2 2))
    (set_tile "kry" (rtos boyy 2 2))
    (set_tile "cpr" "Hazırlayan: M.Şahin Güvercin")
    (cond ((= ktp 1) (set_tile "ktp1" "1")) ((= ktp 2) (set_tile "ktp2" "1"))
          ((= ktp 3) (set_tile "ktp3" "1")) ((= ktp 4) (set_tile "ktp4" "1"))
          ((= ktp 5) (set_tile "ktp5" "1")) ((= ktp 6) (set_tile "ktp6" "1"))
          ((= ktp 7) (set_tile "ktp7" "1")) ((= ktp 8) (set_tile "ktp8" "1"))
          ((= ktp 9) (set_tile "ktp9" "1")))
    (action_tile "krx" "(setq boyx (atof (get_tile "krx")))")
    (action_tile "kry" "(setq boyy (atof (get_tile "kry")))")
    (action_tile "ktp1" "(setq ktp 1)") (action_tile "ktp2" "(setq ktp 2)")
    (action_tile "ktp3" "(setq ktp 3)") (action_tile "ktp4" "(setq ktp 4)")
    (action_tile "ktp5" "(setq ktp 5)") (action_tile "ktp6" "(setq ktp 6)")
    (action_tile "ktp7" "(setq ktp 7)") (action_tile "ktp8" "(setq ktp 8)")
    (action_tile "ktp9" "(setq ktp 9)")
    (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 2)")
    (setq siradaki_ne (start_dialog)))
  (if (> siradaki_ne 1) (exit))

Görüldüğü gibi -.dcl yükleniyor, bulunamazsa "exit" ile çıkılıyor... "if" direktifinin işi burada bitti.

Sonra "siradaki_ne" değişkenine 0 (sıfır) atayarak işe başladık. (AutoCAD dokümanlarında ve pek çok yabancı kaynakta "what_next" adıyla kullanılan değişken. Ana dilimizde tanımlanınca anlaşılması ve takip edilmesi çok daha kolay oluyor.)

İletişim Kutusunun aldığı değere (siradaki_ne) göre (benim örneğimde) 1'den küçük olması durumunda (while döngüsünü başlattık.

Döngü başında (if (not (new_dialog "karolaj" dcl_id)) (exit)) ile İletişim Kutusu'nu görüntüledik, görüntülenemezse (Diyalog yüklü değilse) "exit" ile çıktık. Burada da "if" direktifinin işi bitti. Öyleyse, (progn... şu; Değilse (progn... bu gibi karmaşaya hiç gerek kalmadı.

Sİzin Lisp kodlarınızda yalnızca "Accept" ve "Cancel" için "action_tile" var. Yani seçimler bir kaydedilmiyor. Yapılan her seçim için "action_tile" yazılırsa yapılan seçim akılda tutulmuş olur.

Gelelim sorunuzun omurgasını oluşturan Renk (Color) kısmına.
"PnoClr_lst", "KnEClr_lst", "AflClr_lst", "PamClr_lst" ve "VelClr_lst" aynı açılır listeye sahip (renkler) ve sonunda "Select Color" var. Bunlar için yazılacak "action_tile" işlemini done_dialog (sıradaki değeri alacak şekilde) eklenirse... İletişim kutusundan çıkılacaktır. Kutu kapandığında done-dialog'un ürettiği (siradaki_ne) değere göre, renk seçimi için, (acad_truecolordlg 7 T) ile AutoCAD True Color Dialog Box görüntülenecek, ve seçim yapılabilecektir.

Bu noktada ben olsam; iletim kutusunda yalnızca o an geçerli rengi ve acad_truecolordlg gösteririm. Açılan renk seçimi diyalog kutusunda 0'dan 255'e kadar (Autocad Color Index, Bylayer ve Bayblock) görüntülenecektir. Örnekte yazdığım 7 renk numarası yerine o an geçerli olan renk kodu girilirse, geçerli renk seçili olarak gelecektir. Burada acad_colordlg de kullanılabilirdi... ne olur ne olmaz kullanıcı belki True Color veya Color Book (Pantone gibi) kullanabilir diye acad_truecolordlg kullandım.

Döngü içinde seçimler yapılıp, gerekli ayarlamalar ve düzenlemeler yapıldıktan sonra İletişim Kutusu (OK veya Cancel seçilerek) kapatılınca, elde edilen değere göre işlem yapılır (veya cancel ise yapılmaz).

Selam ve saygılarımla herkese kolaylıklar dilerim.

24.09.2022 09:24    

turgaygirgin
Alıntı
ProhibiT :




Merhaba Hocam,
Aydınlatıcı bilgileriniz için çok teşekkür ederim. Dcl nin etkinleştirilmesi ve görüntülenmesi konusundaki tavsiyelerinize
uyacağımı bilmenizi isterim. Dcl nin işletilmesi konusunda da kod kalabalıklığı veya karmaşası olmaması için mümkün
olduğunca kısa tutarak sorumu sorabilmekti amacım. Derdim aktif çizimdeki layer listesini layer popup listesinde
gösterebilmek. Renk seçimini de properties toolbar daki gibi seçebilmek.

Teşekkürler.

25.09.2022 06:52    

turgaygirgin
Layer Listesi Kısmını Hallettim ;
Başkalarının da işine yarayabilir,
aktif çizimdeki layerları listeler ve sıralar :
(setq LayL (vl-sort(vlax-for Lay (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) (setq LayL (cons (vla-get-Name Lay) LayL)))'<))

25.09.2022 08:15    

alumina
Alıntı
turgaygirgin :


Bu sekilde siralarsan layer table deki siralama ile ayni olmaz. "acad_strlsort" kullansan daha dogru olur sanki..

25.09.2022 09:01    

turgaygirgin
Alıntı
alumina :
Alıntı
turgaygirgin :

Bu sekilde siralarsan layer table deki siralama ile ayni olmaz. "acad_strlsort" kullansan daha dogru olur sanki..


Haklısınız hocam ; Denedim gördüm. :) :yes

(setq LayL (acad_strlsort (vlax-for Lay (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object))) (setq LayL (cons (vla-get-Name Lay) LayL)))))

teşekkürler..

27.09.2022 06:52    

turgaygirgin
Alıntı
mttlp :
Eline sağlık güzel görünüyor Kanal debilerini toplarken xline mı kullandın seçimi nasıl yaptınız



Teşekkürler. Xline değil, kanal güzergahını tek hat olarak çizdim. sonra hepsini seçerek işleme alıyorum.

27.09.2022 09:06    

turgaygirgin
Alıntı
mttlp :
Mahalin Debisi değiştiğinde nasıl oluyor hocam kendi güncelliyor mu?


Tek hat çizgilerini silmemişseniz, debileri istediğiniz şekilde değiştirebilirsiniz. Kanal hesapla dediğinizde yeni değerlere göre hesaplayıp tekrar çizdirebilirsiniz. Kanal düzenle kısmında kanalın biçimini(rectangular , dairesel, oval ), ebatlarını ihtiyacınıza göre sabitleyip hesabı ona göre yaptırabilirsiniz. Fittingsler Ashrae tanımlı fittingsler. Fittingsleri ilgili parçaları düzenleyerek değiştirebilirsiniz. (pantalon yerine saplama tee , 4 yöne genişleme yerine h sabit sağa veya sola genişleme redüksiyon , preslenmiş tek parça yerine 3-5 parçalı dirsek vs).

27.09.2022 11:51    

turgaygirgin
Alıntı
mttlp :
Güzel büyük projelerde üst üste gelirse nasıl seçim olacak


Bütün parçaları tek seferde seçmeniz gerekmiyor. Teker tekerde seçebilirsiniz. Ssget ile seçim yapıyorum.

Ayrıca birde ricam olacak sizden.Forumlarda yazarken alıntı yapınca aynı şeyler her iletide çıkıyor. hem karmaşık hemde sayfa kalabalığı yapıyor.iletileri temizlerseniz sevinirim.
Teşekkürler.

27.09.2022 12:39    

turgaygirgin
Alıntı
turgaygirgin :
Alıntı
mttlp :
Güzel büyük projelerde üst üste gelirse nasıl seçim olacak


Bütün parçaları tek seferde seçmeniz gerekmiyor. Teker tekerde seçebilirsiniz. Ssget ile seçim yapıyorum.
Ayrıca birde ricam olacak sizden.Forumlarda yazarken alıntı yapınca aynı şeyler her iletide çıkıyor. hem karmaşık hemde sayfa kalabalığı yapıyor.iletileri temizlerseniz sevinirim.
Teşekkürler.



mttlp Kusura bakmayın, yanlış anladınız. İletilerinizi silin demedim. Alıntı yapınca içindeki gereksiz kısımları silin demek istedim.

27.09.2022 12:48    

mttlp
Büyük projede seçim sıkıntı benimde yaptığım havalandırma çizim hesap metraj programı polyline ile çizip pantolon paça te cihaz seçimi yapıp otomatik ekliyoruz
Sizin toplama olayı güzel olmuş elinize sağlık bunu daha geliş hale getirebiliriz
Yaptığım programa bakabilirsin



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




Alıntı
turgaygirgin :
Alıntı
turgaygirgin :
Alıntı
mttlp :
Güzel büyük projelerde üst üste gelirse nasıl seçim olacak




mttlp Kusura bakmayın, yanlış anladınız. İletilerinizi silin demedim. Alıntı yapınca içindeki gereksiz kısımları silin demek istedim.

> 1 <
Copyright © 2004-2022 SQL: 2.392 saniye - Sorgu: 86 - Ortalama: 0.02781 saniye