;***********************************************************************; ; BALON.LSP ; ;***********************************************************************; ; Aksların ucuna balon çizer ; ; ; ; Designed by Orhan TOKER ; ; (c) Copyright 2006 Taliasoft ; ; ; ; Genel kullanım ve öğrenim amaçlıdır ; ;***********************************************************************; ; Sabitleri ayarlayalım (setq oldCmdecho (getvar "cmdecho") oldLayer (getvar "clayer") ) (command "_.layer" "_new" "TAL_BALON" "_set" "TAL_BALON" "") (setvar "cmdecho" 0) ;komutu tanımlayalım (defun c:balon() (setq cap (getdist "\nBalon çapını girin:")) (balon_ciz) ) (defun balon_ciz(/ aks pp aks_el acd_en bh aks_pt1 aks_pt2 aks_ang mes1 mes2 daireMerkezi) ; Balon koyacağımız aksın ucunu ve seçim noktasını seçelim (setq aks (entsel "\nAksın ucunu seçin:") pp (cadr aks) ; Selection point (PICKPOINT) aks_el (entget (car aks)) ; Aks elemanının listesi acd_en (cdr (assoc 0 aks_el)) ; Seçilen nesnenin adı ) ; Seçilen eleman LINE değilse programdan çık (if (/= acd_en "LINE") (progn (princ "\nSeçilen nesne LINE değil!") (quit) ) (princ) ) ; Şimdi diğer soruları soralım (setq bh (getstring "\nBalon etiketini girin:")) ; Hesaplamaları yapalım ; Aksın başlangıç ve bitiş noktalarını hesapla (setq aks_pt1 (cdr (assoc 10 aks_el)) aks_pt2 (cdr (assoc 11 aks_el)) ) ;Aksın açısını hesapla (deg2rad fonksiyonunu kullanarak) (setq aks_ang (angle aks_pt1 aks_pt2)) ;Seçim noktasının aksın hangi ucuna yakın olduğunu bulalım (setq mes1 (distance pp aks_pt1) mes2 (distance pp aks_pt2) ) ; Şimdi çizim hesaplarını yaptır (if (< mes1 mes2) ; Eğer seçim noktası başlangıç noktasına yakınsa (setq daireMerkezi (polar aks_pt1 (+ pi aks_ang) (/ cap 2.0))) (setq daireMerkezi (polar aks_pt2 aks_ang (/ cap 2.0))) ) ; Balonu çizdir (command "_.circle" daireMerkezi (/ cap 2.0)) ; Yazısını yazdır (command "._text" "_j" "_middle" daireMerkezi (* cap 0.6) 0 bh "") ) (setvar "cmdecho" oldCmdecho) (setvar "clayer" oldLayer) (princ)