13.03.2011 16:13    

batros2
Merhaba, yeni bir uye olarak burada acilmis tartismalarin cesitliligi ve sorulara gelen yanitlarin yardimseverliginden etkilendigimi soylemeliyim. degerli zamaninizda calmak istemem o yuzden arastirip ogrenmem gereken konularla ilgili beni yonlendirebilirseniz ben de kendi basima cozmeye calisirim. (ama belki boyle bir lisp vardir, hayat ne guzel olur :) )
benim ihtiyacim su:
1) cizilmis polyline'larin uzunluklarini, cizime yazmak. plol ve pluz lisplerine rastladim internette. ıkisi de pek faydali, lakin (lisp yazmayi bilmiyorum, bin kunduz!) plol, her bir line segmentinin de uzunlugunu giriyor ve ben bunu istemiyorum ayrica virgulun yerini ayarlama konusunda da sorun yasiyorum. virgulun yerini ikiser ikiser kaydiriyor. pluz istedigim gibi ama onda da virgulun yerini degistirmeyle ilgili bir ayar yok ne yazik ki.
daha da onemlisi
2) her bir polyline icin teker teker bu komutu tekrarlamak istemiyorum. (yuzlercesi sozkonusu) hepsini secip, polyline'larin olcusunu, her bir polyline'ın basladigi yere kendiliginden yerlestirmesini istiyorum. (cok mu sey istiyorum)
bir de, benim simdiye kadar pluz ile olculendirdiklerim cizimin olcu birimi mm oldugu icin o cinsten olculendiriliyor ama ben metre cinsinden gormek istiyorum. hepsini birden (ornegin 12834'dan, 12.8 olarak) degistirmenin pratik bir yolunu biliyor musunuz? ben bulamadim bunu yapmanın yolunu.
kaybolmus durumdayim.

simdiden tesekkurler

14.03.2011 08:24    

ProhibiT
Merhaba,
plol fonksiyonunu ara mesafeleri yazmayacak şekilde düzenledim. burada dikkatinizi çekmek istediğim nokta, bu fonksiyon lwpolyline objelerini işler polyline objelerinin yapısı daha farklıdır.
Kod:

(defun C:PLLen ()
;;;M.Ş.Guvercin 14/03/2011 - 09:50
  (setvar "cmdecho" 0) (command "undo" "group")
  (if (= Lufo nil) (setq Lufo 1))
  (if (not (setq Luf (getreal (strcat "\nCizilen/Yazılan orani <" (rtos Lufo) "> :"))))
    (setq Luf Lufo))
  (if (= dpo nil) (setq dpo 2))
  (if (not (setq dp (getint (strcat "\nOndalik basamak sayisi <" (rtos dpo) "> :"))))
    (setq dp dpo))
  (setq L 0 tx (* (getvar "dimscale") (getvar "dimtxt")))
  (setq pLLine (car (entsel "\n  Uzunluğu yazılacak PoLyLine'ı seçiniz")))
  (if (/= "LWPOLYLINE" (cdr (assoc 0 (entget pLLine))))
    (progn (princ "\Secilen Obje PoLyLine değil!") (exit)))
  (setq pLLine (entget pLLine) sn (assoc 10 pLLine) n1 (cdr sn)
        pLLine (subst (cons 11 n1) sn pLLine))
  (if (= (cdr (assoc 70 pLLine)) 1) (setq pLLine (append pLLine (list sn))))
  (while (setq n2 (cdr (assoc 10 pLLine)))
    (setq ms (distance n1 n2) n1 n2 L (+ L ms)
          pLLine (subst (cons 11 n1) (assoc 10 pLLine) pLLine)))
  (setq Lp (getpoint "\n    Uzunluğun yazılacağı yeri seçiniz : ")
        L (strcat "L=" (rtos (* L Luf) 2 dp)))
  (if Lp (entmake (list (cons 0 "TEXT") (cons 10 Lp) (cons 40 tx)
                        (cons 1 L) (cons 50 0.0) (cons 72 1) (cons 11 Lp))))
  (setq Lufo Luf dpo dp) (command "undo" "e") (prin1)
)

Çizim içindeki tüm PoLyLine objelerini tek seferde alıp uzunluklarını yazma konusunda Text'in yazılacağı yer tanımsız kalır. her polyline'ın başlangıç noktasına yazılırsa da, anarşi çıkar diye düşünüyorum. siz biraz daha kafa yorun, çözüm anlamdında bir yöntem belirlerseniz, birlikte bir şeyler üretiriz :)

