20.11.2014 10:31    

mttlp
(defun c:33 (/)
(setq 33_cmd (getvar "CMDECHO")
33_osm (getvar "OSMODE")
)
(setvar "CMDECHO" 0)
(setvar "OSMODE" 0)
(setq czgsec (entsel "\n Dik çizilecek çizgiyi seç:"))
(princ "\n Bloku sec...")
(setq ller (ssget (list (cons 0 "INSERT")))
l (sslength ller) n -1)
(while (< (setq n (1+ n)) l)
(setq obtip (cdr (assoc 0 (entget (ssname ller n)))))
(if (= obtip "INSERT")
(setq ln (entget (ssname ller n))
(setq blk10 (cdr (assoc 10 (entget (car ln)))))
(setq czg10 (cdr (assoc 10 (entget (car czgsec))))
czg11 (cdr (assoc 11 (entget (car czgsec))))
czg0 (cdr (assoc 0 (entget (car czgsec))))
)
(setq czgang (angle czg10 czg11))
(setq Bmes (distance czg10 blk10)
Bang (angle czg10 blk10)
)
(setq Cang (- Bang czgang))
(if (< cgz_ang Bang)
(setq Cang (- czgang Bang))
)
(setq Daci (+ Cang (/ pi 2.0)))
(setq Dmes (* Bmes (sin Daci)))
(setq czg_P1 (polar czg10 czgang Dmes))
(command "_line" blk10 czg_P1 "")


(princ "\n Diğer Bloku sec...")
(setvar "OSMODE" 33_osm)
(setvar "CMDECHO" 33_cmd)
(princ)
))
(princ "\n Seçilen çizgiye gösterilen blokta dik çizgi çizer")



yardım edermisiniz ustalar

20.11.2014 11:31    

Travaci
Yapmak istediğiniz resimle gösterirmisiniz.

20.11.2014 12:31    

mttlp
[img] 'https://cizimokulu.com/datas/users/61294-blok.jpg' in /home/cizimoku/public_html/m/system/core/pfs/pfs.inc.php on line 160 [/img]

20.11.2014 12:48    

Travaci
:no

20.11.2014 12:59    

mttlp

20.11.2014 13:14    

mttlp
Usta seçtiğimiz bloklarin basepoint den seçtiğimiz çizgiye dik olarak çizgi çizcek .
Ben bunu çoklu blok seçim yaparak yapmak istiyorum yardimci olurmusunuz

20.11.2014 15:56    

Travaci
Kod:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; Blockların Insert Pointinden Seçilen Line a Dik Çizgi Çizer ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;; Hazırlayan: Erkan Travaci 20.11.2014 ;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:ip2L (/ sl sb n n1) (vl-load-com)
  (prompt "Select line & block(s)") 
  (if (setq sl (ssget "+.:s" (list (cons 0 "line"))))
    (if (setq sb (ssget (list (cons 0 "insert"))))
      (progn (setq n -1)
        (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))  
        (while (< (setq n (1+ n)) (sslength sb))
          (setq n1 (vlax-safearray->list (vlax-variant-value
            (vla-get-InsertionPoint (vlax-ename->vla-object (ssname sb n))))))
          (vla-addline (vla-get-modelspace (vla-get-activedocument
            (vlax-get-acad-object))) (vlax-3d-point n1) (vlax-3d-point
              (vlax-curve-getClosestPointTo (vlax-ename->vla-object
                (ssname sl 0)) n1 t))))
        (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
      )
    )
  ) (prin1)
)

Travaci (12.01.2015 01:35 GMT)

20.11.2014 17:11    

alumina
Donguyu size birakiyorum..

(defun c:zz()
(setq blk (entsel "\nBlogu seciniz:"))
(while
(or (null blk) (/= (cdr (assoc 0 (entget (car blk)))) "INSERT"))
(setq blk (entsel "\nBlogu seciniz:")))
(setq ln (entsel "\nCizgiyi seciniz:"))
(while
(or (null ln) (/= (cdr (assoc 0 (entget (car ln)))) "LINE"))
(setq ln (entsel "\nCizgiyi seciniz:")))
(setq old_osmode (getvar "osmode"))
(setvar "osmode" 0)
(command "._line" (cdr (assoc 10 (entget (car blk)))) (polar (cdr (assoc 10 (entget (car blk)))) (+ (angle (cdr (assoc 10 (entget (car ln)))) (cdr (assoc 11 (entget (car ln))))) (/ pi 2)) 100) "")
(setq ln_son_10 (cdr (assoc 10 (entget (entlast)))))
(setq ln_son_11 (cdr (assoc 11 (entget (entlast)))))
(command "._erase" (entlast) "")
(command "._line" (cdr (assoc 10 (entget (car blk)))) (inters ln_son_10 ln_son_11 (cdr (assoc 10 (entget (car ln)))) (cdr (assoc 11 (entget (car ln)))) nil) "")
(setvar "osmode" old_osmode)
(princ))

20.11.2014 17:25    

mttlp
Teşekkür ler elinize sağlık

21.11.2014 00:05    

alumina
Biraz daha sadeleştirilmiş hali..

(defun c:zz()
(setq blk (entsel "\nSelect insert:"))
(while
(or (null blk) (/= (cdr (assoc 0 (entget (car blk)))) "INSERT"))
(setq blk (entsel "\nSelect insert:")))
(setq ln (entsel "\nSelect line:"))
(while
(or (null ln) (/= (cdr (assoc 0 (entget (car ln)))) "LINE"))
(setq ln (entsel "\nSelect line:")))
(entmake (list (cons 0 "line") (cons 10 (cdr (assoc 10 (entget (car blk))))) (cons 11 (polar (cdr (assoc 10 (entget (car blk)))) (+ (angle (cdr (assoc 10 (entget (car ln)))) (cdr (assoc 11 (entget (car ln))))) (/ pi 2)) 100))))
(setq ln_son_10 (cdr (assoc 10 (entget (entlast)))))
(setq ln_son_11 (cdr (assoc 11 (entget (entlast)))))
(command "._erase" (entlast) "")
(entmake (list (cons 0 "line") (cons 10 (cdr (assoc 10 (entget (car blk))))) (cons 11 (inters ln_son_10 ln_son_11 (cdr (assoc 10 (entget (car ln)))) (cdr (assoc 11 (entget (car ln)))) nil))))
(princ))

21.11.2014 00:57    

alumina
En sade hali..

(defun c:zz()
(setq blk (entsel "\nSelect insert:"))
(while
(or (null blk) (/= (cdr (assoc 0 (entget (car blk)))) "INSERT"))
(setq blk (entsel "\nSelect insert:")))
(setq ln (entsel "\nSelect line:"))
(while
(or (null ln) (/= (cdr (assoc 0 (entget (car ln)))) "LINE"))
(setq ln (entsel "\nSelect line:")))
(entmake (list (cons 0 "line") (cons 10 (cdr (assoc 10 (entget (car blk))))) (cons 11 (inters (cdr (assoc 10 (entget (car blk)))) (polar (cdr (assoc 10 (entget (car blk)))) (+ (angle (cdr (assoc 10 (entget (car ln)))) (cdr (assoc 11 (entget (car ln))))) (/ pi 2)) 100) (cdr (assoc 10 (entget (car ln)))) (cdr (assoc 11 (entget (car ln)))) nil))))
(princ))

21.11.2014 07:29    

ehya
alumina



Yanlış anlamanı istemem ama, sade demek yerine ilkel desek daha doğru olurdu sanırım...

21.11.2014 11:33    

alumina
Peki hocam :)

