26.06.2013 12:49    

kerem1453
dimension style round off degerini 5 yaptıgımızda ölçü nasıl tam sayıya yuvarlanıyosa bunu cizim içindeki l= boyu içinde uygulamak için elinde lispi olan yada yazabilcek varsa yardımcı olursa sevinirim demir boyu l=123 mesala bunu l=120 ye veya l=127 bunu 130 yuvarlamak amaçlı bir lisp arıyorum.yardımcı olanlara şimdiden tşkler.

01.09.2013 09:11    

Travaci
Söz vermiştim unutmuşum. :blush
Kod:

(defun c:yvr (/) (vl-load-com)
   (setq dat (ssget (list (cons 0 "text"))) j 0)
   (if (= dat nil)
      (progn (princ "\nSeçim yapılamadı! ") (prin1))
      (progn
         (while (< j (sslength dat))
            (setq tad (ssname dat j)
               boy (/ (float (fix (+ (* 1000 (atoi (vla-get-TextString
                   (vlax-ename->vla-object tad )))) 0.50))) 1000)
               boy (rtos (float (* (fix (+ (* 0.1 boy) 0.50)) 10 )) 2 0)
               ed1 (entget tad) j (1+ j))
            (entmod (subst (cons 1 boy) (assoc 1 ed1) ed1))
         )  (princ)
      )
   )
)

Başka türlü nasıl yapılabilir merak etmiyor değilim :satisfied

Travaci (01.09.2013 17:18 GMT)

01.09.2013 17:56    

ProhibiT
Merhaba arkadaşlar :) Müsadenizle soruya da cevaba da itirazım var!

kerem1453 arkadaşımızın yuvarlama işlemi için verdiği örnekte çelişki var.
Dimenison/roundoff işlemindeki gibi yuvarlamadan bahsediyorsak;
122 -> 120'ye
123 -> 125'e
127 -> 125'e
128 -> 130'a yuvarlanır. yani simetrik yuvarlama yapılır.
123'ü 120'ye ve aynı algoritma ile 127'yi 130'a yuvarlamak mümkün olmaz.

Travacı hocam, böyle bir yuvarlatma işlemi için bu kadar uzun kod yazmaya gerek yok.
AutoLISP rem (remainder, bölme işleminde kalan) işlevini kullanarak çok daha kısa ve hatasız yazılabilir. Çok canınız sıkılırsa örnekteki kodlar daha da kısa yazılabilir biliyorsunuz :)
Kod:

(defun c:SY (/ a) ;;; Simetrik Yuvarlama
  (setq a (getint))
  (if (> (rem a 5) (/ 5 2.0))
    (princ (+ a (- 5 (rem a 5))))
    (princ (- a (- 4 (rem a 5)))))
  (princ))
(defun c:YY (/ a) ;;; Yukarı Yuvarlama
  (setq a (getint)) (princ (+ a (- 5 (rem a 5))))
  (princ))
(defun c:AY (/ a b) ;;; Aşağı Yuvarlama
  (setq a (getint)) (princ (- a (rem a 5)))
  (princ))
Seçim ve seçilen nesne içeriğinin güncellenmesini değil yalnızca işlemi örnekledim.

Kolay gelsin.

01.09.2013 18:00    

Travaci
Teşekkürler hocam :) Simetrik yuvarlamayla ilgili bir sıkıntı var.

Travaci (01.09.2013 18:29 GMT)

03.09.2013 11:58    

kerem1453
şahin hocam sizin yazdıgınız lisp te birinci enter hiç bi işlem yapmıyor ikinci enter bu hatayı veriyo; error: bad argument type: numberp: nil taravacı hocam sizin yazdıgınız lisptede l=123 bu birleşik bir yazı sadece rakam oldugunda yuvarlıyo l=123 yada L=128 yazdıgında lispi çalıştırdıgımda direk o yazının yerine 0 (sıfır) yazıyor.emeginize elinize saglık kafa yoruyosunuz çok tşk ederim zamanınız oldugunda istenilen şekle göre değişiklik yapma şansınız olursa müteşekkür olurum.

03.09.2013 18:49    

Travaci
Kod:

(defun c:yvr2 (/) (vl-load-com)
   (setq dat (ssget (list (cons 0 "text"))) j 0)
   (if (= dat nil)
      (progn (princ "\nSeçim yapılamadı! ") (prin1))
      (progn
         (while (< j (sslength dat))
            (setq tad (ssname dat j)
               yzi (vla-get-TextString (vlax-ename->vla-object tad ))
               boy (/ (float (fix (+ (* 1000 (atoi
                   (substr yzi 3 (- (strlen yzi) 2)))) 0.50))) 1000)
               boy (rtos (float (* (fix (+ (* 0.1 boy) 0.50)) 10 )) 2 0)
               ed1 (entget tad) j (1+ j))
            (entmod (subst (cons 1 (strcat "L=" boy)) (assoc 1 ed1) ed1))
         )  (princ)
      )
   )
)

03.09.2013 21:52    

kerem1453
çok tşkler sayın taravacı betonarme projeler için kullanışlı bir lisp haline gelmiş eline saglık...

> 1 <
Copyright © 2004-2022 SQL: 1.194 saniye - Sorgu: 65 - Ortalama: 0.01837 saniye