Reklam

Çizim Paylaş

Bülten Aboneliği
*  E-posta adresiniz:



* Güvenlik kodu:
İleti Yazar
02.05.2012 18:36
68697    
onderyener

[2] Girişimci

Online Durumu

2 ileti
mühendis
konya

Otomatik alan ve çevre ölçüsü hesaplayıp yazma: Seçilen LwPolyline objelerinin alanı ve çevresi geometrik merkezine Field olarak yazılır

Elimde bir projede yaklaşık 5000 adet polyline var. Bunların hepsinin alanı ve çevresini yazdırmam lazım. Sadece alanı yazıdran bir lisp buldum ama ayrı ayrı alan ve çevrelerini hesaplayıp ortalarına yazdıracak bir lisp var mı acaba?

Teşekkürler


Bu mesaj admin tarafından düzenlendi (26.09.2017 00:01 GMT, 28 Gün önce)

03.05.2012 10:40
68707    
ProhibiT

[80] Yetkili

Online Durumu

1471 ileti
İnşaat Mühendisi
Ankara

Kod:

;|===========================================================================|;
;| pLaC: PoLyLine ALan Çevre                                                 |;
;| Seçilen LwPolyline objelerinin Alanı ve Çevresi, geometrik merkezine,     |;
;| Field olarak yazılır. Yazı Yüksekliği olarak TextSize, ondalık basamak    |;
;| sayısı olarak Luprec değişkenlerinin değeri alınır.                       |;
;|          Hayırlayan: M. Şahin Güvercin - www.autocadokulu.com             |;
;|---------------------------------------------------------------------------|;
(defun c:pLaC (/ *error* pLns Fob n PvT vLo oID x y z PnT m TxH pR pA pC)
  (setvar "cmdecho" 0) (command "_.undo" "group") (vl-load-com)
  (defun *error* (/ er) (princ (strcat "\n" er)) (command "_.undo" "e")(prin1))
  (if (not oFc) (setq oFc 1))
  (setq FaC (getreal (strcat "\nÇizim Birimi/Hesap Birimi <"(rtos oFc)">: ")))
  (if (not FaC) (setq Fac oFc) (setq oFc FaC))
  (princ "\nAlanı ve Çevresi yazılacak LwPolyline objelerini seçiniz: ")
  (setq pLns (ssget (list (cons 0 "LwPoLyLine")))
        Fob (ssadd) n (sslength pLns))
  (while (not (minusp (setq n (1- n))))
    (setq PvT (ssname pLns n) vLo (vlax-ename->vla-object PvT)
          oID (itoa (vla-get-ObjectID vLo)) x 0 y 0 z (getvar "elevation")
          PnT (vlax-safearray->list (vlax-variant-value
                (vlax-get-property vLo 'Coordinates))) m (length PnT))
    (while (not (minusp (setq m (- m 2))))
      (setq x (+ x (nth m PnT)) y (+ y (nth (1+ m) PnT))))
    (setq x (/ x (/ (length PnT) 2)) y (/ y (/ (length PnT) 2))
          TxH (getvar "TextSize") pR (getvar "Luprec")
          pA (polar (list x y z) (/ pi 2.0) (* 0.833333 TxH))
          pC (polar (list x y z) (* pi 1.5) (* 0.833333 TxH)))
    (entmake (list (cons 0 "Text") (cons 10 pA) (cons 40 TxH)
                   (cons 1 (strcat "%<\\AcObjProp Object(%<\\_ObjId " oID
                                   ">%).Area \\f \"%lu2%pr" (itoa pR)
                                   "%ps[A=,]%ct8["(rtos(* FaC FaC)2 8)"]\">%"))
                 (cons 50 0.0) (cons 72 1) (cons 11 pA))) (ssadd (entlast) Fob)
    (entmake (list (cons 0 "Text") (cons 10 pC) (cons 40 TxH)
                   (cons 1 (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " oID
                                   ">%).Length \\f \"%lu2%pr" (itoa pR)
                                   "%ps[C=,]%ct8[" (rtos FaC 2 8) "]\">%"))
                (cons 50 0.0) (cons 72 1) (cons 11 pC))) (ssadd (entlast) Fob))
  (command "_.UpdateFieLd" Fob "") (command "_.undo" "e") (prin1))


Bu mesaj ProhibiT tarafından düzenlendi (15.06.2012 23:24 GMT, --- önce)

Where there is a will, there is a way... Beğenmek için anlamak lazım...

03.05.2012 17:10
68713    
onderyener

[2] Girişimci

Online Durumu

2 ileti
mühendis
konya

teşekkür ederim çok işime yaradı

15.06.2012 12:33
69165    
slayerist

[2] Girişimci

Online Durumu

2 ileti
İç Mimar
Ankara

Merhabalar,

Bugün araştırırken kodu yine bu sitede buldum.
Bulunan alan ve çevre santimetre/santimetrekare cinsinden yazdırılıyor.
m2/mtül ve yüzde basamaklı olaarak yazdırmak için örn: 5,36 m2 8,08 mtül için yardımcı olabilir misiniz?

Şimdiden teşekkür ederim
Saygılar,

15.06.2012 14:27
69166    
ProhibiT

[80] Yetkili

Online Durumu

1471 ileti
İnşaat Mühendisi
Ankara

Kod'un başlangıcındaki Comment satırlarında açıklandığı gibi; Bu fonksiyon santimetre ya da metre gibi birimlerle ilgilenmez. Yazı Yüksekliği ve Ondalık basamak sayısının nasıl kontrol edileceği, zaten açıklanmış.

Bahsettiğiniz gibi santimetre/santimetrekare gibi bir değer hesaplamaz yazdırmaz. Fonksiyon "Drawing Unit" ve "Drawing Unit Kare" birimlerinde değerleri hesaplar ve field'lere atar. Bunun içindir ki, yanına bir birim yazdırmadık.

Doğru soru; "Santimetre biriminde çizdim, metre biriminde yazdırmak istiyorum." şeklinde olmalıydı.
Cevap ta; "Fonksiyonun amaçları arasında böyle birim transformasyonu yoktur." olurdu.

Milimetre çizip, sonuçları dekametre cinsinden almak isteyen bir arkadaşımız çıkarsa, olur ya Kilometre çizip sonuçları desimetre cinsinden, hatta inch/feet çizip metrik birimde, ya da tam tersi sonuç isteyen olursa ne yapacağız. Her özel durum için fonksiyonun yeniden yazılmasını istemek pek insaflı olmaz herhalde. Fonksiyona çizilen ve yazılacak ölçü birimleriyle ilgili sorular ve girdiler eklemek, bunların çevrimiyle ilgili kodları uzatmak ta, böyle basit fonksiyonların amacını aşar herhalde.

Where there is a will, there is a way... Beğenmek için anlamak lazım...

15.06.2012 16:19
69167    
slayerist

[2] Girişimci

Online Durumu

2 ileti
İç Mimar
Ankara

Açıklamalarınız ve bilgilendirmeniz için teşekkür ederim

15.06.2012 23:19
69173    
ProhibiT

[80] Yetkili

Online Durumu

1471 ileti
İnşaat Mühendisi
Ankara

Bu gün yazdığım mesajı okurken, biraz aceleyle yazdığımı farkettim. Öncelikle bunun için kusuruma bakmayın lutfen.
Fonksiyonun koduna bir ilave yaptım, "Cizim Birimi / Hesap Birimi" şeklinde bir orantı girerek, başlangıçta bana uzun bir işlemmiş gibi gelen problemi çözme yoluna gittim. Bu oran sorulduğunda, sizin örneğinizde olduğu gibi Santimetre çizilip sonuçların Metre biriminde yazdırılacağını düşünürsek, 1cm / (1m=100cm) yani 1 / 100 = 0.01 mantığıyla 0.01 girerseniz istediğiniz birimde yazdırmış olacaksınız. Aynı mantığı kullanarak her türlü birim çevirme işlemini yapabilirsiniz. Karışıklığa sebep olmamak için fonksiyonu yeniden yüklemedim, mevcut halini güncelledim. Yukarıdan alıp kullanabilirsiniz.

Kolay gelsin

Where there is a will, there is a way... Beğenmek için anlamak lazım...

27.06.2012 12:29
69295    
emelgr

[1] Yeni üye

Online Durumu

3 ileti
ögrenci
istanbul

Merhabalar,

Forumda çok yeni olduğumdan eğer acemice bir soru soruyorsam kusuruma bakmayın lütfen ama ben yazdığınız kod üzerinden lisp dosyamı olusturup autocade tanıttım. Fakat bir türlü doğru komutu bulamadım. Listenin sonunda 'command' karsılığında yazan şeyleri değişik kombinasyonlar halinde uygulamama ve forumda geniş çaplı araştırma yapmama rağmen herhangi bir sonuç elde edemedim. nasıl çalıştıracağımı açıklayabilirseniz çok sevinirim. Olası cevap için şimdiden teşekkür ederim.

Kolay gelsin.

27.06.2012 13:11
69296    
Travaci

[70] Editör

Online Durumu

2017 ileti
Teknik Ressam
Konstantinopol

çalıştırmak için pLaC

27.06.2012 13:45
69297    
mantık85

[2] Girişimci

Online Durumu

23 ileti
mimar
izmir

Merhabalar,
Kod çok işime yaradı benimde, çok teşekkürler. Ama sorum var; alan içine alan ve çevreyi dolgulu yazıyor, bunu değiştirmemiz mümkün müdür? yazı rengi tek tek seçmeden değiştirilebilir mi? teşekkürler.

27.06.2012 14:45
69300    
Travaci

[70] Editör

Online Durumu

2017 ileti
Teknik Ressam
Konstantinopol

Dolgulu olmasının sebebi yazıların field özelliği olmasındandır yanı alanını çıkardığınız objenın boyutuyla bı oynama yaptıgınızda regen dediğiniz halde yenı alan otomatik olarak yazılacaktır.Bu dolgular çıktıda gözükmüyor, hayır ben hıc gormek ıstemıorum dıosanız komut satırına FIELDDISPLAY enter 0 enter. Yazıları ise toplu halde quick selet komutuyla seçip değiştirebilirsiniz.

27.06.2012 16:35
69301    
emelgr

[1] Yeni üye

Online Durumu

3 ileti
ögrenci
istanbul

Mükemmel! Çok teşekkürler.

27.06.2012 18:42
69302    
mantık85

[2] Girişimci

Online Durumu

23 ileti
mimar
izmir

Çok güzel oldu, çok teşekkür ederim

15.03.2013 16:40
71945    
alfaoz

[3] Kıdemli Girişimci

Online Durumu

30 ileti
inşaat mühendisi
ankara

teşekkürler emeği geçenlere...

16.03.2013 12:28
71959    
map23

[3] Kıdemli Girişimci

Online Durumu

38 ileti
İNŞAAT TEKNİKERİ
ANKARA

ilave rica
sayın hocam bu lisp de alanları çeviriyor ve toplamını yazıyor. ilave olarak şunu yapabilirmiyiz acaba.
layer tabakalarına göre ayırıp toplayabilirmi acaba mesela 1 kesitte farklı 5-6 tane kadar değişik alanı istenen kapalı alanlar var bunları tabakalarına göre kayıtlarını yaptıktan sonra tüm alanları seçtiğimizde a tabakasındaki alanları a1 alanları diye bi tabakaya yada a tabakasına oluşturabilirmiyiz.iyi çalışmalar...

16.03.2013 14:24
71960    
map23

[3] Kıdemli Girişimci

Online Durumu

38 ileti
İNŞAAT TEKNİKERİ
ANKARA

İlave rica;
Sayın hocam, bu lisp de alanları çeviriyor ve toplamını yazıyor. İlave olarak şunu yapabilir miyiz acaba?
Layer'larına göre ayırıp toplayabilir mi? Mesela 1 kesitte farklı 5-6 tane kadar değişik alanı istenen kapalı alanlar var bunları tabakalarına göre kayıtlarını yaptıktan sonra tüm alanları seçtiğimizde a tabakasındaki alanları a1 alanları diye bi tabakaya yada a tabakasına oluşturabilir miyiz. İyi çalışmalar.

Merhaba Şahin hocam, yukarıda bahsettiğim olayı bu Lisp içinde uygulanabilir hale getirebilirseniz daha da güzel olur zannımca. Yine sizin ter akıtıp emeğinizi ortaya koyduğunuz çok güzel bir çalışma:

Linkleri görebilmek için ÜYE olmalısınız.


Bu mesaj ProhibiT tarafından düzenlendi (16.03.2013 14:44 GMT, --- önce)

16.03.2013 14:56
71965    
ProhibiT

[80] Yetkili

Online Durumu

1471 ileti
İnşaat Mühendisi
Ankara

Öncelikle sizlerden bir ricam var. Başka bir yerden aldığınız kodları foruma paste etmeyiniz. Bir Fonksiyon koduna atıf yapacaksanız, linkini vermek daha doğru olur. Aksi halde sitemizde kargaşaya sebep oluyoruz. Üstelik code braketi içine almadığınız kodlarda yanlışlıklar oluyor. Bu anlamda mesajınızı düzenlemek zorunda kaldım.

Buna benzer istekleri fonksiyon koduna eklersek, genel olma özelliğini kaybeder. Yazana da eziyet olur. Buna gerek var mı? Fonksiyonu Filter ile kullanarak belli bir Layer'daki objeler seçilebilir. Ya da, başka bir Lisp fonksiyon (mesela SeLLyr gibi) kullanarak istenilen seçimler yapılabilir.

Kolay gelsin.

Where there is a will, there is a way... Beğenmek için anlamak lazım...

16.03.2013 16:39
71970    
alfaoz

[3] Kıdemli Girişimci

Online Durumu

30 ileti
inşaat mühendisi
ankara

prohibit hocam bu lisp ile ilgili bir sorum var. Yanlış hatırlamıyorsam daha önce komutu çalıştırdığımda seçtiğim texte göre yazıyı yazıyordu ancak şimdi seçili texti değiştirsem bile hep aynı formatta yapıyor. Belkide ben yanlış bi şeyler yapıyorum. Bu kısmını açıklayabilir misiniz? Komut çalıştırıldığında yazılan yazının karakteristik özelliği (yazı karakteri, yüksekliği gibi) nasıl ayarlanıyor...

16.03.2013 23:54
71972    
ProhibiT

[80] Yetkili

Online Durumu

1471 ileti
İnşaat Mühendisi
Ankara

Fonksiyonun başında, "Yazı Yüksekliği olarak TextSize, ondalık basamak sayısı olarak Luprec değişkenlerinin değeri alınır." diye net olarak açıklanmış. O an geçerli Text Style'ın kullanıldığı da zaten belli.

Where there is a will, there is a way... Beğenmek için anlamak lazım...

17.03.2013 00:51
71973    
alfaoz

[3] Kıdemli Girişimci

Online Durumu

30 ileti
inşaat mühendisi
ankara

sn prohibit yazılanı okuma ve okuduğumu anlama kabiliyetine sahibim. Benim sorduğum bi sorunla ilgiliydi sizin dediğiniz şekilde olmamasına sebep olan bir sorun ancak ya ben sorunumu net anlatamadım ya da sizde bende olan kabiliyet yok. Bana sorarsanız ben sorunumu net olarak anlattım.

Copyright © 2004-2017 | Tüm Hakları Saklıdır | 2336 | Site haritası | İstatistikler | Hakkımızda | Kadromuz | Gizlilik | Reklam