30.12.2011 17:46    

kdemirkaya
merhaba,

çalıştığım çizimde tek bir tabakada yüzlerce nokta var. bu noktalar farklı tabakalarda çizilmiş çeşitli çizgiler, yaylar, pline'lar... ile birleştirilmiş. bir noktaya birden fazla farklı eleman birleşmiyor. acaba çizimde tek bir tabakada olan tüm noktaların tabakalarını kendisi ile birleşen çizgi, yay, pline... gibi objelerin bulunduğu tabaka ile değiştirmenin pratik bir yolu varmıdır.

saygılarımla...

31.12.2011 05:30    

map
Merhaba... Tools >>> quick select özelliğinden yola çıkarak nesneleri ,point, line, pline, color no , circle ve daha birçok seçeneklerine göre seçip yeni açacağınız tabakalara atabilirsiniz. Zaten guick select i açtığınzıda Object type kutucuğunda o sayfadaki çizim nesneleri özelliklerine göre ayrıntılı olarak veriliyor yani özelliğini burdan seçeceksiniz. Object type , Properties ve Value pencerelerinde yola çıkarak rahatlıkla çiziminizi tabakalara bölebilirsiniz.iyi çalışmalar.

31.12.2011 08:26    

kdemirkaya
sayın map; cevap verdiğiniz için teşekkürler, ancak ben autocad'de objelerin ayrı ayrı nasıl tabakalandırılacağını sormuyorum.

sorumu tekrar açıklayayım. çizim içerisindeki noktalar sadece tek bir tabakada çizilmiş. bu noktalara bağlı fakat farklı farklı tabakalarda çizgi, yay, pline....objeler var. bu objeler ile bağlantısı olan noktaların tabakasını, bağlantılı olduğu objenin tabakasına değiştirmenin pratik bir yolu varmı? tek tek tabaka değiştirmek yaklaşık 10.000 noktalık bir çizimde çok uzun zaman alabiliyor.

teşekkürler...

31.12.2011 08:43    

ProhibiT
Nokta diye bahsettiğiniz Point objesi mi?

31.12.2011 08:45    

kdemirkaya
evet hocam. point objesi

31.12.2011 09:33    

ProhibiT
Kod:

