19.06.2012 16:51    

ProhibiT
Forum alanımızda benzer soru ve istekler gördüğümden, uzun zaman önce yazdığım bir fonksiyonu düzenleyip paylaşmak istedim.
Kod:

;|===========================================================================|;
;|  BSLK:                                                                    |;
;|        Plan çizimlerinde, Line'lardan oluşan duvarlara kapı ve pencere    |;
;|        boşlukları açar.   Hazırlayan M.S.Güvercin www.autocadokulu.com    |;
;|===========================================================================|;
(defun C:BSLK (/ os dvk1 dvk2 dvk Layr mesa rfr acik knr1b knr2b knr2s knr2s)
  (setvar "cmdecho" 0) (command "undo" "group") (setq os (getvar "osmode"))
  (defun *error* (er) (setvar "osmode" os) (command "undo" "e") (princ er))
  (redraw (setq dvk1 (car (entsel "Duvarin birinci kenarini seçiniz: "))) 3)
  (redraw (setq dvk2 (car (entsel "........ ikinci kenarını seçiniz: "))) 3)
  (if(not(equal(angle(cdr(assoc 10(entget dvk1)))(cdr(assoc 11(entget dvk1))))
      (angle(cdr(assoc 10(entget dvk2)))(cdr(assoc 11(entget dvk2)))) 1.0E-08))
    (setq dvk2 (entget dvk2) dvk dvk2
          dvk (subst (cons 10 (cdr (assoc 11 dvk2))) (assoc 10 dvk) dvk)
          dvk (subst (cons 11 (cdr (assoc 10 dvk2))) (assoc 11 dvk) dvk)
          dvk (entmod dvk) dvk2 (entupd (cdr (assoc -1 dvk)))))
  (setq Layr (assoc 8 (entget dvk1)))
  (if (not (setq mesa (getpoint "\nBoşluğun başladığı nokta :")))
    (setq rfr (getpoint "\nReferans noktası :")
          mesa (getpoint rfr "\nMesafe           :")))
  (if (not (setq acik (getpoint "\nBoşluğun bittiği nokta   :")))
    (setq acik (getpoint mesa "\nAçıklık           :")))
  (redraw dvk1 4) (redraw dvk2 4) (setvar "osmode" 0)
  (command "break" dvk1 mesa acik)
  (setq knr1b (cdr (assoc 11 (entget dvk1)))
        knr2b (cdr (assoc 10 (entget (entlast)))))
  (command "break" dvk2 mesa acik)
  (setq knr1s (cdr (assoc 11 (entget dvk2)))
        knr2s (cdr (assoc 10 (entget (entlast)))))
  (entmake (list (cons 0 "Line") (cons 10 knr1b) (cons 11 knr1s) Layr))
  (entmake (list (cons 0 "Line") (cons 10 knr2b) (cons 11 knr2s) Layr))
  (setvar "osmode" os) (command "undo" "e") (prin1))

- Temel amaç, biribirine paralel 2 çizgiden oluşan duvar çizimlerine boşluklar (Kapı veya Pencere Boşluğu gibi) açmaktır.
- Yalnızca Line objelerini işleme alır.
- Çizgiler istenilen açıda, gerektiğinde biribirinden faklı yönlerde çizilmiş olabilir, tek şart; 2 çizginin biribirine paralel olmasıdır.
- Boşluğun başladığı ve bittiği noktaları belirlerken, Enter girip alternatif nokta veya mesafe seçim yöntemleri kullanılabilir.
- Boşluğun başlangıç ve bitişine çizilen kapatma çizgileri, aktif Layer ne olursa olsun, ilk seçilen çizginin Layer'ında oluşturulur.

Kolay gelsin...

20.01.2014 09:19    

therokula74
hocam ellerine kollarına sağlık
pencere için boşluk oluşturduğumda pencere kenarlarını kestiğim anda tekrardan boş kalan kısımları çizmem gerekiyordu artı bir zaman kaybı ve angarya iş olarak görüp boş bırakırdım. bu lisp ile işim daha çok kolaylaştı..

tekrardan ellerinize sağlık.

therokula74 (20.01.2014 09:32 GMT)

02.02.2020 09:31    

@yQut
MERHABA.
Yapmış olduğunuz bütün lispler harika emeğinize sağlık.
Yukarıda yapmış olduğunuz lispin ters çalışanı varmı bulamadım.
yani söyleki:

bir çizgi var bu çizgiye offset yaptıktan sonra iki ucunu verilen değerde uzatıp uçlarını dik kapatsın. yalnız offset referans çizgisi uzunluğu sabit kalacak

> 1 <
Copyright © 2004-2022 SQL: 0.807 saniye - Sorgu: 52 - Ortalama: 0.01552 saniye