11.09.2010 08:11    

levson
Merhaba arkadaşlar,
Autocad ile mo. ntaj resimlerinin ya da parca da göstermek istediklerimizin uzun bir cizgi ce ucunda daire için 1, 2, 3 gibi sırasıyla işaretlendiğini görmüştüm. Bu komuta nereden girebilirim. Şu anda elimde bunu yapmamı gerktireck bir iş var ama malesef komuta ulaşamadım...

13.09.2010 05:53    

bud_0782
lisp kullanmalısınız



Linkleri görebilmek için ÜYE olmalısınız.

13.09.2010 15:21    

ProhibiT
Merhaba,
Eski bir AutoLisp fonksiyonu yeniden düzenledim, basitleştirdim.
Anlatması uzun, bence ilginç oldu. Deneyin görün derim :)

Kod:

(defun C:PNo ()
  (setvar "cmdecho" 0) (command "undo" "group")
  (setvar "modemacro" "Prepared by:M.S. Güvercin")
  (if (= eyuk nil) (setq eyuk (* (getvar "dimtxt") (getvar "dimscale"))))
  (setq yyuk (getreal (strcat "\nYazi yuksekligi <" (rtos eyuk) "> :")))
  (if (= yyuk nil) (setq yyuk eyuk)) (if (= esayi nil) (setq esayi 1))
  (setq sayi (getint (strcat "\nBaslangic sayisi <" (itoa esayi) "> :")))
  (if (= sayi nil) (setq sayi esayi))
  (while (setq ynok (getpoint "\nParçayı seciniz..."))
    (setq yynok (getpoint ynok "\nNumaranın yerini seçiniz..."))
    (entmake (list
      (cons 0 "TEXT") (cons 10 yynok) (cons 40 yyuk) (cons 11 yynok)
      (cons 1 (itoa sayi)) (cons 50 0) (cons 72 4)))
    (setq kutu (textbox (entget (entlast)))
          ycap (* 0.625 (distance (car kutu) (cadr kutu)))
          aci (angle ynok yynok) len (- (distance ynok yynok) ycap)
          p2  (polar ynok aci len))
    (entmake (list (cons 0 "CIRCLE") (cons 10 yynok) (cons 40 ycap)))
    (entmake (list (cons 0 "LINE") (cons 10 ynok) (cons 11 p2)))
    (setq sayi (1+ sayi)))
  (setq eyuk yyuk esayi sayi)
  (setvar "modemacro" "") (command "undo" "e") (prin1)
)


Herkese Kolay Gelsin...

02.02.2011 21:44    

gmavisi06
10 numara lisp ben bunu başka bir lisp ile yapıyordum. . .

03.02.2011 06:42    

SENDUR
Güzel bir lisp eline sağlık hocam. Yalnız bu line ile oluşturduğun çizgiyi qleader ile yapsak daha güzel olur bence. ( ben kendi kullandığım numaranlandırmalarda çizginin ucuna biraz büyük bir nokta (dot) yapıyorum yada bazı durumlarda ok (closeed filled) kullanıyorum. okulda böyle öğrendik. )

03.02.2011 11:30    

ProhibiT
Merhaba sendur,

aslında bu konunun biraz suyunu çıkarmış bulunduk. bu ve benzeri işler için o kadar çok autolisp fonksiyon paylaşıldı ki.

Linkleri görebilmek için ÜYE olmalısınız.

linkinde, buradaki fonksiyonun aynısı ve fakat ucuna dot konmuş halini paylaşmıştık. farklı kavramlar gibi görünse de, sitenin belki de en kısa kodlu fonksiyonu kılçık lispi de özünde benzer bir fonksiyondu.

bütün bunlara rağmen, son mesajınızda yazdıklarınızı göz önüne alarak, fonksiyonu leader kullanacak şekilde düzenledim. umarım son olur :)
Kod:

