24.01.2023 07:37    

fakir52
Metraj yaparken kulanabileceğimiz polyline ile cevrilmiş alanların "mahal ismi ve alanını" tablo olarak oluşturan bir lisp paylaşılmış Autdesk forumda. ancak bu lisp alanları (sqfeet-yada başka bir birimde) olarak veriyor. Alan 17,361 kat fazla çıkıyor.
1-Bunu m2 olarak düzenlememiz mümkün müdür?
2- Alan bilgisi yanına çevre bilgisi ekleyebilir miyiz tabloya?
Not: istediğim şeyin zorluk derecesini bilmiyorum.. ama birçok metraj işi yapan kişimin çok işine yarayacak bir lisp olduğunu düşünüyorum. emek verip paylaşım yapan tüm üstadlara saygılarımı sunuyorum. mevcut lisp aşağıdaki gibidir.
Kod:

;;; Poly-Pts (gile)
;;; Returns the vertices list of any type of polyline (WCS coordinates)
;;;
;;; Argument
;;; pl : a polyline (ename or vla-object)
;;;_gile
;;;http://forums.augi.com/showthread.php?83935-Creating-a-list-Polyline-vertices
(defun Poly-Pts (pl / pa pt lst)
  (vl-load-com)
  (setq pa (if (vlax-curve-IsClosed pl)
     (vlax-curve-getEndParam pl)
     (+ (vlax-curve-getEndParam pl) 1)
   )
  )
  (while (setq pt (vlax-curve-getPointAtParam pl (setq pa (- pa 1))))
    (setq lst (cons pt lst))
  )
)
(defun c:RoomArea ( / AllSlctn pobj pobjArea pobjPoints RoomText RoomTextObj pnt loc cnt)
(setq AllSlctn (ssget  '((0 . "LWPOLYLINE"))))
(if AllSlctn
(progn
(setq pnt (getpoint "\nPick the point for table: "))
(setq loc  (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object))))
(setq table (vla-AddTable loc (vlax-3d-point pnt) 2 2 1 5))
(vla-settext table 0 0 "Area Table")
            (vla-settext table 1 0 "Room Label")
            (vla-settext table 1 1 "Area")
(setq cnt 0)
(repeat (sslength AllSlctn)
(setq pobj (ssname AllSlctn cnt))
(setq vlpobj (vlax-ename->vla-object pobj))
(setq pobjArea (vla-get-area vlpobj))
(setq pobjPoints (Poly-Pts pobj))
(setq RoomTextObj (ssget "_WP" pobjPoints '((0 . "*TEXT"))))
(if RoomTextObj
(progn
(setq RoomText (vlax-ename->vla-object(ssname RoomTextObj 0 )))
(vla-insertrows table (+ 2 cnt) 1 1)
(vla-settext table (+ 2 cnt) 0 (vla-get-TextString RoomText))
(vla-settext table (+ 2 cnt) 1 (/(vla-get-area vlpobj)144))
);progn
);if
(setq cnt ( + cnt 1))
);repeat
);progn
);if
);defun

ehya (24.01.2023 07:58 GMT)

24.01.2023 08:01    

ehya
Alt bölümde aşağıdaki satır var.

(vla-settext table (+ 2 cnt) 1 (/(vla-get-area vlpobj)144))

Alan değeri 144'e bölünmüş..
Çiziminiz cm ve siz m2 görmek istiyorsanız bu 144 değerini 10000.0 olacak şekilde değiştirin.

24.01.2023 09:03    

alumina
Alıntı
fakir52 :

Dikkat edin, lispte buyuk sikinti olabilecek bir eksik var. Secilen polyline nesnelere zoom yapilmadan icerisindeki text nesneleri secilmis. Eger table icin pick point yapilmadan once secilen polyline nesnelerin tamami ekranda gorunur durumda olmazsa gorunmeyenler isleme alinmayacak ve siz bunun farkinda olmayacaksiniz.

24.01.2023 23:41    

fakir52
İlgilendiğiniz için teşekkür ederim. söylediğiniz gibi 144 değerini 10000.0 ile değiştirdim ve m2 olarak sonuç aldım. ancak vigülden sonra 14 haneli bir küsürat var. bunu 2 hane olarak düzeltebilir miyiz?

25.01.2023 05:56    

ehya
Alıntı
fakir52 :
İlgilendiğiniz için teşekkür ederim. söylediğiniz gibi 144 değerini 10000.0 ile değiştirdim ve m2 olarak sonuç aldım. ancak vigülden sonra 14 haneli bir küsürat var. bunu 2 hane olarak düzeltebilir miyiz?



ilk mesajımda belirttiğim satırı aşağıdaki ile değiştirin. sondaki 2 rakamı virgülden sonraki basamak sayısını ifade eder. İstediğinize göre değiştirebilirsiniz.

(vla-settext table (+ 2 cnt) 1 (rtos (/(vla-get-area vlpobj)10000.)2 2))

eğer alanın sonuna m2 ifadesi eklemek isterseniz alttaki kodu kullanabilirsiniz.

(vla-settext table (+ 2 cnt) 1 (strcat (rtos (/(vla-get-area vlpobj)10000.)2 2) " m2"))

25.01.2023 07:25    

baha07
merhabalar
lispi kullandigimda resimdeki gibi oluyor . tabloda alan ve mahal no olusmuyor
neyi yanlis yapiyorum
Kod:

;;; Poly-Pts (gile)
;;; Returns the vertices list of any type of polyline (WCS coordinates)
;;;
;;; Argument
;;; pl : a polyline (ename or vla-object)
;;;_gile
;;;http://forums.augi.com/showthread.php?83935-Creating-a-list-Polyline-vertices
(defun Poly-Pts (pl / pa pt lst)
  (vl-load-com)
  (setq pa (if (vlax-curve-IsClosed pl)
     (vlax-curve-getEndParam pl)
     (+ (vlax-curve-getEndParam pl) 1)
   )
  )
  (while (setq pt (vlax-curve-getPointAtParam pl (setq pa (- pa 1))))
    (setq lst (cons pt lst))
  )
)
(defun c:RoomArea ( / AllSlctn pobj pobjArea pobjPoints RoomText RoomTextObj pnt loc cnt)
(setq AllSlctn (ssget  '((0 . "LWPOLYLINE"))))
(if AllSlctn
(progn
(setq pnt (getpoint "\nPick the point for table: "))
(setq loc  (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object))))
(setq table (vla-AddTable loc (vlax-3d-point pnt) 2 2 1 5))
(vla-settext table 0 0 "Area Table")
            (vla-settext table 1 0 "Room Label")
            (vla-settext table 1 1 "Area")
(setq cnt 0)
(repeat (sslength AllSlctn)
(setq pobj (ssname AllSlctn cnt))
(setq vlpobj (vlax-ename->vla-object pobj))
(setq pobjArea (vla-get-area vlpobj))
(setq pobjPoints (Poly-Pts pobj))
(setq RoomTextObj (ssget "_WP" pobjPoints '((0 . "*TEXT"))))
(if RoomTextObj
(progn
(setq RoomText (vlax-ename->vla-object(ssname RoomTextObj 0 )))
(vla-insertrows table (+ 2 cnt) 1 1)
(vla-settext table (+ 2 cnt) 0 (vla-get-TextString RoomText))
(vla-settext table (+ 2 cnt) 1 (rtos (/(vla-get-area vlpobj)10000.)2 3))
);progn
);if
(setq cnt ( + cnt 1))
);repeat
);progn
);if
);defun

25.01.2023 07:40    

ehya
baha 07




polyline içine bir mahal adını kendin yazmalısın..

25.01.2023 09:28    

baha07
tesekkur ederim calisti ...... sonuclar 1011236.5821 alani > tabloda 101.124 veriyordu ,,,,,,

assidaki gibi degistirince duzeldi .

Kod:

(vla-settext table (+ 2 cnt) 1 (rtos (/(vla-get-area vlpobj)10000.)2 3))


Kod:

(vla-settext table (+ 2 cnt) 1 (rtos (/(vla-get-area vlpobj)1.)2 3))

25.01.2023 17:29    

fakir52
Teşekkür ederim Ehya hocam. Uzun süredir çalıştığım bir konuyu sayenizde çözmüş oldum. Bu tabloya bir de alan ilave edilebilirse kaplama metrajlarında vazgeçilmez bir lisp olacak.. Umarım bu konuya da bi el atabilirsiniz..

26.01.2023 05:51    

baha07
Alıntı
fakir52 :
Teşekkür ederim Ehya hocam. Uzun süredir çalıştığım bir konuyu sayenizde çözmüş oldum. Bu tabloya bir de alan ilave edilebilirse kaplama metrajlarında vazgeçilmez bir lisp olacak.. Umarım bu konuya da bi el atabilirsiniz..


orjinal lispde tablo zaten alan yaziyor . senin alandan kastin . yanlis yazdin ve cevre uzunlugunu istiyorsan
bu kodu dene (kod metrik ve ondalik 3 haneye ayarlanmistir . dinzim 0 otomatik ayarlar )
turkce yapmak istiyorsan kodun icinde bulunan assagidaki satirlardaki " ..." icindeki yazilarin yerlerini degistir
(vla-settext table 0 0 "Area Table") ; "Alan Tablosu"
(vla-settext table 1 0 "Room Label") ; "Mahal No"
(vla-settext table 1 1 "Area") ; "Alan"
(vla-settext table 1 2 "length") ; "uzunluk"
Kod:

;;; alanlari,cevre uzunlugunu ve mahal isimlerini  tabloya yazdirir (mahal ismi manuel onceden verilecek )
;;; Poly-Pts (gile)
;;; Returns the vertices list of any type of polyline (WCS coordinates)
;;;
;;; Argument
;;; pl : a polyline (ename or vla-object)
;;;_gile
;;;http://forums.augi.com/showthread.php?83935-Creating-a-list-Polyline-vertices
(defun Poly-Pts (pl / pa pt lst)
        (setvar "dimzin" 0)
  (vl-load-com)
  (setq pa (if (vlax-curve-IsClosed pl)
     (vlax-curve-getEndParam pl)
     (+ (vlax-curve-getEndParam pl) 1)
   )
  )
  (while (setq pt (vlax-curve-getPointAtParam pl (setq pa (- pa 1))))
    (setq lst (cons pt lst))
  )
)
(defun c:RoomArea ( / AllSlctn pobj pobjArea pobjPoints RoomText RoomTextObj pnt loc cnt)
(setq AllSlctn (ssget  '((0 . "LWPOLYLINE"))))
(if AllSlctn
(progn
(setq pnt (getpoint "\nPick the point for table: "))
(setq loc  (vla-get-modelspace(vla-get-activedocument(vlax-get-acad-object))))
(setq table (vla-AddTable loc (vlax-3d-point pnt) 2 3 1 40))
(vla-settext table 0 0 "Area Table")             ; "Alan Tablosu"
            (vla-settext table 1 0 "Room Label") ; "Mahal No"
            (vla-settext table 1 1 "Area")       ; "Alan"
            (vla-settext table 1 2 "length")     ; "uzunluk"
(setq cnt 0)
(repeat (sslength AllSlctn)
(setq pobj (ssname AllSlctn cnt))
(setq vlpobj (vlax-ename->vla-object pobj))
(setq pobjArea (vla-get-area vlpobj))
(setq pobjPoints (Poly-Pts pobj))
(setq RoomTextObj (ssget "_WP" pobjPoints '((0 . "*TEXT"))))
(if RoomTextObj
(progn
(setq RoomText (vlax-ename->vla-object(ssname RoomTextObj 0 )))
(vla-insertrows table (+ 2 cnt) 1 1)
(vla-settext table (+ 2 cnt) 0 (vla-get-TextString RoomText))
(vla-settext table (+ 2 cnt) 1 (rtos (/(vla-get-area vlpobj)1.)2 3))
(vla-settext table (+ 2 cnt) 2 (rtos (/(vla-get-length vlpobj)1.)2 3))
);progn
);if
(setq cnt ( + cnt 1))
);repeat
);progn
);if
);defun

baha07 (26.01.2023 06:13 GMT)

26.01.2023 07:57    

fakir52
orjinal lispde tablo zaten alan yaziyor . senin alandan kastin . yanlis yazdin ve cevre uzunlugunu istiyorsan
bu kodu dene (kod metrik ve ondalik 3 haneye ayarlanmistir . dinzim 0 otomatik ayarlar )

haklısınız. baha07
benim istediğim Çevrenin tabloya eklenmesiydi.
Tıpkı yaptığınız gibi.
değerli katkılarınız için çok teşekkür ederim. lisp tam olarak istediğim formatta oldu.
tablo sütun genişliği gereğinden fazla sadece. ama bu önemli bir konu değil.
Harikasınız. Elinize emeğinize sağlık.

26.01.2023 08:53    

baha07
genisligi istedigin gibi ayarlamak icin sondaki 40 yazan yeri degistirebilirsin .

Kod:

(setq table (vla-AddTable loc (vlax-3d-point pnt) 2 3 1 40))

27.01.2023 08:27    

fakir52
394954-room-area--ornek-cizim.dwg

roomarea lispi bazı çizimlerde çalışmıyor.
tablo ya boş çıkıyor ya da çizimdeki 3-4 tane mahali alıyo sadece.
Alumia'nın dikkat çekmeye çalıştığı konu bu olsa gerek.
lispin çalışmadığı bir çizimi yükledim.
Hata sebebini ve varsa çözüm önerilerinizi paylaşabilir misiniz?

27.01.2023 09:19    

ehya
fakir52




Polyline düğüm noktaları üstüste olursa hata verir.
Çizimi OVERKILL ile temizlersen sorun ortadan kalkacaktır.

27.01.2023 11:50    

baha07
Alıntı
ehya :
fakir52


Polyline düğüm noktaları üstüste olursa hata verir.
Çizimi OVERKILL ile temizlersen sorun ortadan kalkacaktır.


fakir52
1- evet ust uste noktalar var cizimde mesela KORİDOR NK-07 nolu mahalde 2 ayri noktada var
2- mahalden tasan textlerin var mesela NK-06 İŞLİK mahalden disari tastigi icin yine hata veriyor . text tam icinde olmasi lazim
overkill yaparken , senin cizimine uygun olan (ust uste mahal cizildigi icin ) `do not break polylines ` secmeyi unutma
----
polyline cizimlerinde mahalleri kapanislarini c (closed) ile yap . isaretleyerek yapma . her cizimde hatayla karsilasabilirsin

27.01.2023 12:06    

ehya
Yada bu kadar sorunla karşılaşmak istemiyorsanız bu konuda bütçe ayırarak sorunsuz bir program sahibi olabilirsiniz.

> 1 <
Copyright © 2004-2022 SQL: 3.597 saniye - Sorgu: 107 - Ortalama: 0.03362 saniye