18.12.2013 10:36    

özkan-wien
tesekkürler travaci.
bi sorum daha var. cm_materiallist listesindeki tüm elemanlari sirayla islemden gecirmek icin repeat mi iyi yoksa
(mapcar (Lambda `(x) mi bunun mapcar li versiyonu nasil olur?
tesekkür ederim



(repeat cm_sayi
(setq eleman (nth n cm_MaterialList))
(setq caa_ara_me (vl-string-search eleman caa_layern 1))
(cm_ara_degis)
(setq n (1+ n))
);repeat

18.12.2013 12:04    

Travaci
Ne yaptığını anlıyamadım :D Daha önce mapcar ve lambda yı da kullanmak kısmet olmadı :) Birde nedir sizdeki bu değişkenlere en uzun ismi verme çabası anlamıyorum :D alttan çizgiler, tireler, dendenler, noktalı virgüller :D bikaç harfli bişi yazsanıza yaa yorulmuyormusunuz :D ben anlamaya çalışırken ölüyom valla.

18.12.2013 13:12    

ehya
bir listeyi sırayla işleme tabi tutarken yapacağın işleme göre ya repeat yad mapcar kullanılır.
çoklu bir işlem söz konusu ise repeat ile yapmak daha mantıklıdır.

ayrıca travaci, değişkenlere isim verirken mantıklı bir isim vermek uzun kodlarda her zaman daha doğrudur :)

18.12.2013 13:19    

Travaci
Attığım taş yerini bulmuş :D

18.12.2013 13:47    

Travaci
halilozcakir


Aşağıdaki gibi 'Lineweight -1) in yanına yazdığım satırı ekleyin.

Kod:

... 'Lineweight -1) (vlax-put-property (vlax-ename->vla-object PvT)
    'Linetype "ByLayer")

18.12.2013 14:07    

özkan-wien
degiskenlere uzun isim vermeyi ehya hocamdan ögrendim, ben de biraz sistematik olsun diye basina komut adi
"caa" mesela sonra secim setiyse "sec" sonra ilk elemansa "ilk" koyuyorum .
caa_sec_ilk vb. gidiyo iste öyle. :-)

18.12.2013 14:41    

halilozcakir
'Lineweight -1) 2 yerde geçiyor hangisine araya mı ekleyeceğiz (...) 3 noktayı silelim mi
yada en alt satıra mı ekleyeceğiz ?
tamamdır hepsini denedim oldu. sadece ) den sonrasını alıp araya yapıştırdım.

halilozcakir (18.12.2013 15:17 GMT)

18.12.2013 15:15    

Travaci
Her ikisin sonunada koy. Yukarıdaki blocklar için aşağıdaki dışarıdakiler için.

18.12.2013 15:18    

halilozcakir
eyvallah üstad.

18.12.2013 18:58    

ProhibiT
Kod:

;|===========================================================================|
| LwLt2ByL: LineWeight LineType to ByLayer                                  |
|          Çizim içindeki, bLock tanımları ve bLock referansları da dahil   |
|          tüm çizim objelerinin LineWeight ve LineType özelliklerini       |
|          ByLayer yapar.                                                   |
|          Author: M. Şahin Güvercin - www.cizimokulu.com - 18.12.2013      |
|---------------------------------------------------------------------------|;
(defun c:LwLt2ByL (/ bLk oLdErr PvT)
  (defun Hata (er oLdErr) (princ (strcat "\n" er)) (command "_.undo" "end")
    (command "_.U") (setq *error* oLdErr Hata nil) (princ))
  (setq oLdErr *error* *error* Hata) (*push-error-using-command*)
  (setvar "cmdecho" 0) (command "_.undo" "group") (vl-load-com)
  (setq bLk (tblnext "bLock" T))
  (while bLK (setq PvT (tblobjname "bLock" (cdr (assoc 2 bLk))))
    (while (setq PvT (entnext PvT))
      (vlax-put-property (vlax-ename->vla-object PvT) 'Lineweight -1)
      (vlax-put-property (vlax-ename->vla-object PvT) 'Linetype "ByLayer"))
    (setq bLk (tblnext "bLock"))) (setq PvT (entnext))
  (while PvT (vlax-put-property (vlax-ename->vla-object PvT) 'Lineweight -1)
           (vlax-put-property (vlax-ename->vla-object PvT) 'Linetype "ByLayer")
    (setq PvT (entnext PvT)))
  (command "_.undo" "end") (setq *error* oLdErr Hata nil) (princ))

halilozcakir için; Block tanımları altında yer alan nesneler de dahil tüm çizim nesnelerinin Lineweight ve Linetype özelliklerinin her ikisini birden ByLayer yapan Lisp fonksiyon.

Travacı ve ilgi duyan arkadaşlarımız için; Hata yakalama işlevi içinde command kullanmak için uygulanacak yöntemi de örnekledim.

işin özü, *error* genel hata işlevini oLdErr isimli değişkene atayarak sakladık.
*push-error-using-command* ile girişteki hata durumunu, command kullanmak şartıyla sabitledik.
Böylece Hata isimli Hata yakalama işlevi içinde command işlevini kullanabiliyoruz.
Kodlarımızı yazarken, gerek normal çıkışta, gerekse hatalı çıkışta error state (hata durumunu) eski haline getirmeyi, genel hata yakalama işlevi olan *error*'ı geri yüklemeyi. Hatalı çıkışta (command "_.U") ile hatalı işlemleri geri almayı unutmuyoruz.

Bu konuyu Erkan Travacı arkadaşımızla özel mesajla ele almıştık. Benim yazdıklarım da dahil burada paylaştığımız, bazı hata yakalama işlevi içinde command kullanılan Lisp kodları bu bakımdan hataya sebep olurlar. Bu tür hatayla karşılaşan arkadaşlarımız bildirirlerse bu hatalı kodları düzeltmekte fayda var.

18.12.2013 19:26    

Travaci
Teşekkürler :yes

20.12.2013 08:40    

özkan-wien
arkadaslar Günaydin ve herkese hayirli isler,
Lisp icinde (command "_.layer" ..... dan baska layer acma kapama kodu yok mu?
vla- ile acip kapatamazmiyiz. (command i mümkün mertebe kullanmamaya calisacagim. tesekkürler

20.12.2013 09:56    

Travaci
özkan-wien


Kod:

(if (not (tblsearch "Layer" "KESIK"))
   (entmake (list
      (cons 0 "Layer")
      (cons 100 "AcDbSymbolTableRecord")
      (cons 100 "AcDbLayerTableRecord")
      (cons 2 "KESIK")
      (cons 6 "HIDDEN2")
      (cons 62 20)
      (cons 70 0)
      (cons 290 1)
      (cons 370 0)
   )
)


Layer açma için örnekledim ama ? Açıp kapama derken on off mu kastettin.

Travaci (20.12.2013 10:07 GMT)

20.12.2013 10:24    

özkan-wien
evet "on" "off"

20.12.2013 10:26    

ProhibiT
Daha önce de bahsetmiştik; Layer, AutoCAD Tables Object'tir. Drawing objects (çizim nesneleri) ile Tables Objects (Tablo nesneleri) erişim ve düzenlenmeleri bakımından birbirinin aynıdır.

(vlax-dump-object (vlax-ename->vla-object (tblobjname "Layer" "0")))
şeklinde bir ifade ile her AutoCAD çiziminde mutlaka var olan "0" Layer'ının özelliklerini (properties) listelediğinizde, orada görülen ve read-only olmayan her türlü özelliği vlax-get-property işleviyle alabilir, vlax-put-property işleviyle de değiştirebilirsiniz.

Örnek olarak "0" Layerını ele aldığımızda;
Kod:

(vlax-put-property
  (vlax-ename->vla-object (tblobjname "Layer" "0"))
  'LayerOn 0)
ifadesiyle 0 Layer'ını off yapabilirsiniz.
Kod:

(vlax-put-property
  (vlax-ename->vla-object (tblobjname "Layer" "0"))
  'LayerOn -1)
ifadesiyle de 0 Layer'ını on yapabilirsiniz.

Bu yöntemle Layer'ı on/off yaparken, söz konusu Layer'ın "Current Layer" olup olmamasının bir önemi yoktur. Bu nedenle kullancıya sürpriz yapmamak için dikkat edilmelidir. Current Layer'ı bu yöntemle freeze ederseniz gariban kullanıcı çizdiklerinin nereye gittiğini arar durur. :)

ProhibiT (20.12.2013 10:44 GMT)

20.12.2013 10:58    

özkan-wien
hocam tesekkür ederim. "command" kullandigim bazi lispler DCL de son komutu tekrarlattiriyor. mesela
(command "_.layer" ..... "") sondaki cift tirnak fazladan enter görevi görüyor. o yüzden böyle bi yola basvurma ihtiyaci hissettim. artik böyle acip kapatcaz. tesekkür ederim.

özkan-wien (20.12.2013 11:23 GMT)

20.12.2013 13:16    

ProhibiT
Çizim nesnesi seçerek, nesnenin bulunduğu Layer'ı off yapmak için;
Kod:

(vlax-put-property
  (vlax-ename->vla-object
    (tblobjname "Layer"
      (cdr (assoc 8 (entget (ssname (ssget ":S") 0))))))
  'LayerOn :vlax-false)
kullanılabilir.

ProhibiT (20.12.2013 13:22 GMT)

21.12.2013 11:06    

pulp fiction
Kod:

(defun c:tttt (/)
   (vl-load-com)
   (setq p (ssget (list (cons 0 "*TEXT"))) IDs "%<\\AcExpr (" L (sslength p))
   (while (not (minusp (setq L (1- L))))
      (setq IDs (strcat IDs "%<\\AcObjProp Object(%<\\_ObjId "
         (itoa (vla-get-ObjectID (vlax-ename->vla-object (ssname p L))))
         ">%).TextString>%+")))
   (setq IDs (strcat (substr IDs 1 (1- (strlen IDs))) ")>%")
      PvT (car (entsel "\nPoz'u Seçiniz: "))) 
   (while (not(and(=(cdr(assoc 0(entget(setq PvT(entnext PvT)))))"ATTRIB")
      (=(cdr(assoc 2(entget PvT)))"CARPAN"))))
   (setq PvT (entget PvT)
      PvT (subst (cons 1 IDs) (assoc 1 PvT) PvT) PvT (entmod PvT)
      PvT (entupd (cdr (assoc -1 PvT))) PvT (command "_.UpdateFieLd" PvT ""))
      (prin1))


böyle bir lispim var. tek tek değilde texte tıkladıktan sonra alan seçip ordaki bütün ''CARPAN''ların değişmesini istiyorum. Dünden beri uğraşıyorum beceremedim bi türlü.

21.12.2013 18:13    

ProhibiT
:O_o

23.12.2013 06:46    

pulp fiction
üstad anlatamadım galiba :=)


mesela text'e 3 yazıyor ona tıklıyorum. attribute e tıkladığımda attribute nin içindeki CARPAN tag i otomatik olarak değişiyor. ama ben bunları her seferinde tek tek yapmak zorunda kalıyorum. texti tıkladıktan sonra alan seçerek o alandaki attribute CARPAN taglerini hepsini değiştirmem mümkün mü?


umarım anlatabilmişimdir...

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] > 51 < [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.394 saniye - Sorgu: 99 - Ortalama: 0.01408 saniye