BURALAR HEP BENİM(!)

MEKANIK TESISAT – AUTOLISP PROGRAMLAMA

HVAC PLANLARDA DİRSEK ÇİZİMİ

Posted by miyatu Ocak 31, 2008

Aşagıda kodlarını yazdığım lisp yukarda gördüğünüz 4 çizgiyi dirsek şeklinde birleştirme işine yarar…Havalandırma kanallarını çizerken benim çok sık kullandığım bir lisp…

 

Nasıl kullanırım:

 

Öncelikle aşağıdaki kodları kopyalayp not defterine yapıştırın ve uzantısı lsp (mesela dirsek.lsp) olacak şekilde kaydedin.

 

Sonra autocad ın komut satırına appload yazın.

Çıkan menüden kaydettiğiniz dosyayı bulun ve yükleyin ve menüyü kapatın.

Konut satırına dd yazın ve enter e basın.

Resimde görülen sıra ile çizgilerinizi seçin… bukadar…

 

Kolay gelsin…

 

Kodlar (Bu yazıdan sonrasını kopyalayın)

 

(defun c:DD(/ *error* oldOsnap oldOffset oldEcho oldFillet ind1 ind2 outd1 outd2 ename1 ename2 ename3 ename4 obj1 obj2 obj3 obj4 strpt1 strpt2 strpt3  
    strpt4 endpt1 endpt2 endpt3 endpt4 dspt1 dspt2 raddst rads smarcc cls1 cls2 endl1 endl2 clst1 clst2 enda1 enda2
     )
 (setq oldOsnap (getvar “osmode”))
 (setq oldOffset (getvar “offsetdist”))
 (setq oldEcho (getvar “cmdecho”))
 (setq oldFillet (getvar “filletrad”))

   (defun *error*(msg)
   (setvar “osmode” oldOsnap)
   (setvar “offsetdist” oldOffset)
   (setvar “cmdecho” oldEcho)
   (setvar “filletrad” oldFillet)  
   (princ)
   )
  (setvar “osmode” 0)
  (setvar “cmdecho” 0)
  (setq ind1 (entsel ” ILK KANAL ICINI SEC”))
  (setq outd1 (entsel ” ILK KANAL DISINI SEC”))
  (setq ind2 (entsel ” IKINCI KANALIN  ICINI SEC”))
  (setq outd2 (entsel ” IKINCI KANALIN  DISINI SEC”))
  (setq ename1 (car ind1))
  (setq obj1 (vlax-ename->vla-object ename1))
  (setq strpt1 (vlax-get obj1 ‘StartPoint)
        endpt1 (vlax-get obj1 ‘EndPoint))
  (setq ename2 (car outd1))
  (setq obj2 (vlax-ename->vla-object ename2))
  (setq strpt2 (vlax-get obj2 ‘StartPoint)
        endpt2 (vlax-get obj2 ‘EndPoint))
  (if (inters strpt1 endpt1 strpt2 endpt2) (setq result “The first two lines are not parallel”)
   (setq d1 (distance strpt1 (vlax-curve-getClosestPointTo obj2 strpt1))
         d2 (distance endpt1 (vlax-curve-getClosestPointTo obj2 endpt1))
         d3 (distance strpt2 (vlax-curve-getClosestPointTo obj1 strpt2))
         d4 (distance endpt2 (vlax-curve-getClosestPointTo obj1 endpt2))))
   (setq dspt1 (min d1 d2 d3 d4))
  (setq ename3 (car ind2))
  (setq obj3 (vlax-ename->vla-object ename3))
  (setq strpt3 (vlax-get obj3 ‘StartPoint)
        endpt3 (vlax-get obj3 ‘EndPoint))
  (setq ename4 (car outd2))
  (setq obj4 (vlax-ename->vla-object ename4))
  (setq strpt4 (vlax-get obj4 ‘StartPoint)
        endpt4 (vlax-get obj4 ‘EndPoint))
  (if (inters strpt3 endpt3 strpt4 endpt4) (setq result “The second two lines are not parallel”)
   (setq d5 (distance strpt3 (vlax-curve-getClosestPointTo obj4 strpt3))
         d6 (distance endpt3 (vlax-curve-getClosestPointTo obj4 endpt3))
         d7 (distance strpt4 (vlax-curve-getClosestPointTo obj3 strpt4))
         d8 (distance endpt4 (vlax-curve-getClosestPointTo obj3 endpt4))))
   (setq dspt2 (min d5 d6 d6 d8))  
  (if (<= dspt2 dspt1) (setq raddst dspt2) (setq raddst dspt1))
      (cond
                                       ((< raddst 20.9) (setq rads 5))
   ((< raddst 50.9) (setq rads 10))
   ((< raddst 70.9) (setq rads 15))
   ((< raddst 90.9) (setq rads 20))
                                       ((< raddst 110.9) (setq rads 25))
                                       ((< raddst 130.9) (setq rads 30))
                                       ((< raddst 150.9) (setq rads 35))
                                       ((< raddst 170.9) (setq rads 40))
                                       ((< raddst 190.9) (setq rads 45))
                                        ((< raddst 210.9) (setq rads 50))

      )
  (setvar “FILLETRAD” rads)
  (command “FILLET” ind1 ind2)
  (setq smarcc (cdr (assoc 10  (entget (entlast)))))
  (setvar “FILLETRAD” (+ rads raddst))
  (command “FILLET” outd1 outd2)
  (setq cls1 (vlax-curve-getClosestPointTo obj1 smarcc))
  (setq cls2 (vlax-curve-getClosestPointTo obj3 smarcc)) 
  (setq endl1 (inters  smarcc cls1 strpt2 endpt2 nil))
  (setq endl2 (inters  smarcc cls2 strpt4 endpt4 nil))  
  (setq smarcc (trans smarcc 0 1))  
  (setq clst1 (trans cls1 0 1))
  (setq clst2 (trans cls2 0 1))   
  (setq enda1 (trans endl1 0 1))
  (setq enda2 (trans endl2 0 1)) 
  (command “LINE” clst1 enda1 “”)
  (command “LINE” clst2 enda2 “”)  
 (setvar “osmode” oldOsnap)
 (setvar “offsetdist” oldOffset)
 (setvar “cmdecho” oldEcho)
 (setvar “filletrad” oldFillet)
 (princ)
)

