14.05.2012 18:32    

ProhibiT
Hocam öncelikle sizden bir ricam olacak, mesajlarınızın tamamını büyük harfle yazmayınız. Bu tür ortamlarda bağırarak konuşmak anlamına gelir.

İkinci olarak ta size bir özür borçluyum, command kullanıldığı konusunda dalgaya düştüm, üstüne üstlük, 256 yerine 255 yazmışım.

AutoCAD kullanıcı diyaloglarında bazı renkleri (True Color dışında) isimleriyle gösterse de, tüm renkleri DataBase'de numaralarıyla tutar. Bu sisteme ACI (AutoCAD Color Index) deniyor. Renler 0'dan başlayıp 256'da biten numaralarla ifade ediliyor. Bunlardan 1'den 255'e kadar olanlar ilgili renkleri, 0=BybLock, 256=ByLayer rengini ifade ediyor.
Yukarıda da bahsettiğim gibi True Color, RAL ve Pantone renkleri bunun dışındakalır.

Dediğim gibi bu durumda bile, ancak Association List (dxf kodu diyorsunuz) kullanarak bir objeye 0 veya 256 renklerini atayabiliyoruz.

Yazdığınız fonksiyona gelince,
Kod:

(defun c:12 (/ YeniLayer YeniLayerRengi Renk SecimLer n PvT)
  ;;; Kullandığımız değişkenleri Local olarak tanımladık.
  (setvar "cmdecho" 0) (command "_.undo" "group")
  ;;; Yapılan işlemi tek adıma geri alabilmek için undo group başlattık.
  (while (or (= (setq YeniLayer (getstring T "\nYeni Layer adı: ")) "")
             (= YeniLayer " ") (tblsearch "Layer" YeniLayer))
    ;;; Layer adı girilirken, enter ile boş geçilmesi engellendi.
    ;;; (getstring T kullanarak Layer adında boşluk karakterine izin verdik.
    ;;; Layer adının tek bir boşluk karakteri olmasını kabul etmedik.
    ;;; Layer Adının mevcut Layer'lar arasında olmasını engelledik.
    ;;; yeni Layer adı doğru şekilde girilinceye kadar istek tekrarlanır.
    (princ (strcat "\n<" YeniLayer "> den başka bir Layer adı seçiniz.")))
  ;;; Yeni Layer Adı'nı Layer'lar arasında olup olamdığını kotrol ederek aldık.
  ;;; Mevcut olmayan yeni bir Layer adı girilinceye kadar istek tekrarlanır.
  (if (not (setq YeniLayerRengi (getint "\Yeni Layer Renk Kodu/veya Enter: ")))
    (setq YeniLayerRengi (acad_colordlg 1 nil)))
  ;;; Kullanıcı renk kodunu girebilir, veya Enter girdiğinde
  ;;; AutoCAD Color Dialog penceresi açılarak seçim yapması sağlandı.
  ;;; Layer rengi ByLayer veya ByBLock olamayacağından,
  ;;; (acad_colordlg 1 nil) şeklinde kullanıldı.
  (entmake (list (cons 0 "Layer") '(100 . "AcDbSymbolTableRecord")
                 '(100 . "AcDbLayerTableRecord") (cons 2 YeniLayer) '(70 . 0)
                 (cons 62 YeniLayerRengi) '(6 . "Continuous")))
  ;;; Mevcut olmadığından emin olduğumuz Layer'ı oluşturup, rengini atadık.
  (if (not (setq Renk (getint "\nReferans Renk Kodu/veya enter :")))
    ;;; Kullanıcı Referans Renk Kodunu girebilir veya Enter girdiğinde,
    ;;; seçilecek Referans objenin Rengi alınacak.
    (if (not (setq Renk (car (entsel "\nReferans Obje/veya Enter: "))))
      ;;; Kullanıcı Renk için Referans objesi seçebilir, veya
      ;;; Enter girdiğinde, Renk seçimi için AutoCAD Color Dialog açılır.
      (setq Renk (acad_colordlg 3))
      (if (assoc 62 (entget Renk))
        ;;; (assoc 62 nil değilse, bir 0 ile 255 arasında bir renge sahiptir.
        (setq renk (cdr (assoc 62 (entget Renk))))
        ;;; (assoc 62 nil ise seçilen objenin rengi ByLayer yani 256'dır.
        (setq renk 256))))
  (princ "\nNesneleri seçiniz: ")
  (setq SecimLer (ssget (list (cons 62 Renk))) n (sslength SecimLer))
  ;;; Önce bir seçim seti oluşturup bunun içinde belirlenen renkteki
  ;;; objeleri aramaktansa, doğrudan doğruya belirlenen renkeki objelerden
  ;;; bir seçim seti oluşturup bunları işleme alıyoruz.
  (while (>= (setq n (1- n)) 0)
    ;;; seçim setindeki objeleri en büyük numaralısından (n-1'inci) başlayarak
    ;;; 0'ıncı objeye kadar sırayla işleme alıyoruz.
    ;;; Döngü sayacını döngü başında değiştiriyoruz.
    (setq PvT (entget (ssname SecimLer n)))
    ;;; Sıradaki objenin Association List'ini PvT değişkenine aldık.
    (if (cdr (assoc 62 PvT))
      ;;; (assoc 62 değeri nil değilse, obje rengi ByLayer'dan başka demektir.
      ;;; söz konusu değer 256 yapıldığında objenin rengi ByLayer olacaktır.
      ;;; (assoc 62 nil ise, zaten renk ByLayer'dır, bir işleme gerek yok.
      (setq PvT (subst (cons 62 256) (assoc 62 PvT) PvT)))
    (setq PvT (subst (cons 8 YeniLayer) (assoc 8 PvT) PvT))
    ;;; sıradaki obje Association List'inde Layer adını da değiştirdik.
    (entmod PvT) (entupd (cdr (assoc -1 PvT))))
    ;;; Düzenlenen Association List'i objeye geri atadık. Objeyi güncelledik.
  (command "_.undo" "e") ;;; Undo Group'u sonlandırdık.
  (prin1) ;;; Fonksiyondan temiz bir çıkış için boş bir satır yazdırdık.
)
şeklinde açıklamalarıyla yazdım. Bu haliyle problemsiz çalışır, kullanım sırasında olası her durum da göz önüne alınmış olur. Comment satırlarını kaldırınca;
Kod:

(defun c:12 (/ YeniLayer YeniLayerRengi Renk SecimLer n PvT)
  (setvar "cmdecho" 0) (command "_.undo" "group")
  (while (or (= (setq YeniLayer (getstring T "\nYeni Layer adı: ")) "")
             (= YeniLayer " ") (tblsearch "Layer" YeniLayer))
    (princ (strcat "\n<" YeniLayer "> den başka bir Layer adı seçiniz.")))
  (if (not (setq YeniLayerRengi (getint "\Yeni Layer Renk Kodu/veya Enter: ")))
    (setq YeniLayerRengi (acad_colordlg 1 nil)))
  (entmake (list (cons 0 "Layer") '(100 . "AcDbSymbolTableRecord")
                 '(100 . "AcDbLayerTableRecord") (cons 2 YeniLayer) '(70 . 0)
                 (cons 62 YeniLayerRengi) '(6 . "Continuous")))
  (if (not (setq Renk (getint "\nReferans Renk Kodu/veya enter :")))
    (if (not (setq Renk (car (entsel "\nReferans Obje/veya Enter: "))))
      (setq Renk (acad_colordlg 3)) (if (assoc 62 (entget Renk))
                  (setq renk (cdr (assoc 62 (entget Renk)))) (setq renk 256))))
  (princ "\nNesneleri seçiniz: ")
  (setq SecimLer (ssget (list (cons 62 Renk))) n (sslength SecimLer))
  (while (>= (setq n (1- n)) 0)
    (setq PvT (entget (ssname SecimLer n)))
    (if (cdr (assoc 62 PvT))
      (setq PvT (subst (cons 62 256) (assoc 62 PvT) PvT)))
    (setq PvT (subst (cons 8 YeniLayer) (assoc 8 PvT) PvT))
    (entmod PvT) (entupd (cdr (assoc -1 PvT)))) (command "_.undo" "e") (prin1)
)

14.05.2012 21:04    

rayden81
Evet yazım kurallarına büyük/küçük harfe dikkat edeceğim. Yinede dikkatimden bir gün kaçar ise peşinen özür dilerim.

Öyle büyük bir emek vermişsiniz ki nasıl teşekkür edeceğimi şaşırdım. burada yaptığınız açıklamalar, bilgiler, özveri ve paylaşım için defalarca teşekkür ederim.Bu konulara Çok meraklıyım umarım sorularımla bıktırmam sizleri :)

15.05.2012 08:33    

rayden81
Hocam sizi Sıkmayacak isem sorularıma devam etmek isterim.

Yazdığım lispde baznoktayı seçtirip o noktanın kot degerini kullanıcıya girdirip seçilen nesne grubunda belirttiğim atrıbute bloklara farkı hesaplayıp yazdırıyorum. Ama sonuçta kot değerlerim 996.00~991.50 yerine 996 991.5 oluyor yani son iki basamağı sıfırda olsa yazdıramıyorum bunun bir yöntemi varmı acaba.

Kod:

(DEFUN C:KOT()
(PRINC "\nSEÇİMLERİ YAPINIZ:")
(SETQ SECIMLER(SSGET))
(SETQ BAZNOKTA(GETPOINT"\nBAZ NOKTAYI SEÇİNİZ:"))
(SETQ BAZNOKTAKOT(GETREAL"\nBAZ NOKTANIN KOTUNU GİRİNİZ:"))

(SETQ SECIMSAYISI(SSLENGTH SECIMLER))
(SETQ DONGU 0)

(WHILE (< DONGU SECIMSAYISI)

(SETQ NESNE(SSNAME SECIMLER DONGU))
(SETQ NESNEDXF(ENTGET NESNE))
(SETQ NESNETIP(CDR(ASSOC 0 NESNEDXF)))


(IF (= NESNETIP "INSERT")

(PROGN
(SETQ BLOKAD(CDR(ASSOC 2 NESNEDXF)))

(IF (= BLOKAD "DKOT-1")
  (PROGN
    (SETQ ALTNESNE(ENTNEXT NESNE))
    (SETQ ALTNESNEDXF(ENTGET ALTNESNE))
    (SETQ KOTDEGERI(CDR(ASSOC 1 ALTNESNEDXF)))


;*************************************************************
(SETQ KOTINSERTY(CADR(CDR(ASSOC 10 NESNEDXF))))

(SETQ BAZNOKTAY(CADR BAZNOKTA))

(SETQ FARK(- KOTINSERTY BAZNOKTAY))

(SETQ YENIKOTDEGERI(+ BAZNOKTAKOT FARK))

;**************************************************************


(SETQ YENIKOTDEGERI(RTOS YENIKOTDEGERI 2 3))
(SETQ ALTNESNEDXF(SUBST (CONS 1 YENIKOTDEGERI) (ASSOC 1 ALTNESNEDXF) ALTNESNEDXF))
(ENTMOD ALTNESNEDXF)
(ENTUPD ALTNESNE)

  )
)

)

)




(SETQ DONGU(+ DONGU 1))

)



)

ProhibiT (15.05.2012 08:37 GMT)

15.05.2012 11:04    

ProhibiT
Forum alanında bir kod paylaşırken bunları code braketi içine alarak yazarsanız, daha kolay algılanabilir. Yukarıdaki mesajınızı bu anlamda düzenledim. Gene kod paylaşırken 80 karakterden uzun satır kullanmamak daha doğru oluyor. Gereksiz boşluk ve format bozuklukları da, bir ucundan diğer ucu görülemediği için, takip edilebilirliği yok ediyor. Kendi adıma böyle bir kod gördüğüm zaman bakmak bile istemiyorum. Herkesin de böyle hissettiğini düşünüyorum.

Sorunuza gelirsek;
(setq a 125.3) ve DIMZIN sistem değişkeni 8 veya daha büyük bir değer iken,
(rtos a 2 4) ifadesi - > 125.3 döner.
DIMZIN sistem değişkeninin değerini 8'den küçük bir değer yaparsanız (aslında 0 daha doğru)
(rtos a 2 4) ifadesi -> 125.3000 olarak döner.
Fonksiyon içinde dimzin değerini değiştirecekseniz, mevcut değerini bir değişkende saklayıp, fonksiyon çıkışında eski değeri yeniden atamak doğru olacaktır.

Bu konuyla ilgili,

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

ve

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

linklerine bir göz atıp, ikinci verdiğim linkten indireceğiniz KotK fonksiyonunu denemenizi tavsiye ederim.

Gene yanlış anlaşılmayacağını düşünerek, yukarıda verdiğiniz kod konusunda bazı kritiklerim olacak. Bir şeyler yazarken, doğru olmayan bazı alışkanlıkların daha sonradan düzeltilmesi çok zor, hatta imkansız olacaktır. Burada çok detaylı olarak analtmaya çalıştığım kavramlara dikkat etmeniz, kendi iyiliğinize olacaktır. Ne farkeder ki, tuzağına düşmeyiniz.

Öyle tren gibi peşpeşe setq yazmak yerine setq'ları guruplasanız, başkaca hiç bir şey yapmadan fonksiyon,
Kod:

(defun C:KOT ()
  (princ "\nSEÇİMLERİ YAPINIZ:")
  (setq SECIMLER (ssget)
        BAZNOKTA (getpoint "\nBAZ NOKTAYI SEÇİNİZ:")
        BAZNOKTAKOT (getpoint "\nBAZ NOKTANIN KOTUNU GİRİNİZ:")
        SECIMSAYISI (sslength SECIMLER)
        DONGU 0)
  (while (< DONGU SECIMSAYISI)
    (setq NESNE (ssname SECIMLER DONGU)
          NESNEDXF (entget NESNE)
          NESNETIP (cdr (assoc 0 NESNEDXF)))
    (if (= NESNETIP "INSERT")
      (progn
        (setq BLOKAD (cdr (assoc 2 NESNEDXF)))
        (if (= BLOKAD "DKOT-1")
          (progn
            (setq ALTNESNE (entnext NESNE)
                  ALTNESNEDXF (entget ALTNESNE)
                  KOTDEGERI (cdr (assoc 1 ALTNESNEDXF))
                  KOTINSERTY (cadr (cdr (assoc 10 NESNEDXF)))
                  BAZNOKTAY (cadr BAZNOKTA)
                  FARK (- KOTINSERTY BAZNOKTAY)
                  YENIKOTDEGERI (+ BAZNOKTAKOT FARK)
                  YENIKOTDEGERI (rtos YENIKOTDEGERI 2 3)
                  ALTNESNEDXF (subst (cons 1 YENIKOTDEGERI)
                                     (cons 1 ALTNESNEDXF) ALTNESNEDXF))
            (entmod ALTNESNEDXF)
            (entupd ALTNESNE)))))
    (setq DONGU (+ DONGU 1)))
)
bu hale geliyor.

- Önce seçim seti oluşturup, sırasıyla bunları işleme alıp, INSERT olup olmadığını kontrol etmek yerine, baştan filtre kullanarak INSERT objeleri seçilebilir.
- While Loop kurarken iki tane değişken tutup, değişkenlere eziyet etmeye hiç gerek yok.
- Sizlere tuhaf gelebilir ama, fonksiyon yazarken, bırakın satırı, bir karakter bile fazladan yazılmamalıdır. Tüm programlama dillerinde geçerlidir bu.
- Gereksiz değişkenler, gereksiz if blockları, ve gene gereksiz guruplama (progn),... gibi kısımları kaldırıldığında, fonksiyon hiç bir şeyini değiştirmeden,
Kod:

(defun C:KOT (/ Sset BazN BazK n Obje SubO KotD KotY BazY Fark YKot)
  (setvar "Dimzin" 0)
  (princ "\nKot bLock'larını seçiniz: ")
  (setq Sset (ssget (list (cons 0 "INSERT")))
        BazN (getpoint "\nBAZ NOKTAYI SEÇİNİZ:")
        BazK (getreal "\nBAZ NOKTANIN KOTUNU GİRİNİZ:")
        n (sslength Sset))
  (while (>= (setq n (1- n)) 0)
    (setq Obje (entget (ssname Sset n)))
    (if (= (cdr (assoc 2 Obje)) "DKOT-1")
      (setq SubO (entget (entnext (cdr (assoc -1 Obje))))
            KotD (cdr (assoc 1 SubO))
            KotY (cadr (cdr (assoc 10 Obje)))
            BazY (cadr BazN)
            Fark (- KotY BazY)
            YKot (rtos (+ BazK Fark) 2 3)
            SubO (subst (cons 1 YKot) (cons 1 SubO) SubO)
            SubO (entmod SubO)
            SubO (entupd (cdr (assoc -1 SubO))))))
)
haline gelir.

Yukarıda uyardığım gibi DIMZIN değişkeninin değerini kaybetmemek için bir şey yazmadım.
Sıradaki objenin, (entnext ile alınan Sub objesi Attrib (veya Text) olarak kabu edildiğine göre, söz konusu bLock, türü Attrib veya Text olan tek bir objeden oluşmaktadır. Böyle tek objesi olan bLock yapmak mantıklı olmaz, bu tek obje Attrib olmasının da mantığı yok. Tag'i yok, Deault'u yok, Prompt'yok, bunlar olsa da tanımlı bir anlamı yok.

Kolay gelsin.

15.05.2012 11:54    

rayden81
Teşekkür ederim hocam elimden geldiği kadar önerilerinize uyacağım ağaç yaş iken eğilir...

17.05.2012 10:19    

allengir
3d katı objelerin ağırlık merkezini bulan ve bulduğu noktaya SPHERE ile nokta koya lisp yapılabilir mi?

21.05.2012 11:35    

Travaci
Elimde bir lisp var buna bağlıda .dcl si var. Attribut e çift tıkladığımda dcl si açılıyor fakat bazen dcl açılmayıp, enhanced attribute editor açılıyor ve lisp i load etsemde işe yaramıyor, autocad i açıp kapamak zorunda kalıyorum, sebebi ne olabilir başka birşeymi engeller, bilginiz varmı ?

22.05.2012 07:44    

ProhibiT
Alıntı
as1986 :
slm kolay gelsin
arkadaşlar ben bir lisp yazmaya çalışıyorum da yalnız ufak bir problemim war
lispteki değişken sayısı başka bir değişken tarafından kontrol edilecek
yani ilk değişken için değer istendiğinde eğer cevap 10 gelirse
10 adet değişken yaratıp mesela bunlar a1, a2, a3 .... a10 diye isimler verip sonra bunların her biri için değer girilmesini isteyecek
nasıl bir döngü veya komut ile bunu sağlayabilirim


Bazen sorulan sorular dikkatimizden kaçabiliyor. as1986 arkadaşımızın sorusunu, biraz geç olsa da cevaplayarak, AutoLISP'in temel tekniklerinden birini, setq ve set fonksiyonlarının farkını açıklamak isterim.
Kod:

;;; Oluşturulacak değişken sayısını belirleyelim.
;;; Bu değer başka bir fonksiyon tarafından da üretilebilir.
;;; Örneğin basit olması için kullanıcı girsin.
(setq Ds  (getint "\nGirilecek Değişken sayısı: ")
      Nmr (list "1")
      n   0)
;;; 1'den başlayıp, değişken sayısına kadar olan numaraları,
;;; string'lerden oluşan bir listede toplayalım.

(while (< (setq n (1+ n)) Ds)
  (setq Nmr (append Nmr (list (itoa (1+ n))))))
;;; ("1" "2" "3" "4" ... ) gibi bir liste elde ettik.

;;; Soruda olduğu gibi değişkenlerimiz, A1, A2, A3,... şeklinde olsun.
;;; mapcar ve Lambda fonksiyonlarını kullanarak,
;;; 1'den DeişkenSayısı'na kadar olan A değişkeninimize değer atayalım.
(mapcar '(lambda (p)
           (set (read (strcat "A" p))
                (getreal (strcat "\n A" p " değerini giriniz: "))))
        Nmr)

;;; Dikkat edilmesi gereken nokta, read ile strcat sonucunu okuduğumuzdan,
;;; setq değil set fonksiyonu kullanılmalıdır.
Kod:

(setq Ds  (getint "\nGirilecek Değişken sayısı: ")
      Nmr (list "1")
      n   0)
(while (< (setq n (1+ n)) Ds)
  (setq Nmr (append Nmr (list (itoa (1+ n))))))
(mapcar '(lambda (p)
           (set (read (strcat "A" p))
                (getreal (strcat "\n A" p " değerini giriniz: "))))
        Nmr)
Herkese kolay gelsin...

ProhibiT (24.05.2012 05:57 GMT)

24.05.2012 05:25    

as1986
Alıntı
ProhibiT :
Alıntı
as1986 :
slm kolay gelsin
arkadaşlar ben bir lisp yazmaya çalışıyorum da yalnız ufak bir problemim war
lispteki değişken sayısı başka bir değişken tarafından kontrol edilecek
yani ilk değişken için değer istendiğinde eğer cevap 10 gelirse
10 adet değişken yaratıp mesela bunlar a1, a2, a3 .... a10 diye isimler verip sonra bunların her biri için değer girilmesini isteyecek
nasıl bir döngü veya komut ile bunu sağlayabilirim


Bazen sorulan sorular dikkatimizden kaçabiliyor. as1986 arkadaşımızın sorusunu, biraz geç olsa da cevaplayarak, AutoLISP'in temel tekniklerinden birini, setq ve set fonksiyonlarının farkını açıklamak isterim.
Kod:

;;; Oluşturulacak değişken sayısını belirleyelim.
;;; Bu değer başka bir fonksiyon tarafından da üretilebilir.
;;; Örneğin basit olması için kullanıcı girsin.
(setq Ds  (getint "\nGirilecek Değişken sayısı: ")
      Nmr (list "1")
      n   0)
;;; 1'den başlayıp, değişken sayısına kadar olan numaraları,
;;; string'lerden oluşan bir listede toplayalım.

(while (< (setq n (1+ n)) Ds)
  (setq Nmr (append Nmr (list (itoa (1+ n))))))
;;; ("1" "2" "3" "4" ... ) gibi bir liste elde ettik.

;;; Soruda olduğu gibi değişkenlerimiz, A1, A2, A3,... şeklinde olsun.
;;; mapcar ve Lambda fonksiyonlarını kullanarak,
;;; 1'den DeişkenSayısı'na kadar olan A değişkeninimize değer atayalım.
(mapcar '(lambda (p)
           (set (read (strcat "A" p))
                (getreal (strcat "\n A" p " değerini giriniz: "))))
        Nmr)

;;; Dikkat edilmesi gereken nokta, read ile strcat sonucunu okuduğumuzdan,
;;; setq değil set fonksiyonu kullanılmalıdır.
Herkese kolay gelsin...




teşekkürler hocam çok aydınlatıcı oldu ayrıca bu kadar zaman sonra cevap yazmanız şaşırttı beni çok yararlı oldu

31.05.2012 07:15    

sagliko
Arkadaşlar;

Aşağıdaki Kodalarla Sectiğim objenin rengini

renk konsolu gelmeden değiştirmesini istiyorum.

Çözemedim

Yardımcı olur musunuz

Şimdiden teşekkürler.


(defun c:rdeg ()
(setq secim (entsel "\nLine Sec"))
(setq renkno (acad_colordlg 1))
(setq secim (car secim))
(setq tekdata (entget secim))
(setq tekdata (append tekdata (list (cons 62 renkno))))
(entmod tekdata)
(princ))

31.05.2012 10:37    

ehya
sagliko





Kod:

(defun c:rdeg ()
(setq secim (entsel "\nLine Sec"))
(setq secim (car secim))
(setq tekdata (entget secim))
(setq tekdata (append tekdata (list (cons 62 1))))
(entmod tekdata)
(princ))

31.05.2012 11:18    

sagliko
Alıntı
ehya :
sagliko





Kod:

(defun c:rdeg ()
(setq secim (entsel "\nLine Sec"))
(setq secim (car secim))
(setq tekdata (entget secim))
(setq tekdata (append tekdata (list (cons 62 1))))
(entmod tekdata)
(princ))





Hocam sagolun
sıkıyoruz ama sizi böyle sorularla
Hakkınızı helal edin.

15.06.2012 06:26    

Travaci
Nette deter.vlx adlı bir lisp var hemen hemen hepinizin eline geçmiştir, lisp çizimi kilitliyor ve hiçbirtürlü çizime müdehale edemiyorsunuz, patlatma,silme, ... Lisp in çalışma mantığı hakkında bilgisi olan varmı ?

02.07.2012 09:05    

Travaci
Current layer ı çekerken nasıl (setq CurLayer (getvar "clayer")) kullanıyorsak current dimstyle, current text style... için nedir ?

02.07.2012 09:23    

ehya
travaci

önceki sorduğun deter.vlx konusunda açıklık kalmasın. Ne olduğunu öğrendin sanırım? :)

diğer soruna gelince,

(getvar "dimstyle")
(getvar "textstyle")

komutları ile aktif olan stil isimlerini öğrenebilirsin.

02.07.2012 09:29    

Travaci
Teşekkürler ; )

02.07.2012 11:10    

Travaci
Kod:

;***** Çizimde Current Style İle Aynı Olan Textleri Seçer *****;
(defun C:Sctstyle (/)
(setq oblmt (getvar "gripobjlimit")) (setvar "gripobjlimit" 32767)
(defun *error* (er) (setvar "gripobjlimit" oblmt) (command "undo" "e") (princ er))
(setq CurStyle (getvar "textstyle"))
(setq ss (ssget "x" (list (cons 7 CurStyle)))) (princ)
(if (= ss nil) (progn (princ "\nÇizimde current style'a ait obje bulunamadı.")))
(sssetfirst nil ss)
(setvar "gripobjlimit" oblmt)(prin1)
)

Peki ben buna text style ı, current text style olan dimensionları da nasıl dahil edebilirim ?

02.07.2012 11:26    

ehya
seçim seti oluşturacaksın.

işlem başlamadan boş bir seçim seti oluştur.

(setq secimseti (ssadd))

sonra nesneleri tek tek ele alıp bu seçim setine ekle..

(setq secimseti (ssadd teknesne secimseti))

döngü sonucunda istediğin tüm nesneler secimseti adlı seçim listesinde olacaktır.

02.07.2012 11:47    

Travaci
Şundan dolayı sordum, dimension dxf kodları arasında style ile ilgili bir kod göremedim ona göre süzgeçliyecektim yoksa ?

02.07.2012 11:55    

ehya
seçilen ölçü nesnesinin stilini 3 nolu DXF kodu ile öğrenebilirsin.

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] > 22 < [25] [30] [35] [40] [42] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.458 saniye - Sorgu: 99 - Ortalama: 0.01473 saniye