08.10.2020 16:03    

alumina
Alıntı
elk21 :

Calismayan text / mtext leri bos bir dosyaya kopyalayip burada paylasirmisiniz.

09.10.2020 09:45    

ProhibiT
Seçilen yazılar içinde boşluk (ascii 32) karakteri bulunması durumu da göz önüne alınarak düzenlenen TpLm fonksiyonuna Buraya Tıklayarak ulaşabilirsiniz.

9 yıl önce buradaki arkadaşlarımızın isteği doğrultusunda yazılan bu fonksiyonun o sade hali hiç değiştirilmeden yalnızca boşluk karakteri kontrolü yaparak güncellendi. Böyle bir fonksiyon daha kısa yazılabilir elbette. Bu ve benzeri fonksiyonları, yeni başlayan arkadaşlarımıza rehberlik etmesi bakımından adım adım ve en sade Lisp diliyle yazmak daha faydalı oluyor düşüncesindeyim.

Selam ve saygılarımla herkese kolaylıklar dilerim.

ProhibiT (09.10.2020 10:58 GMT)

14.09.2023 14:21    

v4ven
merhaba porhibit hocam,

Öncelikle harika bir lisp olmuş gerçekten emeklerinize sağlık çok yararı oluyor çok teşekkürler.

Bu lisp geliştirip toplanan rakamlar değiştiğinde toplamı da değiştirecek lisp yazmaya çalıştım ama beceremedim.

Siz uygun olduğunuzda bu konuyla ilgilenme şansınız olursa çok sevinirim.

Saygılarımla

14.09.2023 15:26    

ProhibiT
Merhaba, ilginiz için teşekkür ederim.

TpLm fonksiyonu, toplanacak sayıları seçerken genel Text formatındaki Nesnelerden seçiyor. Seçilen nesneler içinde sayısal olmayan kısımlar da bulunabilir. Bu bakımdan sayısal olmayan kısımları ayıklandığında herhangi sayısal değeri olmayan Text nesneleri seçimden çıkarılıyor. Hal böyle olunca da seçim seti bir kere kullanılıyor, toplam değeri elde edildikten sonra arada bir bağ kurulmuyor.

Sonuç olarak, bu fonksiyonu düzenleyerek, seçilen (sayılar) Text nesneleri arasında kalıcı bir bağ kurmak buradaki algoritma ile pek mümkün görülmüyor.

Sizin istediğinizi yapmak için, seçilen (toplanacak) Textlerinin içeriğinin yalnızca sayı olması gibi bir sınırlama getirilirse, seçilen Text'lerin sayısal değeri FIELD ile bağlanarak toplam elde edilebilir. Bu durumda sayı değerlerini içeren Text'ler değiştirildiğinde Update Field işleminden sonra Toplam değeri kendiliğinden değişmiş olacaktır.

Bunu manuel olarak yapmak aslında çok zor değil açıkçası...

Kolay gelsin.

26.09.2023 12:35    

v4ven
Merhaba ProhibiT Hocam,

Uğraştım ancak bu konuda ne yazık ki lisp işlerine yeni başladığım için başarılı olamadım.

Manuel olarak tabi ki işe yarıyor ancak bizim işte sayfalarca çok fazla bu tarz toplama yapıyoruz. Sürekli toplananı değiştirmek durumunda kalıyoruz.

Sizlerden ricam hocam imkanınız olursa müsait olduğunuzda bu lispi yazabilir misiniz tabi sizler için uygunsa.

Tekrar çok teşekkürler süper bir lisp yazmışsınız :) çizim okulu mükemmel bir yer gerçekten benim gibi meslektaşlarıma çok yararı dokunmaktadır. Çok teşekkürler bütün ekibe :)

Saygılarımla

31.07.2024 09:23    

recep_xyz
07.02.2011 <62467> Alıntı
ProhibiT hocam bu lispde öngörülemeyen bazı durumlar oluşmuş durumda
1)sayı sonunda bulunan m2 ibaresi örnek " 150.15m2" "m" karekteri kesilince sayı 150.152 oluyor.
2)acılışta dimzin<8> olunca "sondaki 0 lar baskılanınca" 125m2" sayı 1252 oluyor.
3) Text "Alan4: 326.02m2" sonuç 4326.022 oluşuyor.
Bu durumları ele alarak yenilemeye çalıştım. Affınıza sığınarak kodu paylaşıyorum .
182186-yazi-tplm--yeni.lsp

18.10.2024 07:11    

recep_xyz
182186-yazi-tplm--yeni.lsp
bir öncesinde dosya eklidir.
Kod:

;
| 2011 yılında yazılıp autocadokulu.com (cizimokulu.com) sitesinde           |
| paylaşılan, seçilen yazılar (text veya mtext) içindeki sayıları            |
| ayıklayarak toplamını gösterilen yerdeki yazının sayısal içeriğini         |
| güncelleyerekveya seçilen yer boş ise yeni bir text nesnesi oluşturarak    |
| yazan bu sayı toplama fonksiyonu, Ekim 2020'de güncellenerek,              |
| yazı içinde boşluk (ascii 32) karakteri bulunması durumunda da             |
| toplamı hesaplayacak şekildegüncellendi. 09.10.2020 -                      |
|                   son düzenleme: 10.06.2023 - M. Şahin Güvercin (ProhibiT) |;
;|LUPREC <4> ondalık hane sayısıdır.  0.0000 koordinata bakılabilir.          |;
;|Dimzin <0> sayı sonundaki 0 baskılamayı iptal eder.  başlangıç Dimzin <8>   |;
;|sayı harici tüm karakterler boşlukla değiştirildi m2 (2sayısı iptal edildi.)|;
;|AYIRAÇ ":" alınarak textin Sonunda kırpma yapıldı.                          |;
;|M. Şahin Güvercin (ProhibiT) Hocamızın  ellerine sağlık bu lisp kodlarınındaki eksiklikleri         |
|bizi gelİştirmek adına boş bıraktığını düşünüyorum. Yeniden editleyen Recep BİNBİR (recep_xyz)      |;
(defun c:tpLm (/ *error* tpLn L n txh PvT m o rsLt tpLm)
  (setq ocmd (getvar "cmdecho"))
  (defun *error* (er /)
    (if (member er '("Function cancelled" "quit/exit abort"))
      (princ (strcat "\n\t*error* " er)))
    (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
    (if ocmd (setvar "cmdecho" ocmd)) (prin1))
   (command "undo" "group") (setvar "cmdecho" 0)
;|____________________________________________________________________________|;
  (princ "\n  toplanacak sayıları seçiniz")
  (setq tpLn (ssget (list (cons 0 "*text"))) n -1 rsLt nil
        txh  (cdr (assoc 40 (entget (ssname tpLn 0)))))
  (while (setq PvT (ssname tpLn (setq n (1+ n))))
    (setq PvT (cdr (assoc 1 (entget PvT))) m (strlen PvT) o 0)
    (while (<= (setq o (1+ o)) m)
      (if (= (substr PvT o 1) ":")
        (setq PvT (strcat  (substr PvT (1+ o) (- m o))))) ;bu koşul ":" baz alarak yazının  "sol:" kısmı yokeder.[ön bilgi iptali için gereklidir.]
      (if (= (substr PvT o 1) (chr 32)) (setq o (1+ o)))
      (if (= (substr PvT o 1) (chr 44))
        (setq PvT (strcat (substr PvT 1 (1- o)) (chr 46)
                          (substr PvT (1+ o) (- m o)))))
      (if (or (< (ascii (substr PvT o 1)) 44) (> (ascii (substr PvT o 1)) 57))
        (setq PvT (strcat (substr PvT 1 (1- o)) " " (substr PvT (1+ o) (- m o)));bu kosul ise 44 öncesi, 57 sonrası karakterleri boşlukla değiştirir.
              m (strlen PvT) o (1- o))));|(alert  PvT )|;
    (setq PvT (vl-string-right-trim " " (vl-string-left-trim " " PvT)));|(alert  (strcat (rtos(atof PvT) 2 8) "<---->" ))|;
    (if rsLt (setq rsLt (+ rsLt (atof PvT))) (setq rsLt (atof PvT))))
;|____________________________________________________________________________|;
  (princ "\n    Toplam Yazısı/Yeri seçiniz")
  (while (/= 3 (car (setq sp (grread t 4 2)))))
  (setq sp (cadr sp) np (list (car sp) (cadr sp)) tpLm (ssget np))
  (if tpLm
    (if (or (= (cdr (assoc 0 (setq tpLm (entget (ssname tpLm 0))))) "TEXT")
            (= (cdr (assoc 0 tpLm)) "MTEXT"))
      (entupd (cdr (assoc -1
                          (entmod (setq tpLm (subst (cons 1 (rtos rsLt))
                                                    (assoc 1 tpLm) tpLm)))))))
    (entmake (list (cons 0 "text") (cons 10 sp) (cons 50 0) (cons 40 txh)
                   (cons 1 (rtos rsLt)))))
  (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
  (if ocmd (setvar "cmdecho" ocmd)) (prin1))

Copyright © 2004-2022 SQL: 0.889 saniye - Sorgu: 71 - Ortalama: 0.01252 saniye