(defun c:pno (/ yyuk sayi ynok yynok kutu ycap aci p1)
  (setvar "cmdecho" 0) (command "undo" "group")
  (setvar "modemacro" "prepared by:m.  s.   güvercin")
  (if (= eyuk nil) (setq eyuk (* (getvar "dimtxt") (getvar "dimscale"))))
  (setq yyuk (getreal (strcat "\nyazi yuksekligi <" (rtos eyuk) "> :")))
  (if (= yyuk nil) (setq yyuk eyuk)) (if (= esayi nil) (setq esayi 1))
  (setq sayi (getint (strcat "\nbaslangic sayisi <" (itoa esayi) "> :")))
  (if (= sayi nil) (setq sayi esayi))
  (while (setq ynok (getpoint "\n          noktayı seçiniz.  .  .  "))
    (setq yynok (getpoint ynok "\nnumaranın yerini seçiniz.  .  .  "))
    (entmake (list (cons 0 "text") (cons 10 yynok) (cons 40 yyuk)
        (cons 11 yynok) (cons 1 (itoa sayi)) (cons 50 0) (cons 72 4)))
    (setq kutu (textbox (entget (entlast)))
          ycap (/ (distance (car kutu) (cadr kutu)) 1. 5)
          aci (angle ynok yynok))
    (cond ((or (and (>= aci 0) (< aci (/ pi 2))) (>= aci (* 1. 5 pi)))
           (setq p1 (polar yynok (+ aci pi) ycap)))
          ((and (>= aci (/ pi 2)) (<= aci (* 1.  5 pi)))
           (setq p1 (polar yynok (- aci pi) ycap))))
    (entmake (list (cons 0 "cırcle") (cons 10 yynok) (cons 40 ycap)))
    (entmake (list (cons 0 "leader") (cons 100 "acdbentity") (cons 67 0)
        (cons 100 "acdbleader") (cons 71 1) (cons 74 1) (cons 76 3)
        (cons 10 ynok) (cons 10 p1)))
    (setq sayi (1+ sayi)))
  (setq eyuk yyuk esayi sayi)
  (setvar "modemacro" "") (command "undo" "e") (prin1)
)
leader'ların yön ve doğrultusunu kullanıma göre biraz özelleştirdim, standard leader kullanması durumunda pek hoş olmuyordu.


kolay gelsin.

düzenleme: leader kullanmak yerine polyline ile çözüm için düzenlendi.
Kod:

(defun C:PNo ()
;;;(/ yyuk sayi ynok yynok kutu ycap aci p1)
  (setvar "cmdecho" 0) (command "undo" "group")
  (setvar "modemacro" "Prepared by:M.S. Güvercin")
  (if (= eyuk nil) (setq eyuk (* (getvar "dimtxt") (getvar "dimscale"))))
  (setq yyuk (getreal (strcat "\nYazi yuksekligi <" (rtos eyuk) "> :")))
  (if (= yyuk nil) (setq yyuk eyuk))
  (if (= esayi nil) (setq esayi 1))
  (setq sayi (getint (strcat "\nBaslangic sayisi <" (itoa esayi) "> :")))
  (if (= sayi nil) (setq sayi esayi))
  (while (setq ynok (getpoint "\n          Noktayı seçiniz..."))
    (setq yynok (getpoint ynok "\nNumaranın yerini seçiniz..."))
    (entmake (list (cons 0 "TEXT") (cons 10 yynok) (cons 40 yyuk)
                   (cons 11 yynok) (cons 1 (itoa sayi)) (cons 50 0)
                   (cons 72 4)))
    (setq kutu (textbox (entget (entlast)))
          ycap (/ (distance (car kutu) (cadr kutu)) 1.5)
          aci  (angle ynok yynok))
    (cond ((or (and (>= aci 0) (< aci (/ pi 2))) (>= aci (* 1.5 pi)))
           (setq p3 (polar yynok (+ aci pi) ycap)
                 p4 (polar ynok aci yyuk)))
          ((and (>= aci (/ pi 2)) (<= aci (* 1.5 pi)))
           (setq p3 (polar yynok (- aci pi) ycap)
                 p4 (polar ynok aci (* 0.6667 yyuk)))))
    (entmake (list (cons 0 "CIRCLE") (cons 10 yynok) (cons 40 ycap)))
    (entmake (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 67 0)
                   (cons 39 0.0) (cons 100 "AcDbPolyline") (cons 90 3)
                   (cons 70 0) (cons 38 47.3382) (cons 10 p3) (cons 40 0.0)
                   (cons 41 0.0) (cons 42 0.0) (cons 91 0) (cons 10 p4)
                   (cons 40 (* 0.3333 yyuk)) (cons 41 0.0) (cons 42 0.0)
                   (cons 91 0) (cons 10 ynok) (cons 40 0.0) (cons 41 0.0)
                   (cons 42 0.0) (cons 91 0))) (setq sayi (1+ sayi)))
  (setq eyuk  yyuk esayi sayi)
  (setvar "modemacro" "") (command "undo" "e") (prin1)
)

ProhibiT (07.06.2011 14:50 GMT)

> 1 <
Copyright © 2004-2022 SQL: 0.946 saniye - Sorgu: 60 - Ortalama: 0.01577 saniye