21.11.2014 11:58    

ehya
Madem bu işi yapıyorsunuz. O zaman nacizane fikrimi söyleyim. Lispiniz mantıklı bir şekilde çalışıyor. Ancak tek nesne üzerine etkili. Bu şekilde her blok için tek tek seçim yapmak gerekir ki, blok sayısı fazla olduğu takdirde bu işlem kullanıcı için biraz ızdırap halini alır. Yazdığınız kodları referans alarak bunu çoğul nesne haline getirebilirdiniz.
Ancak şöyle bir durum daha var ki, bazı işlemlerin kodları autolisp komutları ile uzun sürebiliyor. Travacının yazmış olduğu activex desteği ile bu işlem daha kısa kod yazarak çözülebilir.
Size küçük bir tavsiyem, daha önceden söylemiş olduğum gibi bu activex kodlarını öğrenmelisiniz.

21.11.2014 15:50    

alumina
Hocam;
Travaci'yla sürekli haberlesiyorum. Biraz once onada söyledim. Active-x i yeni ogrenmeye basladim. Daha yeni yeni nesne donusumleri ve kodlarin mantigini öğreniyorum. Evet active-x le 90 derece acinin direkt verildiğini biraz once Travaci'da söyledi. Ama dediğim gibi ben vlisp i yeni yeni ogrenmeye basladim. Peki bilseydim yapar miydim? Hayir. Cunku kodu talep eden arkadaş vlisp kullanmamis. Bilmedigi fonksiyonlarla ona kod yazip vermek kafasini karistirirdi.
Evet kodu tek nesne için yaptım. Arkadasa yazdigim cevaba bakarsaniz donguyu ona biraktigimi söyledim. Yapmaya calissin. Yapamazda yârdim isterse elbette ki yârdim ederim.
Saygilarimla.

> 1 <
Copyright © 2004-2022 SQL: 1.717 saniye - Sorgu: 84 - Ortalama: 0.02044 saniye