kolay gelsin.

14.03.2011 10:37    

batros2
Prohibit,
yanitiniz icin mutesekkirim.
uzunluklarin cizginin baslangicina yerlestirilmesi ise amacina son derece uygun. eger metnin yerlestirilecegi yeri ben secmek zorunda kalmazsam ve komut icin toplu secim yapabilirsem cok ama cok iyi olacak.
saygilarimla

14.03.2011 11:31    

ProhibiT
Kod:

(defun C:PLLen ()
;;;M.Ş.Guvercin 14/03/2011 - 13:30
  (setvar "cmdecho" 0) (command "undo" "group")
  (if (= Lufo nil) (setq Lufo 1))
  (if (not (setq Luf (getreal (strcat "\nCizilen/Yazılan orani <" (rtos Lufo) "> :"))))
    (setq Luf Lufo))
  (if (= dpo nil) (setq dpo 2))
  (if (not (setq dp (getint (strcat "\nOndalik basamak sayisi <" (rtos dpo) "> :"))))
    (setq dp dpo))
  (setq tx (* (getvar "dimscale") (getvar "dimtxt")))
  (princ "\n  Uzunluğu yazılacak PoLyLine'ları seçiniz (Enter=Tüm Çizim)...")
  (setq pLLines (ssget (list (cons 0 "LWPOLYLINE"))))
  (if (not pLLines) (setq pLLines (ssget "x" (list (cons 0 "LWPOLYLINE")))))
  (setq L (sslength pLLines) n -1)
  (while (< (setq n (1+ n)) L)
    (setq pLLine (entget (ssname pLLines n)) sn (assoc 10 pLLine)
          n1 (cdr sn) pLLine (subst (cons 11 n1) sn pLLine) Len 0)
    (if (= (cdr (assoc 70 pLLine)) 1) (setq pLLine (append pLLine (list sn))))
    (while (setq n2 (cdr (assoc 10 pLLine)))
      (setq Len (+ Len (distance n1 n2)) n1 n2
            pLLine (subst (cons 11 n1) (assoc 10 pLLine) pLLine)))
    (setq Len (strcat "L=" (rtos (* Len Luf) 2 dp)))
    (entmake (list (cons 0 "TEXT") sn (cons 40 tx) (cons 1 Len)
                   (cons 50 0.0) (cons 72 1) (cons 11 (cdr sn)))))
  (setq Lufo Luf dpo dp) (command "undo" "e") (prin1)
)
Kolay gelsin.

14.03.2011 13:39    

batros2
Pek sevgili prohibit,
lisp'i cok kısaca denedim ve calisiyor. cok hayır duasi aldiniz, ne kadar tesekkur etsem azdır.
zaman harcadınız, binlerce tesekkurler...
(ben de lisp yazmasini ogrenecegim, kitabim bugun geldi, ve kimseye yuk olmayip, kendi lispimi yazmakla kalmayıp, yardim isteyenlere de yardim edecegim)

* sonlarına metrenin 'm' kısaltmasini nasil eklerim?

batros2 (14.03.2011 17:29 GMT)

17.03.2011 15:08    

ProhibiT
Yazıların başına ve sonuna (önek, sonek) istenilen eklemeleri yapacak şekilde değiştirilmiş, LwPolyLine'ların yanısıra PoLyLine objelerini de ölçülendirecek şekilde düzenlenmiş hali;
Kod:

