04.04.2022 13:16    

SaiL
arkadaşlar ekteki dosya ile ilgili yardımlarınızı rica ediyorum.
çizimdeki yazılar kotları ifade ediyor. yalnız bu kotlar batimetri kotları olduğu için normalde hepsi eksi değerli.
çizimdeki yazıların başına toplu şekilde eksi değer yazmak istiyorum.
yardımcı olur musunuz.


69261-batimetri.dwg

04.04.2022 14:27    

Travaci


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

06.04.2022 06:50    

SaiL
Alıntı
Travaci :


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





çok güzel, emeklerinize sağlık.
Ya nasıl mutlu oldum anlatamam. çok teşekkür ederim.

07.04.2022 11:11    

ProhibiT
Merhaba arkadaşlar, 11 yıl önce paylaştığımız bir fonksiyonu hatırlattığı için Erkan Travacı'ya, böyle nostaljik hatırlatmaya neden olduğu için SaiL arkadaşımıza teşekkür ederim. :)

Bu fonksiyonu unutmuştum, verilen linke gidip bakınca 2 tür çelişkili duygu arasında kaldım açıkçası.

Önce, ozamanlar bile nasıl bir disiplin içinde konuyu ele alıp düzenli bir şekilde analizini ve çözümünü yapmış, sonra da aynı disiplin içinde kodlamışım... diye kendimi takdir ettim doğrusu. Sonra fark ettim ki, cond fonksiyonu altında progn kullanmışım. Döngü kurarken sayaçlar kullanıp, tıkır tıkır saydırmışım.



Halbuki kitabımda açık ve net bir biçimde "cond içinde progn kullanmaya gerek yok." diye yazmışım. Burada bir kere daha gururlandım. :)

Döngülerin kurulmasıyla ilgili de pek çok yerde yazmama rağmen, kendim hatalı yazmışım. Üzülmeli, hatta utanmalımıyım. Bu ne perhiz bu ne lahana turşusu demezler mi adama.

İşin özü ve aslı şu ki, OSE (Önek-Sonek) lispini 2011 yılında yazmışım, kitabım 2014 yılında yayınlanmış. Demek ki, bu kitap yalnızca okuyanlara değil, yazana da faydalı oluyor, bir yerlerden alıp bir yerlere getiriyormuş.

2011 yılında yazdığım mesaja düzenleme olarak ekledim. Burada da paylaşıp bazı ayrıntıları açıklamak isterim.

Kod:

;|============================================================================|
| Komut adı: OSe                                                             |
| Seçilen Text ve Mtext objelerine, Önek veya Sonek Ekler veya Çıkarır.      |
| Hazırlayan, M. Şahin Güvercin - 16-03-2011 19:45                           |
|                                                                            |
| 07.04.2022 tarihli güncelleme ve düzenlemeler:                             |
|  - *error* hata yakalama fonksiyonu eklendi.                               |
|  - Hem Önek hemde Sonek değerlerinin boş olması durumunda çıkış yaplılır.  |
|  - cond işlevi içindeki progn'ler kaldırıldı.                              |
|  - while döngüsü sayaç değerine değil, varlık-yokluk kontrolüne bağlandı.  |
|————————————————————————————————————————————————————————————————————————————|;
(defun c:OSe (/ *error* Oe Se iS yzL L0 L1 L2 PvT yaz)
  (defun *error* (er /)
    (if (member er '("Function cancelled" "quit / exit abort"))
      (princ (strcat "\n*Error* " er))
      (princ "\n  Hem Önek hemde Sonek boş olamaz!"))
    (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
    (if ocmd (setvar "cmdecho" ocmd)) (setvar "modemacro" "") (prin1))
  (setq ocmd (getvar "cmdecho")) (setvar "cmdecho" 0) (command "undo" "group")
  (setq Oe (getstring T "\n  Önek : ") Se (getstring T "\n  Sonek : "))
  (if (and (= Oe "") (= Se "")) (*error*))
  (if (not oiS) (setq oiS "Ekle")) (initget "Ekle Çıkar")
  (setq iS (getkword (strcat "\n Ekle/Çıkar (E/Ç) <" (if oiS oiS "") ">: ")))
  (if (not iS) (setq iS oiS) (setq oiS iS))
  (princ "\n Önek/Sonek işlemi yapılacak Text'leri seçiniz...")
  (setq yzL (ssget (list (cons 0 "*Text"))) L1 (strlen Oe) L2 (strlen Se) n -1)
  (while (setq PvT (ssname yzL (setq n (1+ n))))
    (setq PvT (entget PvT) yaz (cdr (assoc 1 PvT)) L0 (strlen yaz))
    (cond ((= iS "Ekle")
           (if (and (/= Oe "") (/= Oe (substr yaz 1 L1)))
             (setq yaz (strcat Oe yaz) L0 (strlen yaz)))
           (if (and (/= Se "") (/= Se (substr yaz (- (1+ L0) L2) L2)))
             (setq yaz (strcat yaz Se) L0  (strlen yaz))))
          ((= iS "Çıkar")
           (if (and (/= Oe "") (= Oe (substr yaz 1 L1)))
             (setq yaz (substr yaz (1+ L1) (- L0 L1)) L0 (strlen yaz)))
           (if (and (/= Se "") (= Se (substr yaz (- (1+ L0) L2) L2)))
             (setq yaz (substr yaz 1 (- L0 L2)) L0 (strlen yaz)))))
    (setq PvT (entmod (subst (cons 1 yaz) (assoc 1 PvT) PvT))
          PvT (entupd (cdr (assoc -1 PvT)))))
  (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
  (if ocmd (setvar "cmdecho" ocmd)) (prin1))


cond içindeki progn konusunu yukarıda yazdığım için ayrıca açıklamaya gerek yok.

while döngüsünün kuruluşu konsunda da, işleme alınacak seçim setinde kaç varlık (entity) olduğu beni hiç ilgilendirmiyor. 0 (sıfır)dan başlayacak şekilde n sayacını ayarlayıp, bu sayacı her adımda birer artırarak, karşılık gelen bir varlık (entity) olduğu sürece döngüyü işletiyoruz. Seçim seti tükenince zaten döngüye girilmiyor, sen sağ ben salim çıkılıyor.

Burada yazar arkadaşlar için gene farklı bir hata yakalama (*error*) fonksiyonu örneği var. AtoCAD hata iletilerinden biriyle işlem sonlanmışsa, ileti verilerek fonksiyon sonlanıyor. Özel bir durum olan, "Hem Önek hemde Sonek Bulunmaması" hali için için *error* fonksiyonu çağırılıyor, ama exit fonksiyonu kullanılmadığı için "quit / exit abort" biçiminde bir hata mesajı iletilmiyor. *error* fonksiyonu içinde standart hata mesajı gelmemişse, "\n Hem Önek hemde Sonek boş olamaz!" iletisiyle sonlanıyor. Öyle ya, hem Önek girmemişsin, hemde Sonek... ne demeye çağırdın beni!

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

ProhibiT (07.04.2022 11:22 GMT)

> 1 <
Copyright © 2004-2022 SQL: 1.118 saniye - Sorgu: 60 - Ortalama: 0.01864 saniye