10.04.2015 11:48
ibrahimdeniz
|
Arkadaşlar selamlar.. Prohibit hocamdan zamanında istediğim bir lisp var.. Lisp; polyline ile kesişen diğer objelerin kesişim noktalarında polyline vertex atması ile ilgili..Bu lisple ilgili şöyle bir sorun yaşıyorum: Lisp düzgün çalışmasına çalışıyor ama vertex atılması istenen polyline a işlem yapıldığında eğer kapalı bir layer varsa lisp kapalı layerda olsa da kesişen bir obje varsa işleme alıyor.. Ufak bir düzenlemeyle kapalı layerı göz ardı etme işlemi eklenebilir mi ? Lisp in orjinal hali aşağıda ki gibidir.. İlgilenen arkadaşlara şimdiden teşekkür ederim..
Kod:
;|===========================================================================|
| AdVx: Seçilen Polyline nesnesinin diğer çizim nesneleriyle kesiştiği |
| noktalarında yeni Vertex'ler oluşturulur. işleme alınan Polyline |
| nesnesi içinde Arc türü segmentler olduğunda hatalı sonuç verir. |
| Hazırlayan: M. Şahin Güvercin www.cizimokulu.com 08.05.2014 |
|===========================================================================|;
(defun C:AdVx (/ BsLMsf intPoints KesNes m n NewVrtX olderr PLPoints VrtX)
(defun myerr (errmsg)
(if (/= errmsg "\nFunction cancelled") (prompt (strcat "\n" errmsg)))
(command "._undo" "_e") (command "._U") (setq *error* olderr) (princ))
(setvar "cmdecho" 0) (command "undo" "group") (vl-load-com)
(setq olderr *error* *error* myerr) (*push-error-using-command*)
(princ "\nİşleme alınacak Polyline nesnesini seçiniz: ")
(while (not (setq PLineObj (ssget "+.:s" (list (cons 0 "LwPolyLine"))))))
(setq KesNes (ssdel (ssname PLineObj 0)
(ssget "x" (list (cons 0 "*Line,Arc,Circle,Ellipse"))))
PLineObj (vlax-ename->vla-object (ssname PLineObj 0))
PLPoints (vlax-safearray->list (vlax-variant-value
(vlax-get-property PLineObj 'Coordinates))) m -1 n -2 VrtX nil)
(while (< (setq n (+ n 2)) (length PLPoints))
(if VrtX (setq VrtX (append VrtX
(list (list (nth n PLPoints) (nth (1+ n) PLPoints)))))
(setq VrtX (list (list (nth n PLPoints) (nth (1+ n) PLPoints))))))
(while (< (setq m (1+ m)) (sslength KesNes))
(if (not (minusp (vlax-safearray-get-u-bound
(setq intPoints (vlax-variant-value (vla-intersectwith
(vlax-ename->vla-object (ssname KesNes m)) PLineObj 0))) 1)))
(progn (setq intPoints (vlax-safearray->list intPoints) n -3)
(while (< (setq n (+ n 3)) (length intPoints))
(setq VrtX (append VrtX
(list (list (nth n intPoints) (nth (1+ n) intPoints)))))))))
(setq n -1) (while (< (setq n (1+ n)) (length VrtX))
(setq VrtX (append (list (nth n VrtX)) (vl-remove (nth n VrtX) VrtX))))
(setq BsLMsf (mapcar'(lambda (e)(vlax-curve-getDistAtPoint PLineObj e)) VrtX)
VrtX (mapcar'(lambda (e)(nth e VrtX))(vl-sort-i BsLMsf '<)))
(setq n -1 NewVrtX nil) (while (< (setq n (1+ n)) (length VrtX))
(if NewVrtX (setq NewVrtX (append NewVrtX (list (car (nth n VrtX)))
(list (cadr (nth n VrtX)))))
(setq NewVrtX (append (list (car (nth n VrtX)))
(list (cadr (nth n VrtX)))))))
(setq VrtX (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length NewVrtX))))
n -1) (while (< (setq n (1+ n)) (length NewVrtX))
(vlax-safearray-put-element VrtX n (nth n NewVrtX)))
(setq VrtX (vlax-make-variant VrtX)
PLineObj (entget (vlax-vla-object->ename PLineObj))
PLineObJ (subst (cons 90 (/ (length NewVrtX) 2))
(assoc 90 PLineObj) PLineObj) PLineObj (entmod PLineObj)
PLineObj (vlax-ename->vla-object (entupd (cdr (assoc -1 PLineObj)))))
(vlax-put-property PLineObj 'Coordinates VrtX)
(command "_.undo" "end") (setq *error* olderr) (*pop-error-mode*) (prin1))
ProhibiT (17.04.2015 06:11 GMT)
|
10.04.2015 12:37
ehya
|
(while (not (setq PLineObj (ssget "+.:s" (list (cons 0 "LwPolyLine"))))))
satırını
(while (not (setq PLineObj (ssget "+.:s:l" (list (cons 0 "LwPolyLine"))))))
olarak değiştirin.
|
10.04.2015 12:59
ibrahimdeniz
|
Ehya Hocam değiştirdim ama işe yaramadı..
|
10.04.2015 13:17
özkan-wien
|
ikiside olmuyor (layer kilitli oldugu halde)
|
10.04.2015 13:32
ibrahimdeniz
|
(while (not (setq PLineObj (ssget "+.:s:l" (list (cons 0 "LwPolyLine"))))))
bu satır layer kapalı yada freeze edilmiş veya kilitlenmiş dahi olsa işe yaramadı hepsini denedim
(ssget "I" (list (cons 0 "*Line,Arc,Circle,Ellipse")))) bad argument hatası verdi
|
10.04.2015 13:36
ehya
|
olmadı diye birşey yok.
ilk yazdığım mesajda değiştirilen kod'dan sonra ana nesne seçiminde kilitli nesne var ise işleme tabi tutmaz.
doğru bir değişiklik yapmamışsınız.
|
10.04.2015 13:37
Travaci
|
Isolate olsa gerek :wink
|
10.04.2015 13:38
özkan-wien
|
bende de olmadi ehya
normal bi ssget :L yazinca tutmuyo ama bu lispin icinde bu kombinasyon calismiyo +.:s:l
|
10.04.2015 13:42
ehya
|
:dozingoff:dozingoff:dozingoff
bana torpil geçiyor o zaman..
bende çalışıyor...
|
10.04.2015 13:43
özkan-wien
|
dosya olarak yüklesene lispi
|
10.04.2015 13:45
ehya
|
|
10.04.2015 13:46
ibrahimdeniz
|
Hocam tekrar tekrar yükledim lispi hatta autocad i kapatıp tekrar açtım tekrar yükledim lispi ama olmadı her defasında kapalı freeze yada kilitli layerda olan çizgiler işleme aldı
|
10.04.2015 13:48
özkan-wien
|
yine ayni nokta atiyo kesisim yerlerine. ilginc
|
10.04.2015 13:50
özkan-wien
|
arkadasim lazim olmayan layerlari kilitle cizimini 2222 saga cek orda islemini yap geri getir.bu seferlik böyle idare et. olsa dükkan senin olmuyo.
|
10.04.2015 13:51
özkan-wien
|
ben de ay niautocadi kapattim pcyi kapatim actim nerdeyse eve gidip geri gelecegim olmuyo
|
10.04.2015 13:59
ibrahimdeniz
|
Layer isolate i de denedim olmadı ..
|
10.04.2015 13:59
ibrahimdeniz
|
Yine de ilginiz için teşekkür ederim..
|
10.04.2015 14:09
ehya
|
yukarıdaki linkten tekrar dosyayı indirebilirsiniz.
|
10.04.2015 14:18
ibrahimdeniz
|
Automation Error. Not applicable uyarısı veriyor hocam
|
ehya
|
Tekrar test ettim. Herhangi bir sorun yok.
Autocad'in hangi sürümünü kullanıyorsunuz?
|