27.01.2012 11:55    

ehya
bir koordinatta bulunan bir arc nesnesini seçmek için aşağıdaki kodu kullan

Kod:

(ssget "c" hs5_2 hs5_2 '((0 . "ARC")))


bu koordinatta bir arc nesnesi varsa seçim setine eklenir. Yok ise sonuç nil dir.

27.01.2012 14:25    

Travaci
(defun c:sss ()
(setq lay (ssget (list (cons 8 "AKS_MAVİ"))))
(command "draworder" lay "" "B" "")
(princ)
)

İşlemi doğru yaptığı halde unknow command uyarısı veriyor neden ?

Birde AKS_MAVİ kısmını nasıl değişken yapabilirim ? Neyi seçersem onunla ilgili tüm layerları alta atmak istiyorum

Travaci (27.01.2012 14:32 GMT)

27.01.2012 14:43    

ehya
Travaci




Kod:

(defun c:sss ()
(setq ent (entsel "\nNesneyi seçin:"))
(setq katman (cdr (assoc 8 (entget (car ent)))))
(setq lay (ssget (list (cons 8 katman))))
(command "draworder" lay "" "B")
(princ)
)

27.01.2012 14:59    

Travaci
Ehya abi teşekkür ederim eline sağlık.

27.01.2012 18:20    

mayyaq61
(defun c:a()
(setq n (getpoint "\n Nereye Çizilsin:")
saa (getreal "\n sAA GİRİN:")
e (getreal "\n E GİRİN:")
k (getreal "\n k GİRİN:")
saa_düz (/ saa 2.0000)

zm1 (polar n (angtof "180.0")(+ 5 saa_düz))
zm1_2 (polar zm1 (angtof "90.0")(+ 5 saa_düz))
zm2 (polar n (angtof "0.0")(+ 5 saa_düz))
zm2_2 (polar zm2 (angtof "270.0")(+ 5 saa_düz))

ex1 (polar n (angtof "270.0")saa_düz)
n1 (polar n (angtof "-60.0")saa_düz)
n2 (polar n (angtof "-30.0")(/ e 2.0000))
c1 (polar n (angtof "270.0")(/ e 2.000))
a1 (polar n (angtof "270.0")saa_düz)
c2 (polar n (angtof "0.0")(/ e 2.000))
d1 (polar n (angtof "-30.0") saa_düz)
)
(command "_polygon" 6 n "c" saa_düz)
(setvar "osmode" 0)
(command "._zoom" "_window" zm1_2 zm2_2)
(command "._line" n n1"")
(command "_extend" "" n1 "")
(setq hs (entlast))
(setq hs2 (cdr (assoc 11 (entget hs))))
(command "._erase" hs"")
(command "._circle" n "d" e"")
(setq cc (entlast))
(command "_trim" cc"" hs2"")
(command "_trim" "" c1"")
(command "_trim" "" n2"")
(command "._explode" ex1"")
(ssget "c" a1 a1 '((0 . "LINE")))
(setq a2(entlast)
a3 (cdr (assoc 11 (entget a2)))
a4 (polar a3 (angtof "270.0")5)
c3 (polar c2 (angtof "270.0")(+ 5 saa_düz))
c4 (polar c3 (angtof "180.0") e)
c5 (polar c3 (angtof "270.0") k)
c6 (polar c4 (angtof "270.0") k)
n_1(polar n (angtof "-30.0") saa_düz)
zm3 (polar zm2_2 (angtof "270.0")(+ 5 saa))
zm4 (polar zm3 (angtof "180.0")(+ 5 saa)))
(command "._zoom" "_window" zm4 zm2)
(command "._line" c3 c4 "")
(command "._line" c3 c5 "")
(command "._line" c4 c6 "")
(command "._line" c5 c6 "")
(command "._circle" n "d" saa"")
(setq c_d (entlast))
(setq c_1 (polar n (angtof "0.0")saa_düz)
c_2 (polar c_1 (angtof "270.0")(+ 5 saa_düz))
c_3 (polar c_2 (angtof "-30.0")0.10))
(command "._line" c_3 c_2 "")
(command "_extend" "" c_3 "")
(setq c_23_ex (entlast)
c_23_ex_1 (cdr (assoc 11 (entget c_23_ex))))
(command "._erase" c_d"")
(ssdel a1)
(ssget "c" d1 d1 '((0 . "LINE")))
(setq f3 (cdr (assoc 11 (entget d1))))
(command "._line" n f3 "")
(princ)

)
; error: too few arguments
Hocam D1 kordinantinda line çizgisi var. sectirip dfx 10 11 kordinatini almak istiyorum bi türlü yapamadım.
(ssget "c" a1 a1 '((0 . "LINE")))
(setq a2(entlast) Burda sorun yaşamadım. alta sorun cıktı Bu tarz da yapsam hata veriyor..

28.01.2012 07:24    

ehya
ssget ile seçim yaptığında sonuç bir seçim setidir. Bu seçim setinde birden fazla eleman olabilir. Bu yüzden elemanları ayıklamalısın.
Ben bir tane nesne var düşüncesiyle uygun bir kod yazıyorum. Ayrıca ssget seçimlerini bir değişken adı altında kaydettir. Seçimde kolaylık olur.


Kod:

(setq ssec1 (ssget "c" d1 d1 '((0 . "LINE")))
        ssec2 (ssname sssec1 0)
        ssec10 (cdr (assoc 10 (entget ssec2)))
        ssec11 (cdr (assoc 11 (entget ssec2)))
)

28.01.2012 09:29    

mayyaq61
Select objects: 1 found

Select objects:
Command: ; error: bad argument type: lselsetp nil

(setq z (entlast)
z1(cdr (assoc 11 (entget z))))
(command "._erase" z"")
(setq ssec1 (ssget "c" z1 z1 '((0 . "LINE")))
ssec2 (ssname sssec1 0)
ssec11 (cdr (assoc 11 (entget ssec2))))

yaptım.:S

28.01.2012 09:49    

ehya
Bir çizgi çizdirmişsin. Bunu seçtirip bitiş koordinatını hesaplatmışsın. Ardından bu nesneyi silmişsin. Silinen noktada tekrar line nesnesini arattırıyorsun? Bu nasıl olacak?

Ayrıca lisp yazmak işte burada başlar. Hatalara karşı fonksiyon geliştirmek gerekir. Bu noktada çizgi yok ise bitsin yada şu işlemi yapsın demek gerekir. Neyse bu işin detaylı kısmı. Yukarıda sorunun ne olduğunu söyledim. Kontrolünü yaparsın.

28.01.2012 11:36    

mayyaq61
[URL=http://imageshack.us/photo/my-images/811/ekranalntsc.png/][IMG]http://img811.imageshack.us/img811/4161/ekranalntsc.png[/IMG][/URL]

(defun c:a()
(setq ag_mrkz (getpoint "\n Nereye Çizilsin:") ;;başlangıc kordinantı (aynı zamanda altıgen merkez noktası.)
saa (getreal "\n sAA GİRİN:") ;;Anaktar ağızı.Dairenin Çevresine çizilecek olan altıgenin.daire çapı
e (getreal "\n E GİRİN:") ;altıgenin köşelerindeki sivri noktaların kesilmesi için daire.
k (getreal "\n k GİRİN:") ;cıvata yüksekliği
saa_düz (/ saa 2.0000) ;işlem kolaylığı için saa yr çapı.

zm1(polar ag_mrkz(angtof "180.0")(+ 5 saa_düz)) ;Sola doğru yarıcp +5 değerindeki noktanın kordinantı
zm1_2(polar zm1(angtof "90.0")(+ 5 saa_düz)) ;Soldakı kord yukar +5 yrcp değerindeki noktanın kordinantı
zm2(polar ag_mrkz(angtof "0.0")(+ 5 saa_düz)) ;Sağa doğru yarıcp +5 değerindeki noktanın kordinantı
zm2_2(polar zm2(angtof "270.0")(+ 5 saa_düz)) ;Sağdaki kord aşağı +5 yrcp değerindeki noktanın kordinantı

k_ag_trm_h (polar ag_mrkz(angtof "-60.0")saa_düz) ;Altıgen uc noktasının kord bulmak için merkezden yr cp kadr .
k_g_exp_h (polar ag_mrkz(angtof "270.0")saa_düz) ;Altıgenin alt bulmak için kor.
k_da_e_trm1(polar ag_mrkz(angtof "-30.0")(/ e 2.0000)) ;E değerindeki dairenin trimleme nok kor
k_da_e_trm (polar ag_mrkz(angtof "270.0")(/ e 2.000)) ;E değerindeki dairenin trimleme nok kor

)
(command "_polygon" 6 ag_mrkz "c" saa_düz) ;altıgeni çiz.
(setvar "osmode" 0)
(command "._zoom" "_window" zm1_2 zm2_2) ;verilen değerlerde zom yap
(command "._line" ag_mrkz k_ag_trm_h"") ;uc noktasına çizgi çiz..
(command "_extend" "" k_ag_trm_h "") ;Tam uc noktasına gelmediği için uzat çizgiyi
(setq sc_ag_trm_h (entlast) ;sec
sc_ag_trm_h_11 (cdr (assoc 11 (entget sc_ag_trm_h)))) ;bitiş kor al
(command "._erase" sc_ag_trm_h"") ;çizgiyi sil işim bitti.
(command "._circle" ag_mrkz "d" e"") ;E değerinde daire çiz.
(setq sc_da_e (entlast)) ;sec
(command "_trim" sc_da_e"" sc_ag_trm_h_11"") ;daire seç onayla altıgen uc kor trimle.
(command "_trim" "" k_da_e_trm1"") ;e trim
(command "_trim" "" k_da_e_trm"") ;trim.
(command "._explode" k_g_exp_h"") ;altıgeni patlat.

(princ)
)
Buraya kadr sıkıntım yok .Altıgen alt çizgiyi sectirip dfx kodunu almak istiyorum.(k_g_exp_h)Burda kordinantı..
; error: too many arguments.

; error: bad argument type: lselsetp nil

mayyaq61 (28.01.2012 12:00 GMT)

28.01.2012 11:55    

ehya
Altıgen'i patlatmışsın. toplam 6 nesne olur. dxf kodlarını tektek almalsıın. Ayrıca hangi kodlarını alacaksın?

28.01.2012 12:00    

mayyaq61
BU en alta bir çizgi ver resimde paylaştıgım onun bitiş ve başlangıc noktalarını istiyorum

28.01.2012 12:25    

ehya
bu şekilde tespit etmen için ufak bi algoritma kurman gerekecek. Bunun için bir kod yazarım ancak şuan değil. Yoğunum.
Aslında bu işin doğrusu Altıgen'i otomatik çizdirmek yerine tüm noktalarının koordinatını hesaplatmaktır. Bu sayede istediğin noktaya hakim olur ve istediğin çizgiyi işleme tabi tutabilirsin.

28.01.2012 13:47    

mayyaq61
Evt hocam . Neden gelmedi ki aklıma altgen çizdirir kor hesaplatırım siler line çizdirim..Teşekürler hocam.


Cİvata çizen lisp tamamladım hocam çok sağolun...

mayyaq61 (28.01.2012 23:20 GMT)

29.01.2012 20:38    

mayyaq61
(defun c:a ()
(setq a (getpoint "\n NEREYE ÇİZİLSİN:")
b(getreal "\n B girin")
c(getreal "\n C girin")
a1(polar a(angtof "90.0"))
(command "._circle" a "" 2"")
(setq deneme(entlast))

)

;;B'nin C ye bölümü kadar. Circle nesnesini kopyalamak istiyorum..yani B= 10 sa C=2 ise Çıkan sonuc 5 kadar circle yukarı aşağa ve ya yana istediğim yöne istediğim aralıkta kopyalamak istiyorum.Ama bi türlü yapamadım :S

29.01.2012 21:22    

ehya
Aradığın böyle birşey mi?

Kod:

(defun c:ab ()
  (setq a (getpoint "\nYerleşim yeri:")
b (getreal "\nA değeri:")
c (getreal "\nB değeri:")
bl (fix (/ b c))
ar (getreal "\nAralık mesafesi:")
cap (getreal "\nDaire çapı:")
cc 1)
    (entmake (list (cons 0 "CIRCLE")
   (cons 100 "AcdbEntity")
   (cons 100 "AcdbCircle")
   (cons 40 cap)
   (cons 10 a)))
  (setq sag a sol a yukari a asagi a)
  (repeat bl
    (setq sag (polar sag 0 ar)
  sol (polar sol pi ar)
  yukari (polar yukari (/ pi 2.0) ar)
  asagi (polar asagi (* pi 1.50) ar))
    (entmake (list (cons 0 "CIRCLE")(cons 100 "AcdbEntity")(cons 100 "AcdbCircle")(cons 40 cap)(cons 10 sag)))
    (entmake (list (cons 0 "CIRCLE")(cons 100 "AcdbEntity")(cons 100 "AcdbCircle")(cons 40 cap)(cons 10 sol)))
    (entmake (list (cons 0 "CIRCLE")(cons 100 "AcdbEntity")(cons 100 "AcdbCircle")(cons 40 cap)(cons 10 asagi)))
    (entmake (list (cons 0 "CIRCLE")(cons 100 "AcdbEntity")(cons 100 "AcdbCircle")(cons 40 cap)(cons 10 yukari)))
    )(princ))

29.01.2012 23:52    

mayyaq61
Eyha hocam aradığım bu .Yanlız Ben kodları ordan çekip döngü oluşturamadım. sadece yukarı olarak sadeleştirebilir misiniz.Ne anlamı olduklarıınıda açıklarsanız daha iyi olur.

mayyaq61 (31.01.2012 13:44 GMT)

01.02.2012 13:54    

Travaci
Arkadaşlar bir dinamik bloğun dxf kodunu almaya çalıştığımda (2.*U103) gibi değişken bir kod çıkıyor bunu nasıl okutabilirim.
Daha açık yazıyım elimde bir metraj lisp i var.Attribut un ismi "poz" ben bu attrıbute dınamıklık ozellııgı ekledıgımde ısmı (2.Poz) değilde (2.*U103) gibi bir kod veriyor,metraj lisp inde (2.poz) u oku diyor ama ben (2.değişken) yapmak istiyorum mümkünmüdür ?

Travaci (01.02.2012 14:43 GMT)

01.02.2012 14:53    

ehya
mayyaq 61




mesajı düzenlediğinde söylersen en azından mesajı görmüş olurum.

Lispin anlamına gelince,

A değerini B değerine böldüm. Sonucu fix yaparak küsüratını attım.
Referans noktaya bir circle çizdirdim.
Ardından A değerinin B değerine bölüm kadar repeat ile döngü oluşturdum. Sonuç 5 ise repeat içindeki işlemler 5 defa tekrarlandı.
Her tekrar yaparken refereans noktayı ara mesafe kadar 4 yana öteledim.

01.02.2012 14:54    

ehya
Travaci




dxf kodunu çekerken biraz daha basit yollara başvurabilirsin.

visuallisp kodları işine yarar..

Kod:

(vl-load-com)
(setq ent (car (entsel "\nBlok seç:")))
(setq data (vlax-ename->vla-object ent)
      blok-adi (vla-get-effectivename data))

01.02.2012 15:08    

Travaci
Teşekkürler Ehya
Bu sitede niye bir teşşekür butonu yok : \ teşekkürlerle form doluyor. : (

Kod:

;Seçilen yazıları hizza
(defun c:hz ( / obje n i hizanok10 yazinok10 hizanok11 yazinok11 ename elist yon)
(princ "\nHizalanacak Yazıları Seçiniz :")
     (setq obje (ssget '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (0 . "INSERT") (0 . "ATTDEF") (-4 . "OR>"))))
  (if obje
    (progn
     (setq n (sslength obje))
     (setq i 0
               hizanok10 (cdr (assoc 10 (entget (ssname obje 0))))
               hizanok11 (cdr (assoc 11 (entget (ssname obje 0))))
     )
     (initget "X Y")
     (setq yon (getkword "Hizalama Yönü ( X / Y )  <Y> ?"))
     (command "undo" "begin")
     (repeat n
            (setq ename (ssname obje i)
                          elist (entget ename)
                yazinok10 (cdr (assoc 10 elist))
                yazinok11 (cdr (assoc 11 elist))
            )
            (if yon
                 (progn
                       (setq hizanok10 (list (car hizanok10) (cadr yazinok10))) ;;; x yönünde hizalama
                       (if yazinok11 (setq hizanok11 (list (car hizanok11) (cadr yazinok11))))
                 )
                 (progn
                       (setq hizanok10 (list (car yazinok10) (cadr hizanok10))) ;;; y yönünde hizalama
                       (if yazinok11 (setq hizanok11 (list (car yazinok11) (cadr hizanok11))))
                 )
            );_if
            (setq elist  (subst  (cons 10 hizanok10) (assoc 10 elist) elist))
            (if yazinok11 (setq elist  (subst  (cons 11 hizanok11) (assoc 11 elist) elist)))
            (entmod elist)
            (setq i (+ i 1))
      );repeat
     (command "undo" "end")
     (princ (strcat "\n" (itoa i) " TEXT hizalandı."))
     (princ)
  ));_if & progn
);defun


Bu lisp default olarak x yönüne yapıyor, fakat elle x de girsem y de girsem y yönüne yapıyor, yani x yapmak istediğimde default ı bırakıyorum y yapmak istediğimde x veya y yazıyorum sizden ricam lisp i düzeltebilirmisiniz.

ehya (01.02.2012 15:16 GMT)

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] > 16 < [20] [25] [30] [35] [40] [43] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.46 saniye - Sorgu: 103 - Ortalama: 0.01418 saniye