;;;====================================================================
;;; Komut adı: PLLen                                                   
;;; Belirlenen Layer'da bulunan tüm LWPOLYLINE ve POLYLINE objelerinin
;;; uzunluklarını hesaplar ve başlangıcına yazar                       
;;;                   Hazırlayan, M. Şahin Güvercin - 17-03-2011 11:15
;;;====================================================================
(defun C:PLLen ()
  (setvar "cmdecho" 0) (command "undo" "group") (if (= Lufo nil) (setq Lufo 1))
  (if (not (setq Luf (getreal
                    (strcat "\n  Çizilen/Yazılan orani <" (rtos Lufo) "> :"))))
    (setq Luf Lufo)) (if (= dpo nil) (setq dpo 2))
  (if (not (setq dp (getint
                  (strcat "\n    Ondalik basamak sayisi <" (rtos dpo) "> :"))))
    (setq dp dpo))
  (/= (setq bR (getstring T "\n  Uzunluk Birimi : ")) "")
  (/= (setq oE (getstring T "\n    Önek : ")) "")
  (setq tx (* (getvar "dimscale") (getvar "dimtxt")))
  (princ "\n  Uzunluğu yazılacak PoLyLine'ları seçiniz (Enter=Tüm Çizim)...")
  (setq pLLines (ssget (list (cons 0 "*POLYLINE"))))
  (if (not pLLines) (setq pLLines (ssget "x" (list (cons 0 "*POLYLINE")))))
  (setq L (sslength pLLines) n -1)
  (while (< (setq n (1+ n)) L)
    (if (= (cdr (assoc 0 (setq pLLine (entget (ssname pLLines n)))))
           "LWPOLYLINE")
      (progn (setq sn (assoc 10 pLLine) n1 (cdr sn) pLLine (subst (cons 11 n1)
                                                              sn pLLine) Len 0)
        (if (= (cdr (assoc 70 pLLine)) 1)
          (setq pLLine (append pLLine (list sn))))
        (while (setq n2 (cdr (assoc 10 pLLine)))
          (setq Len (+ Len (distance n1 n2)) n1 n2
                pLLine (subst (cons 11 n1) (assoc 10 pLLine) pLLine))))
      (progn
        (setq sn (assoc 10 (entget
                             (setq pvt (entnext (cdr (assoc -1 pLLine))))))
              n1 (cdr sn) Len 0)
        (while (= (cdr (assoc 0 (entget (setq pvt (entnext pvt))))) "VERTEX")
          (setq Len (+ Len (distance n1
                              (setq n2 (cdr (assoc 10 (entget pvt)))))) n1 n2))
        (if (= (cdr (assoc 70 pLLine)) 1)
          (setq Len (+ Len (distance n1 (cdr sn)))))))
    (setq Len (strcat oE (LeTa (* Len luf)) bR))
    (entmake (list (cons 0 "TEXT") sn (cons 40 tx) (cons 1 Len)
                   (cons 50 0.0) (cons 72 1) (cons 11 (cdr sn)))))
  (setq Lufo Luf dpo dp) (command "undo" "e") (prin1)
)
(princ "\n Hazırlayan, M. Sahin Guvercin - www.autocadokulu.com")
(defun LeTa (vL / uz sr frk yer)
  (setq vL (rtos vL 2 dpo) uz (strlen vL) sr 1)
  (while (and (< sr uz) (/= (substr vL sr 1) ".")) (setq sr (+ sr 1)))
  (setq yer (- uz sr) frk (- dpo yer))
  (if (and (= yer 0) (/= dpo 0)) (setq vL (strcat vL ".")))
  (while (> frk 0) (setq vL (strcat vL "0")) (setq frk (- frk 1)))
  (setq vL vL)
)

ProhibiT (14.11.2011 14:13 GMT)

21.03.2011 13:53    

batros2
Cizilen yazilan orani nedense calismiyor, bir onceki versiyonda calisiyor halbuki.

21.03.2011 14:05    

ProhibiT
Len değerini subroutine'e gönderirken Luf ile çarpmayı unutmuşum. :(
düzeltmeyi yapıp fonksiyonu yeniledim tekrar denerseniz çalışacaktır.

önek'in sonuna boşluk karakteri girebilirsiniz. sonek'in başına boşluk karakteri girmek için; önce boşluk, sonra alt+255 ve sonra da sonek girmelisiniz...

kolay gelsin.

ProhibiT (21.03.2011 14:13 GMT)

31.10.2013 09:42    

arincakkin
Pllen lisp'ini uzunluğu yazılan polyline ile aynı açıda yazdırmak mümkün müdür?

17.09.2023 08:42    

alisezgin
Alıntı
ProhibiT :
Yazıların başına ve sonuna (önek, sonek) istenilen eklemeleri yapacak şekilde değiştirilmiş, LwPolyLine'ların yanısıra PoLyLine objelerini de ölçülendirecek şekilde düzenlenmiş hali;
Kod:

;;;====================================================================
;;; Komut adı: PLLen
;;; Belirlenen Layer'da bulunan tüm LWPOLYLINE ve POLYLINE objelerinin
;;; uzunluklarını hesaplar ve başlangıcına yazar
;;;                   Hazırlayan, M. Şahin Güvercin - 17-03-2011 11:15
;;;====================================================================
(defun C:PLLen ()
  (setvar "cmdecho" 0) (command "undo" "group") (if (= Lufo nil) (setq Lufo 1))
  (if (not (setq Luf (getreal
                    (strcat "\n  Çizilen/Yazılan orani <" (rtos Lufo) "> :"))))
    (setq Luf Lufo)) (if (= dpo nil) (setq dpo 2))
  (if (not (setq dp (getint
                  (strcat "\n    Ondalik basamak sayisi <" (rtos dpo) "> :"))))
    (setq dp dpo))
  (/= (setq bR (getstring T "\n  Uzunluk Birimi : ")) "")
  (/= (setq oE (getstring T "\n    Önek : ")) "")
  (setq tx (* (getvar "dimscale") (getvar "dimtxt")))
  (princ "\n  Uzunluğu yazılacak PoLyLine'ları seçiniz (Enter=Tüm Çizim)...")
  (setq pLLines (ssget (list (cons 0 "*POLYLINE"))))
  (if (not pLLines) (setq pLLines (ssget "x" (list (cons 0 "*POLYLINE")))))
  (setq L (sslength pLLines) n -1)
  (while (< (setq n (1+ n)) L)
    (if (= (cdr (assoc 0 (setq pLLine (entget (ssname pLLines n)))))
           "LWPOLYLINE")
      (progn (setq sn (assoc 10 pLLine) n1 (cdr sn) pLLine (subst (cons 11 n1)
                                                              sn pLLine) Len 0)
        (if (= (cdr (assoc 70 pLLine)) 1)
          (setq pLLine (append pLLine (list sn))))
        (while (setq n2 (cdr (assoc 10 pLLine)))
          (setq Len (+ Len (distance n1 n2)) n1 n2
                pLLine (subst (cons 11 n1) (assoc 10 pLLine) pLLine))))
      (progn
        (setq sn (assoc 10 (entget
                             (setq pvt (entnext (cdr (assoc -1 pLLine))))))
              n1 (cdr sn) Len 0)
        (while (= (cdr (assoc 0 (entget (setq pvt (entnext pvt))))) "VERTEX")
          (setq Len (+ Len (distance n1
                              (setq n2 (cdr (assoc 10 (entget pvt)))))) n1 n2))
        (if (= (cdr (assoc 70 pLLine)) 1)
          (setq Len (+ Len (distance n1 (cdr sn)))))))
    (setq Len (strcat oE (LeTa (* Len luf)) bR))
    (entmake (list (cons 0 "TEXT") sn (cons 40 tx) (cons 1 Len)
                   (cons 50 0.0) (cons 72 1) (cons 11 (cdr sn)))))
  (setq Lufo Luf dpo dp) (command "undo" "e") (prin1)
)
(princ "\n Hazırlayan, M. Sahin Guvercin - www.autocadokulu.com")
(defun LeTa (vL / uz sr frk yer)
  (setq vL (rtos vL 2 dpo) uz (strlen vL) sr 1)
  (while (and (< sr uz) (/= (substr vL sr 1) ".")) (setq sr (+ sr 1)))
  (setq yer (- uz sr) frk (- dpo yer))
  (if (and (= yer 0) (/= dpo 0)) (setq vL (strcat vL ".")))
  (while (> frk 0) (setq vL (strcat vL "0")) (setq frk (- frk 1)))
  (setq vL vL)
)




şefim merhaba , lisple alakalı sizden bir isteğim olacak , bu lispte şu şekilde değişiklik yapabilir miyiz ;
1-benden hiçbir bilgi istemesine gerek yok , pline nin uzunluğunu direk yazdırabilir
2-plinenin her iki ucunada metrajı yazdıracak (olmazsa olmaz değil olmasada olur)
3-yazdırdığı textin base point CENTER yerine LEFT yapabilir miyiz ?

şimdiden teşekkürler

17.09.2023 13:42    

ProhibiT
Kod:

