03.03.2009 08:03    

k005
merhaba arkadaşlar;

Seçtiğim text block sa explode uygulayıp ondan sonra seçsin.. değilse normal seçim yapsın.

bununla ilgili bir örnek kod verirseniz sevinirim. teşekkürler. herkese kolay gelsin..

03.03.2009 08:14    

ehya
seçim yapsın derken; zaten seçimde mutlaka hafızaya alacaktır.
İşlemin devamı ne olacak? Çoklu seçim mi tek seçim mi??
Net bi bilgi verirsen yardımcı olmaya çalışırım...

03.03.2009 08:29    

k005
Alıntı
ehya :
seçim yapsın derken; zaten seçimde mutlaka hafızaya alacaktır.
İşlemin devamı ne olacak? Çoklu seçim mi tek seçim mi??
Net bi bilgi verirsen yardımcı olmaya çalışırım...




tek seçim olacak. ehya. çoklu değil. daha sonra başka bir lispe entegre edeceğim... teşekkür..

03.03.2009 08:47    

ehya
Seçilen yazı blok mu değil mi bunu kontrol edemezsin. Çünkü bir bloğun için birden fazla nesne olacağını unutmamak gerekir.
Aşağıdaki kodlama, yazı veya blok haricinde bir nesne ise, seçimi tekrar yapmanı ister. Yazı ise sonuç "ent" adı altında saklanır. Blok ise, bloğu patlatır. ve yine seçim hafızasına "ent" adıyla saklanır. Bloğunun tek nesne olabileceğini düşünerek blok içinden tek nesne seçilmesini sağladım.


Kod:

(setq n:nil nil)
(while (= n:nil nil)
  (setq ent (car (entsel "\nSeçim yap:")))
  (if (= ent nil)
    (progn
      (if (= (getvar "errno") 7)
(progn
  (setq n:nil nil)))
(if (= (getvar "errno") 52)
(progn
  (setq n:nil t))))
    (progn
     
  (setq tani (cdr (assoc 0 (entget ent))))
  (if (and (/= tani "INSERT")(/= tani "TEXT"))
    (progn
      (princ "\nSeçilen nesne Blok ya da Yazı değil...!!!")
      (setq n:nil nil)))
  (if (= tani "INSERT")
    (progn
      (command "_.explode" ent)
      (setq ent (entlast))
      (setq n:nil t)))

  (if (= tani "TEXT")
    (progn
      (setq n:nil t)))
  )))

03.03.2009 09:46    

k005
himm. tamam ehya. Entegre etmeye çalışacağım. oldu galiba.. çok teşekkür ederim..
*******************************************************************

(defun c:ff ()
(setvar "cmdecho" 0)
(SETVAR "TEXTSTYLE" "OLC")
(command "style" "OLC" "twdin" "0.00" "0.8" "" "" "")
(Setq pft1 (getvar "dimtxt")) ; Standart yazı yüksekliğim(0.3cm)
(setq pftol (/ pft1 0.3)) ; pafta ölçeğini belirliyorum. (0.3*dimtxt = ölçek)


(setq n:nil nil)
(while (= n:nil nil)
(setq ent (car(entsel "\nSeçim yap:")))
(if (= ent nil)
(progn
(if (= (getvar "errno") 7)
(progn
(setq n:nil nil)))
(if (= (getvar "errno") 52)
(progn
(setq n:nil t))))
(progn

(setq tani (cdr (assoc 0 (entget ent))))
(if (and (/= tani "INSERT")(/= tani "TEXT"))
(progn
(princ "\nSeçilen nesne Blok ya da Yazı değil...!!!")
(setq n:nil nil)))
(if (= tani "INSERT")
(progn
(setq ent (command "_.explode" ent))
(setq ent (entlast))

(setq n:nil t)))

(if (= tani "TEXT")
(progn
(setq n:nil t))))))

(setq Entc1 (entget ent)) <----- bu kısımda bir hata var gibi. ama anlayamadım tam olarak...
(setq texth (cdr (assoc 40 entc1)))
...................
...................
...................
yazı block değilse normal çalışıyor.. sorun yok.. lisp devam ediyor..
seçtiğim yazı block durumunda ise patlatıyor, bu hatayı alıyorum ve lisp sona eriyor. Seçim yap:; error: bad argument type: lentityp nil

k005 (04.03.2009 06:21 GMT)

05.03.2009 11:58    

ehya
hatan şu.
kodlamayı yaparken sıralama hatasından kaynaklanıyor.
Lispte hata veren yer, seçim yapıldığında değil, yapılmadığında kaynaklanıyor. Yani sağ tuş yapıldığında komut bitmesi gerekirken hata fonksiyonunu veriyor.
Sebebi ise şu. While döngüsü içinde iken, seçim yapılmasını istedim. Seçim yok ise, neden olmadığını sorgulattım. Yani seçimi sağ tuşla mı sol tuşla mı seçildiğini sordum. Sol tuş ile olsaydı komut tekrarlayacaktı. sağ tuşta ise komutun bitmesi gerekirdi ki öyle devam ediyordu. Ancak while döngüsü dışına sen komut yazmışsın. Bu kodlama da hatalı dediğin yer. Buradaki kodlama hatalı değil. yeri yanlış. Bu kod'ları while döngüsü dışına değil, while döngüsü içinde hangi nesne seçiminden sonra gelecek ise onun devamına yazmalısın.

05.03.2009 14:58    

k005
Tamam Ehya yaptım. oldu... çok teşekkür hocam.. :)
senin yazmış olduğun kodda ki son satırda bulunan parantezlerin hata diye tarif ettiğim kısımda birleştirdim..,

işlem tamam. (* açıklamanın çok faydası oldu.)

> 1 <
Copyright © 2004-2022 SQL: 0.886 saniye - Sorgu: 63 - Ortalama: 0.01407 saniye