;|---------------------------------------------------------------------------|
| Belirlenen seçim seti içindeki Point Objelerinin Layer'ını,               |
| ilgili noktada başlayan, biten veya geçen Objenin Layer'ına çevirir       |
| Çizim içindeki tüm Point objelerini seçmek için "aLL" girilmelidir.       |
|   M. Şahin Güvercin - www.autocadokulu.com - 31.12.2011                   |
|---------------------------------------------------------------------------|;
(defun c:PcL (/ pTs L n PvT PnT Lob Lyr)
  (setvar "cmdecho" 0) (command "undo" "group")
  (princ "\n Layer'ları düzenlenecek Point objelerini seçiniz: ")
  (setq pTs (ssget ":s" (list (cons 0 "Point"))) L (sslength pTs) n -1)
  (while (< (setq n (1+ n)) L)
    (setq PvT (entget (ssname pTs n)) PnT (cdr (assoc 10 PvT))
          Lob (ssget "c" PnT PnT '((-4 . "<NOT") (0 . "POINT") (-4 . "NOT>"))))
    (if Lob (progn
              (setq Lyr (assoc 8 (entget (ssname Lob 0)))
                    PvT (subst Lyr (assoc 8 PvT) PvT))
              (entmod PvT) (entupd (cdr (assoc -1 PvT))))))
  (command "undo" "e") (prin1)
)

02.01.2012 12:48    

kdemirkaya
sayın prohibiT hocam;

çok teşekkür ederim, elinize sağlık.fonksiyonu birkaç farklı çizimde denedim. obje sayısının az olduğu çizimlerde sorunsuz çalışıyor. obje sayısının çok fazla olduğu çizimlerde point objesinin tabakasını değiştirmediği, yada farklı tabakaya değiştirdiği olabiliyor. bu gibi durumlarda çizimi parça parça seçmenin dışında önerebileceğiniz başka bir husus varmıdır.

saygılarımla...

02.01.2012 18:14    

ProhibiT
Obje sayısının fazlalığı bir şey değiştirmez. Fonksiyon seçim setindeki point objlerini teker teker ele alarak. Her bir point'in bulunduğu notada, Point objeleri dışında kalan objeleri seçerek bir seçim seti oluşturur. Seçim setindeki ilk objeyi alarak, point objesinin Layer'ını düzenler. "bir noktaya birden fazla farklı eleman birleşmiyor." şeklinde bir ifadeniz vardı. Bu durumda her point için oluşturulan seçim setinde yalnız bir ve bir obje bulunacak, bir objelik seçim setinin ilk objesi seçildiğinde (başka alternatif yok) hedeflenen işlem hatasız tamamlanacaktır.

Çok objenin olduğu çizimlerde bölüm bölüm ele alarak, her bölüm için uygun zoom alarak denemenizi tavsiye ederim.

02.01.2012 23:07    

ProhibiT
Daha önce paylaştığım fonksiyonu deniyorum, ne kadar kalabalık olursa olsun bende problem çıkarmıyor.

Bununla birlikte Extended Visual Lisp kodları kullanarak farklı bir algoritma ile yeniden yazdım.

İlk fonksiyonda Point objesinin bulunduğu noktada Line, PolyLine, LwPolyLine, SpLine ve arc objeleri aranıyordu. Yeni fonksiyonda ise, Çizim içinde bahsedilen obje türlerinin tümü seçilip, uç nokta koordinatları ilgili point objesine eşit olan obje aranıyor. Her nokta için bağlantılı obje bulununcaya kadar karşılaştırma yapıldığından program daha ağır yük altında kalıyor ve daha yavaş çalışıyor. Yeni fonksiyonu kullanırken bilgisayarınız geçici olarak cevapsız (not responded) duruma düşebilir, telaş etmeden sabırla beklemelisiniz.
Kod:

;|---------------------------------------------------------------------------|
| Belirlenen seçim seti içindeki Point Objelerinin Layer'ını,               |
| ilgili noktada başlayan, biten veya geçen Objenin Layer'ına çevirir       |
| Çizim içindeki tüm Point objelerini seçmek için "aLL" girilmelidir.       |
|   M. Şahin Güvercin - www.autocadokulu.com - 31.12.2011                   |
|---------------------------------------------------------------------------|;
(defun c:PcL (/ pTs L n PvT PnT Lob Lyr)
  (setvar "cmdecho" 0) (command "undo" "group")
  (princ "\n Layer'ları düzenlenecek Point objelerini seçiniz: ")
  (setq pTs (ssget ":s" (list (cons 0 "Point"))) n (sslength pTs))
  (while (> (setq n (1- n)) -1)
    (setq PvT (entget (ssname pTs n)) PnT (cdr (assoc 10 PvT))
          Lob (ssget "c" PnT PnT '((-4 . "<NOT") (0 . "POINT") (-4 . "NOT>"))))
    (if Lob (progn
              (setq Lyr (assoc 8 (entget (ssname Lob 0)))
                    PvT (subst Lyr (assoc 8 PvT) PvT))
              (entmod PvT) (entupd (cdr (assoc -1 PvT))))))
  (command "undo" "e") (prin1)
)

;|---------------------------------------------------------------------------|
| Belirlenen seçim seti içindeki Point Objelerinin Layer'ını,               |
| ilgili noktada başlayan veya biten Objenin Layer'ına çevirir.             |
| Çizim içindeki tüm Point objelerini seçmek için "aLL" girilmelidir.       |
|   M. Şahin Güvercin - www.autocadokulu.com - 03.01.2012                   |
|---------------------------------------------------------------------------|;
(defun c:PcL1 (/ pTs oBj n PvT PnT m PiT Lyr)
  (setvar "cmdecho" 0) (command "undo" "group") (vl-load-com)
  (princ "\n Layer'ları düzenlenecek Point objelerini seçiniz: ")
  (setq pTs (ssget ":s" (list (cons 0 "Point"))) n (sslength pTs)
        oBj (ssget "x" (list (cons 0 "*LINE,ARC"))))
  (while (> (setq n (1- n)) -1)
   (setq PvT (entget (ssname pTs n)) PnT (cdr (assoc 10 PvT)) m (sslength oBj))
    (while (> (setq m (1- m)) -1)
      (setq PiT (ssname oBj m))
      (setq cmp (mapcar '(lambda (p1 p2) (if (equal p1 p2 0.00000001) T))
                  PnT (vlax-Curve-getStartPoint (vlax-ename->vla-object PiT))))
      (if (equal cmp (list T T T)) (progn
       (setq Lyr (assoc 8 (entget PiT)) PvT (subst Lyr (assoc 8 PvT) PvT) m -1)
        (entmod PvT) (entupd (cdr (assoc -1 PvT)))))
      (setq cmp (mapcar '(lambda (p1 p2) (if (equal p1 p2 0.00000001) T))
                    PnT (vlax-Curve-getEndPoint (vlax-ename->vla-object PiT))))
      (if (equal cmp (list T T T)) (progn
       (setq Lyr (assoc 8 (entget PiT)) PvT (subst Lyr (assoc 8 PvT) PvT) m -1)
        (entmod PvT) (entupd (cdr (assoc -1 PvT)))))))
  (command "undo" "e") (prin1)
)

03.01.2012 18:00    

kdemirkaya
sayın prohibiT hocam;

ikinci fonksiyon çalıştırıldığında, dediğiniz gibi program daha ağır çalışıyor ancak sonuç mükemmel oldu. tekrar tekrar teşekkürler, elinize sağlık...

saygılarımla...

> 1 <
Copyright © 2004-2022 SQL: 1.059 saniye - Sorgu: 70 - Ortalama: 0.01513 saniye