29.06.2011 12:37    

ProhibiT
Merhaba arkadaşlar,

Forumda bu gün sorulan bir soruyu görünceye kadar ilgimi çekmemişti doğrusu.
Hem "Minserted Object" leri nasıl explode edeceğini soran arkadaşlarımızın işine yarar,
hem de Lisp ile ilgilenen yazar arkadaşlarımız için ilginç bir örnek olur düşüncesiyle,
fonksiyon kodunu ve temel işleyiş mantığını açıklamaya çalışıp, paylaşmak istedim.

MINSERT edilmiş obje ile INSERT edilmiş objeler arasında özünde çok fark yok.
Her iki objenin de verilerine bakarsak.
- ikisinin de obje türü "INSERT"
- INSERT objesinde (assoc 44, 45, 70 ve 71 değerleri 0 (sıfır) iken
MINSERT objesinde 44 ve 45 satır ve sütün aralıklarını,
70 ve 71 de satır ve sütun sayısını tanımlamak için kullanılmış.
- INSERT objesinde (assoc 100 "AcDbBlockReference" iken,
MINSERT objesinde (assoc 100 "AcDbMInsertBlock" halini alıyor.
Kod:

;;; Exploding Minserted Object(s) ;;;
(write-line "\nHazırlayan M. Sahin Güvercin - www.autocadokulu.com")
(defun c:MinEx (/ obj L o mob mxd myd mac mxe mye m n nip)
  (setvar "cmdecho" 0) (command "undo" "group")
  (setvar "modemacro" "Prepared by: M. Şahin Güvercin")
  (princ "\nSelect Minserted Object(s) to be explode: ")
  (while (not (setq obj (ssget (list (cons 0 "insert") (cons -4 "!=") (cons 70 0))))))
  (setq L (sslength obj) o -1)
  (while (< (setq o (1+ o)) L)
    (setq mob (entget (ssname obj o))
          mxd (cdr (assoc 44 mob)) myd (cdr (assoc 45 mob))
          mac (cdr (assoc 50 mob)) mxe (cdr (assoc 70 mob))
          mye (cdr (assoc 71 mob)) m -1)
    (mapcar '(lambda (p1) (setq mob (subst (cons p1 0) (assoc p1 mob) mob))) '(44 45 70 71))
    (setq mob (subst (cons 100 "AcDbBlockReference") (cons 100 "AcDbMInsertBlock") mob))
    (entdel (cdr (assoc -1 mob)))
    (while (< (setq n -1 m (1+ m)) mye)
      (setq nip (polar (cdr (assoc 10 mob)) (- mac (* pi 1.5)) (* m myd)))
      (while (< (setq n (1+ n)) mxe)
        (entmake (subst (cons 10 (polar nip mac (* n mxd))) (assoc 10 mob) mob)))))
  (princ (strcat "\n..." (itoa L) " Minserted Object(s) Exploded..."))
  (setvar "modemacro" "") (command "undo" "e") (prin1)
)

Fonksiyonun algoritmik detaylarına girmedim, ilgi duyan arkadaşlar olursa açıklamaya çalışırım.

herkese kolay gelsin.

ProhibiT (30.06.2011 06:58 GMT)

29.06.2011 13:08    

ehya
Hocam eline sağlık
güzel bir örnek kod olmuş.. :yes

29.06.2011 19:20    

ProhibiT
Teşekkür ederim mehmet hocam :)

bu sabah başka bir başlık altında yazılanları görünce aklıma takıldı. önce transformation matrix kullanarak bir çözüm bulmuştum. yazdığım fonksiyonu toparlarken, bu kadar karmaşık yazmaya gerek olmadığını farkettim. bu hale geldi...

30.06.2011 05:55    

mateus
Emeğine sağlık

10.05.2013 07:36    

halilozcakir
Hocam elinize sağlık.. MinEx ettiğimiz blok, komut sonrası yok oluyor bu nedendir acaba?

10.05.2013 08:22    

kerem1453
43486-123 kalip.dwg sayın şahin hocam örnek bi dosya yükledim kalıp planında minsert block objeleri bu lisple patlatamıyorum zamanınız oldugunda bakarsanız sevinirim.

28.10.2015 07:26    

OFE
Alıntı
kerem1453 :
43486-123 kalip.dwg sayın şahin hocam örnek bi dosya yükledim kalıp planında minsert block objeleri bu lisple patlatamıyorum zamanınız oldugunda bakarsanız sevinirim.



lisp calisyor, minex komutunu calistirdiktan ve objeyi gosterdikten sonra normal explode komutunu kullanin.

29.10.2016 20:13    

elk21
SEVGİLİ SAYGIDEĞER HOCALARIM GERÇEKTEN EMEĞİNE ELLERİNİZE YÜREĞİNİZE SAĞLIK MÜKKEMMEL OLMUŞ..

BENİM SİZDEN BİR RİCAM VAR.MINEC LİSPİNİN TAM TERSİ, BİR LİSP İLE MINSERT BLOK YAPABİLİRMİYİM

04.01.2017 08:22    

muratbagci42
merhaba, benimde elimde sanırım minsert edilmiş bi dosya var. Fakat bi türlü çözemedim. yardımcı olurmusunuz

> 1 <
Copyright © 2004-2022 SQL: 0.996 saniye - Sorgu: 66 - Ortalama: 0.01509 saniye