;|***************************************************************************|
| pLLy: Polyline uzunluklarını başlangıç noktasına field olarak yazar.      |
|       pLLn fonskiyonu yerine özel istek üzerine yazıldı.                  |
|       M. Şahin Güvercin (Prohibit) 17.09.2023 www.cizimokulu.com          |
|___________________________________________________________________________|;
(defun c:pLLy (/ *error* txh n PvT BsP LnF)
(vl-load-com) (setq ocmd (getvar "cmdecho"))
  (defun *error* (er / )
    (if (member er '("Function cancelled" "quit/exit abort"))
      (princ (strcat "\n\t*error* " er)))
    (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
    (if ocmd (setvar "cmdecho" ocmd)) (prin1))
  (command "_undo" "group") (setvar "cmdecho" 0)
  (while (not (setq pLLns (ssget (list (cons 0 "*POLY*"))))))
  (setq txh (* (getvar "dimscale") (getvar "dimtxt")) n (sslength pLLns))
  (while (setq PvT (ssname pLLns (setq n (1- n))))
    (setq BSp (vlax-safearray->list (vlax-variant-value (vlax-get-property
                    (vlax-ename->vla-object PvT) 'Coordinates)))
      BSp (list (nth 0 BSp) (nth 1 BSp))
          LnF (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                      (itoa (vla-get-ObjectID (vlax-ename->vla-object PvT)))
                      ">%).Length \\f "%lu2">%"))
    (entmake (list (cons 0 "TEXT") (cons 10 BSp) (cons 40 txh) (cons 1 LnF)
                   (cons 50 0.00) (cons 72 0) (cons 11 BSp)))
    (command "_.UpdateFieLd" (entlast) ""))
  (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
  (if oosm (setvar "osmode" oosm)) (if ocmd (setvar "cmdecho" ocmd)) (prin1))

Kod içinde field kullanıldığından, büyük ihtimalle buradan aldığınızda hata mesajıyla karşılaşacaksınız.
174410-plly.lsp Buradan tıklayarak indirirseniz bir sıkıntı yaşanmaz.

PLLen fonksiyon da aynı bu şekilde birkaç satır olarak başlamış, bir yerden sonra kesmek zorunda kaldığımız isteklerle yukarıdaki haline gelmişti. Umarım pLLy fonksiyonu da aynı şekilde sündürülmez.

Kolay gelsin

25.11.2023 09:01    

fakir52
Merhabalar. Konu ne kadar güncel bilmiyorum.
PLlen lispi ile selçtiğimiz polyline ların üzerine önek ile L: .... m olarak yazdırıyoruz. Buna ilaveten
Önekleri L1, L2, L3 olarak seçim sırasına göre numarandırarak düzenleyebilir miyiz bu lispte.
Vakit ayırdığınız için teşekkür ederim.

fakir52 (30.11.2023 11:19 GMT)

26.11.2023 04:21    

ProhibiT
Alıntı
ProhibiT :
Kod:

;|***************************************************************************|
| pLLy: Polyline uzunluklarını başlangıç noktasına field olarak yazar.      |
|       pLLn fonskiyonu yerine özel istek üzerine yazıldı.                  |
|       M. Şahin Güvercin (Prohibit) 17.09.2023 www.cizimokulu.com          |
|___________________________________________________________________________|;
...

....
PLLen fonksiyon da aynı bu şekilde birkaç satır olarak başlamış, bir yerden sonra kesmek zorunda kaldığımız isteklerle yukarıdaki haline gelmişti. Umarım pLLy fonksiyonu da aynı şekilde sündürülmez.
...


Bu ve benzeri o kadar çok Lisp paylaşılmış ki, Bunlardan birini alıp düzenlemek hiç te zor olmasa gerek. Burada Açık Kod paylaşmamızın bir nedeni de, kullanıcıların bunları kendi ihtiyaçlarına uyarlayıp düzenleyerek, hem işlerini görmeleri hem de öğrenmeleridir.

16.01.2024 05:26    

mtclass
Alıntı
ProhibiT :
Alıntı
ProhibiT :
Kod:

;|***************************************************************************|
| pLLy: Polyline uzunluklarını başlangıç noktasına field olarak yazar.      |
|       pLLn fonskiyonu yerine özel istek üzerine yazıldı.                  |
|       M. Şahin Güvercin (Prohibit) 17.09.2023 www.cizimokulu.com          |
|___________________________________________________________________________|;
...

....
PLLen fonksiyon da aynı bu şekilde birkaç satır olarak başlamış, bir yerden sonra kesmek zorunda kaldığımız isteklerle yukarıdaki haline gelmişti. Umarım pLLy fonksiyonu da aynı şekilde sündürülmez.
...


Bu ve benzeri o kadar çok Lisp paylaşılmış ki, Bunlardan birini alıp düzenlemek hiç te zor olmasa gerek. Burada Açık Kod paylaşmamızın bir nedeni de, kullanıcıların bunları kendi ihtiyaçlarına uyarlayıp düzenleyerek, hem işlerini görmeleri hem de öğrenmeleridir.

16.01.2024 05:29    

mtclass
POLYLINE CIZGISININ UST TARAFINA DEGISKEN TEXT ORNEGIN Ø 75 HDPE . ALT KISMINA ISE POLYLINE UZUNLUGUNU L= 120.23 GIBI YAZDIRABILIRMIYIZ .

> 1 <
Copyright © 2004-2022 SQL: 1.395 saniye - Sorgu: 99 - Ortalama: 0.01409 saniye