19.04.2008 10:01    

k005
Mrb arkadaşlar;

Renk numarasına göre seçim seti oluşturan bir lisp gerekli.

örn;

klavyeden 3 yazdığımda, çizim içersindeki rengi 3 olan bütün objeleri (layerlı olanlar dahil) seçsin.

şimdiden teşekkürler..

ehya (19.04.2008 15:17 GMT)

19.04.2008 14:17    

ehya
Kod:

(setq katman (getstring t "\nKatman adı:"))  ;;katman adı sorar
(setq secim (ssget "x" (list (cons 8 katman))))  ;;; bu satır tüm ekranı seçer
(setq secim (ssget (list (cons 8 katman))))  ;;; bu satır ise seçtiğin nesneler içinde arama yapar
(sssetfirst nil secim)   ;; seçili halde ekranda gösterir



"secim" adı altında seçim seti oluşturuldu... buna göre işlem yapabilirsin...

19.04.2008 14:37    

k005
kod için teşekkürler ehya. ama bu katman adına göre seçim yapıyor. ben renk no ya göre seçim yaptırmak istemiştim.

19.04.2008 15:17    

ehya
Pardon yaa.
hızlı bi şekilde okuyunca katman olarak algıladım... Bunu renk olarak yapmak layer harici kolay.
Yukarıdaki kod'da yer alan 8 yerine 62 olmalı.
Ancak layer içinde bu numaraya ait olanları tespit ettirmek bi katman döngüsü gerektirir... Hemen yazamam ama benden önce kimse yazmaz ise ilk fırsatta yazarım :)

19.04.2008 19:21    

özkan-wien
Ehyanin yazdigi lisp senin isini görmesi lazim. 3 e basinca, bütün katmanlarda rengi 3 olan objeleri seciyor.

(defun c:3 ()
;(setq katman (getstring t "\nKatman adı:")) ;;katman adı sorar
(setq secim (ssget "x" (list (cons 62 3)))) ;;; bu satır tüm ekranı seçer
;(setq secim (ssget (list (cons 8 katman)))) ;;; bu satır ise seçtiğin nesneler içinde arama yapar
(sssetfirst nil secim) ;; seçili halde ekranda gösterir
(princ))

19.04.2008 19:30    

ehya
arkadşaın istediği katman'a göre aratmak değil.. 3 dediği katman değil, renk..
3 dediğinde rengi 3 olan ve layer tablosunda rengi 3 renginde olan tüm katmanları seçtirmek..

bak sende yanlış anlamışsın :)

20.04.2008 05:55    

k005
Alıntı
özkan-wien :
Ehyanin yazdigi lisp senin isini görmesi lazim. 3 e basinca, bütün katmanlarda rengi 3 olan objeleri seciyor.

(defun c:3 ()
;(setq katman (getstring t "\nKatman adı:")) ;;katman adı sorar
(setq secim (ssget "x" (list (cons 62 3)))) ;;; bu satır tüm ekranı seçer
;(setq secim (ssget (list (cons 8 katman)))) ;;; bu satır ise seçtiğin nesneler içinde arama yapar
(sssetfirst nil secim) ;; seçili halde ekranda gösterir
(princ))




Arkadaşım işimi görüyor.. ama Layer ismini bildiğim taktirde... Renge göre seçerse standart bir seçim oluşturmuş olacağız.. ok.

20.04.2008 10:43    

ehya
istediğin lisp aşağıda.... renk numarasını girdikten sonra istediğin çizimi seç. seçilen nesnelerin içinde ister sadece renk değişimi olsun ister layer'da belirtilmiş olsun. hepsini seçim setine alır.


Kod:

(defun c:cs ()
(setvar "modemacro" "Archme Design --> EhYa <--")
(if (= cs_renk nil)
  (setq cs_renk 1))
  (setq cs_r (getint (strcat "\nRenk numarasını girin :< " (rtos cs_renk 2 0) " >:")))
  (if (= cs_r nil)
    (setq cs_r cs_renk))
  (setq cs_renk cs_r)
  (princ "\nSeçim yapın:")
  (setq cs_secim (ssget))
  (if (= cs_secim nil)
    (progn)
    (progn

      (setq cs_add (ssadd))
      (setq cs_say (sslength cs_secim))
      (setq cs_c 0)
      (while (< cs_c cs_say)
(setq cs_tek (ssname cs_secim cs_c))
(setq cs_62 (cdr (assoc 62 (entget cs_tek))))
(if (= cs_62 nil)
  (progn
    (setq cs_lay (cdr (assoc 8 (entget cs_tek))))
    (setq cs_layy (tblsearch "layer" cs_lay))
    (setq cs_layy_r62 (cdr (assoc 62 cs_layy)))
    (if (/= cs_layy_r62 cs_renk)
      (progn)
      (progn
(setq cs_add (ssadd cs_tek cs_add)))))
  (progn
    (if (/= cs_62 cs_renk)
      (progn)
      (progn
      (setq cs_add (ssadd cs_tek cs_add))))))
(setq cs_c (+ cs_c 1)))))
  (sssetfirst nil cs_add)
  (princ))

20.04.2008 10:54    

k005
Ehya çok teşekkürler. sağolasın.. eyvallah..

> 1 <
Copyright © 2004-2022 SQL: 1.091 saniye - Sorgu: 66 - Ortalama: 0.01654 saniye