Copyright © 2004-2022 SQL: 1.445 saniye - Sorgu: 96 - Ortalama: 0.01505 saniye
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
![]() ![]() |
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
![]() ![]() |
Kod: (defun C:PLLen () Kolay gelsin.
;;;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) )
|
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
![]() ![]() |
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
![]() ![]() |
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
![]() ![]() |
Alıntı ş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
![]() ![]() |
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. ![]() 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) |
![]() ![]() |
Alıntı 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.
![]() |