About these ads

7 Yanıt to “HVAC PLANLARDA DİRSEK ÇİZİMİ”

  1. izmank said

    miyatu selam;
    öncelikle lisplerin için teşekkür ederim. Ancak lispleri bir daha kontrol edersen sevinirim.Sanırım sorun var.
    Kolay gelsin.

  2. miyatu said

    kodlarda sorun göremedim…

    senin aldığın hatayı yazarsan belki bir çözüm üretebilirim…

  3. serkan said

    miyatu öncelikle lisp için teşekkür ederim yalnız bir sorunum var yardım edersen sevinirim dirsek lisp i autocad 2006 da çalışıyor yalnız autocad 2009 çalıştıramadım
    komutu yazdıktan sonra ilk kanalın içini seç vs yazıları çıkıyor ancak işlem sonunda dirsek yapmıyor yardımcı olursan çok sevinirim

  4. avo said

    Command: ; error: An error has occurred inside the *error* functionbad argument
    type: (or stringp symbolp): nil

  5. nizamettın said

    slm ben bu lıspdekı sorunum su bu hatayı verıyo ılgılenırsen sevinirim

    DD ; error: bad argument type: (or stringp symbolp): nil

  6. onn said

    hocam bu dd dirsek yapma lispi cad2009 da çalışmıyor. Neden acaba?

  7. miyatu said

    vlx codları yuzunden calışmıyor bi ara düzelteceğim inş. kısa surede düzeltirim…

    düzeltilmiş hali

    http://www.autocadokulu.com adresinde mevcuttur…

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logo

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter picture

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook photo

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ photo

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s

 
Takip Et

Her yeni yazı için posta kutunuza gönderim alın.

%d blogcu bunu beğendi: