31.07.2010 16:10    

CAN123
Cevabınız için çok teşekkur ederim, açıkçası bu kadar hızlı cevap beklemiyordum:)

Bu lispin içerisine dairelerin çaplarını ve eklenecek olan dairelerin çaplarını girerek hepsini bir defada ekletmek mümkünmü? eklenecek dairelerin katmanınıda o an acık olan katmana gore ekleyebilirmiyiz.

Aynı koordinattaki dairelere sadece bir adet daire ekletebilirmiyiz, mesela aynı koordinatta aynı çapta 3-4 tane daire çizilmiş ama ben o koordinata sadece 1 adet daire ekletmek istiyorum.
bu şekilde olursa bana buyuk kolaylık sağlamış olacak.
çok teşekkur ederim...

CAN123 (31.07.2010 16:52 GMT)

31.07.2010 22:29    

ehya
Alıntı
CAN123 :
Cevabınız için çok teşekkur ederim, açıkçası bu kadar hızlı cevap beklemiyordum:)

Bu lispin içerisine dairelerin çaplarını ve eklenecek olan dairelerin çaplarını girerek hepsini bir defada ekletmek mümkünmü? eklenecek dairelerin katmanınıda o an acık olan katmana gore ekleyebilirmiyiz.

Aynı koordinattaki dairelere sadece bir adet daire ekletebilirmiyiz, mesela aynı koordinatta aynı çapta 3-4 tane daire çizilmiş ama ben o koordinata sadece 1 adet daire ekletmek istiyorum.
bu şekilde olursa bana buyuk kolaylık sağlamış olacak.
çok teşekkur ederim...




- lisp zaten seçime dahil edilecek dairelerin yarıçapını ve eklenecek dairelerin yarıçapını sormaktadır. Sorunuzu anlamış değilim.
- Aynı koordinattaki daireleri ayırt etmek biraz uğraştırır. Daha kolay olması açısından OVERKILL komutunu kullanarak üst üste gelen nesneleri temizleyerek daha rahat kullanabilirsiniz.
- Eklenecek katmanın rengini seçilen daire olması daha uygun olur diye düşünmüştüm. Madem istemiyorsunuz, aşağıdaki kodu mevcut kodlamadan silin.

Kod:

(cons 8 katman)

31.07.2010 23:36    

CAN123
Teşekkur ederim.

Katman sorunu dediğiniz gibi yapınca düzeldi. Aslında istemiş olduğum şey lispin içerisine mevcut dairelerin çaplarını girip bunlara yeni daireleri eklemesi. Mesela komut çalıştıgında

Ø24'e Ø18
Ø30'a Ø22
Ø18'e Ø14
Ø36'ya Ø24
daire eklemesi.

Teşekkur ederim...

CAN123 (03.08.2010 15:45 GMT)

15.08.2010 21:08    

Harbi65
DCL arayüz de image_button tanımladım. Bu imageleri tıkladığımda backgraund'un rengini değişmesini istiyorum...
Komutu tekrar çalıştırmada son seçilmiş olanın backgrandu farklı olarak gelmesini sağlıyorum ama seçim esnasında bunu değiştirmeyi yapamadım... Bunu nasıl yapabilirim?

15.08.2010 22:01    

serzenis
Merhaba;
Bir dialog kutusu oluşturdum(***.dcl)İçersinde 3-4 tane edit_box var.Aynı şekilde oluşturduğum lisp sayesinde dialog kutusunu ve keylerini yönetmeye çalışıyorum.
Sizlere sorum;
block yaptığım Attribute çift çıkladığımda(EATTEDIT), en başta yaptığım dialog kutusunun açılmasını istiyorum.
Bunun için lispi düzenleyemedim.bu konudaki komutları veya yöntem ile ilğili örneğiniz varsa paylaşırsanız sevinirim.
Bu şekilde attribute deki verileri dialog kutumdaki edit_box larla girerek ,keyler ile işlem yaptıracağım.
İyi geceler...

01.11.2010 11:53    

Harbi65
Örneğin "30494.84" gibi bir dize var. Bunu gerçek sayıya çevireğim.
atof ve distof 'la çevirdiğimde 30494.8 şeklinde sonucu veriyor...
Bunu tam olarak nasıl çeviririm?

Her iki komutlada virgülden önce 5 haneden az olursa virgülden sonra gerçek sonucu veriyor... Bunun müdehalesi var mı?

02.11.2010 09:52    

ProhibiT
Harbi65 hocam, teşhisiniz doğru, real sayılarda böyle bir özellik var.

Reals A real is a number containing a decimal point. Numbers between -1 and 1 must contain a leading zero. Real numbers are stored in double-precision floating-point format, providing at least 14 significant digits of precision.
Note that VLISP does not show you all the significant digits. Reals can be expressed in scientific notation, which has an optional e or E followed by the exponent of the number (for example, 0.0000041 is the same as 4.1e-6).
Numbers such as 3.1, 0.23, -56.123, and 21,000,000.0 are valid AutoLISP reals.

... diyor AutoDesk.

Real sayılar çifte-hassasiyetli kayar-noktalı sayı formatında saklanırlar.
Ondalık noktasından sonra 14 basamağa kadar anlamlıdır.
VLisp anlamlı basamakların hepsini göstermez.

(atof "30494.84") returns 30494.8 ve (distof "30494.84") returns 30494.8

Göstermemekle birlikte; (= (atof "30494.84") 30494.84) returns T'dur. Yani göstermediği basamakları da aslında gözardı etmiyor :)

(= (distof (rtos 30494.84 1 6)) 30494.84) returns T

Eğer "30494.84" sayısını bir kıyaslama ve kontrol için kullanacaksanız, 3.049484E+04 şeklinde tutun.

(setq a (rtos 30494.84 1 6)) returns "3.049484E+04"
şeklinde a değişkeninde tuttuğumuzda;

(= (distof a) 30494.84) returns T ve (= (atof a) 30494.84) returns T



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

Linkinde paylaştığım fonksiyonda;
(setq ln (strlen X) yr (vl-string-position 46 X))
(cond ((= yr 0) (setq X (strcat "0" X))) ((= yr nil) (setq X (strcat X ".00"))) ((= (- ln yr) 2) (setq X (strcat X "0"))))
(setq ln (strlen Y) yr (vl-string-position 46 Y))
(cond ((= yr 0) (setq Y (strcat "0" Y))) ((= yr nil) (setq Y (strcat Y ".00"))) ((= (- ln yr) 2) (setq Y (strcat Y "0"))))
şeklinde bir uygulama yapmıştım. Probleminiz bununla ilgili mi? tam kestiremedim, belki bir faydası olur...

Konunun detayına inersek;
(+ 2147483647 1) returns -2147483648
şeklinde iki pozitif tamsayının toplamından negatif bir sayı çıkar! :)

AutoLisp ve Visual Lisp'in sayıları hafızada tutma şekli ve sınırlarından kaynaklanıyor...

Kolay gelsin...

ProhibiT (02.11.2010 10:12 GMT)

02.11.2010 10:39    

Harbi65
ProhibiT hocam detaylı açıklama için teşekkür ederim...
Bu mesajı yazdığımda değişken değerlerine baktığımda tamamını göremeyince panikledim galiba:) Ama göstermese de değerleri tam olarak verdiğini akşam farkettim...
Fakat bu detaylı açıklama yinede iyi oldu. teşekkürler...

Bu arada vl-string-position komutunuda açıklarsanız sevinirim...

02.11.2010 12:16    

ProhibiT
(vl-string-position [Ascii Code] [String]) detaya girmeden genel anlamıyla bakarsak, ascii codu verilen karakterin, string içindeki sırasını veriyor. Sıra numaraları 0'dan başlıyor.

Verdiğim örnekte ascii kodu 46 olan karakter nokta (.) karakteri. Real sayıdan çevirdiğim string içinde noktanın yerini buluyorum. (vl-string-position 46 "125.60") -> 3 olarak veriyor. buradan da ondalık noktasının solunda 3, sağında 2 basamak olduğunu buluyorum...

Ben önce XLisp, ZetaLisp ve Lisp gibi genel Lisp dilini öğrenip sonradan AutoLisp'e geçtiğim için, bazı detayları algılamam ve kullanışım farklı olabiliyor. Yeri geldikçe ve fırsat buldukça, kıyıda köşede kalmış detayları paylaşmak istiyorum.



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

Linkinde paylaştığım fonksiyonda da farklı bir incelik kullandım
(if (equal (* nKs aRm) MsF 0.000001) (setq bLm "tam") (setq bLm "ksr"))

örneği açarsak;
(setq a 12.00 b 12.01) c b d 12.01) değerlerini verdiğimizde;
(= a b) -> nil
(equal a b 0.01) -> T
(= b c d) -> T

(setq x1 '(a b c) x2 '(a b c) x3 x2)
değerlerini girdiğimizde;

(= x1 x2) -> nil
(eq x1 x2) -> nil
(equal x1 x2) -> T

(= x1 x3) -> nil
(eq x1 x3) -> nil
(equal x1 x3) -> T

(= x2 x3) -> T
(eq x2 x3) -> T
(equal x2 x3) -T
olduğunu görüyoruz.

Pek çok yazar arkadaşımıza göre her üçü de aynı ne gerek varki diye düşündüğümüz operatörlerin ne kadar farklı olduklarını görebiliyoruz...

Kolay gelsin.

ProhibiT (04.01.2011 15:38 GMT)

02.11.2010 12:40    

Harbi65
Anladım hocam. Sağol.
Ben bu iş için (vl-string-search "." "string") komutunu kullanıyordum.
Aralarında ki fark da aranan karakteri birinde string olarak belirtiyoruz, diğerinde ise ASCII koduyla...
Tabi ki bu işlem kullanılan yere ve koşullara göre değişcektir...

03.12.2010 11:28    

men3455
Mrb .Yardımcı olabilirseniz benim ve haritacılara kolaylık sağlayacak.Eğer oluyorsa tabi ki.Ben Harita Teknikeriyim.Sorum şöyle olacak...Autocad dosyasında bir yerin halihazırı alınmış olarak çizimi vardır.Autocadde noktalar gözükmezler.Nokta isimleri ve kotlar text halinde görünürler.Netcad de bende kübaj hesabı yapmak isitiyorum.Kübaj hesabı yapabilmemiz için nokta dosyası(xyz koordinat sistemi)olması lazım.Autocad deki dosyayı Netcade dönüştürdüğümüzde nokta dosyası oluşmuyor.Bir sürü nokta var.Ve tek tek girersek çok vakit alır.Daire içine point yapabileceğimiz (çoğul olarak) ve bunu text e (koordinatlı_xyz olarak)yazdırabilecek lisp varmıdır?Yardımcı olursanız teşekkür ederim.Yapamasanız da canınız sağolsun.
Kolay gelsin.İyi günler...

men3455 (03.12.2010 11:35 GMT)

31.12.2010 10:44    

mttlp
Kod:

(defun c:UY ()
(setq uy_os (getvar "osmode"))
(setq uy_sec nil)
(setq uy_sec (ssget (list (cons 0 "LINE"))))
(if (= uy_sec nil)
(progn
(princ "
Nesne seçimi yok. Komut bitirildi..."))
(progn

(if (= uy_yaz_yuk nil)(setq uy_yaz_yuk 12))
(initget 2)
(setq uy_yaz_y (getdist (strcat "
Yazılacak yazının Yüksekliği:<" (rtos uy_yaz_yuk) ">:")))
(if (= uy_yaz_y nil)(setq uy_yaz_y uy_yaz_yuk))
(setq uy_yaz_yuk uy_yaz_y)
(setq uy_c 0)
(setq uy_say (sslength uy_sec))
(while (< uy_c uy_say)
(setq uy_sec_tek (ssname uy_sec uy_c))
(setq uy_sec_tek_10 (cdr (assoc 10 (entget uy_sec_tek)))
uy_sec_tek_11 (cdr (assoc 11 (entget uy_sec_tek))))
(setq uy_sec_tek_mes (distance uy_sec_tek_10 uy_sec_tek_11))
(setq uy_sec_tek_10_x (car uy_sec_tek_10)
uy_sec_tek_10_y (cadr uy_sec_tek_10)
uy_sec_tek_11_x (car uy_sec_tek_11)
uy_sec_tek_11_y (cadr uy_sec_tek_11))
(setq uy_yaz_x (/ (+ uy_sec_tek_10_x uy_sec_tek_11_x) 2.00)
uy_yaz_y (/ (+ uy_sec_tek_10_y uy_sec_tek_11_y) 2.00)
uy_yaz (list uy_yaz_x uy_yaz_y))
(if (< uy_sec_tek_10_x uy_sec_tek_11_x)
(progn
(setq uy_sec_aci_bas uy_sec_tek_10)
(setq uy_sec_aci_son uy_sec_tek_11)
)
(progn
(setq uy_sec_aci_bas uy_sec_tek_11)
(setq uy_sec_aci_son uy_sec_tek_10)))
(setq uy_sec_tek_aci (angle uy_sec_aci_bas uy_sec_aci_son))
(command "style" "cizgiyazi" "" "" "" "" "" "" "")
(command "osnap" "node")
(command "text" "j" "bc" uy_yaz uy_yaz_yuk (angtos uy_sec_tek_aci) (rtos uy_sec_tek_mes) " m")
(setq uy_c (+ uy_c 1))
)))(setvar "osmode" uy_os)(princ))
(princ "
Komutu çalıştırmak için [UY] yazın")(princ)



ELİNE SAGLIK HOCAM COK GUZEL OLMUS AMA
BANA YARDIMCI OLURMUSUNUZ RİCA EDIYORUM
metre olarak yazmasını ıstıyorum vede sonunda da m olcak
örnek : 120.0000  yazıyor burda 1,2 m  yazmasını ıstıyorum
yardımlarınız ıcın sımdıden tskler

ehya (03.01.2011 10:15 GMT)

03.01.2011 10:16    

ehya
Lispi aşağıdaki gibi kullanabilirsin....

Kod:

(defun c:UY ()
(setq uy_os (getvar "osmode"))
(setq uy_sec nil)
(setq uy_sec (ssget (list (cons 0 "LINE"))))
(if (= uy_sec nil)
(progn
(princ "
Nesne seçimi yok. Komut bitirildi..."))
(progn

(if (= uy_yaz_yuk nil)(setq uy_yaz_yuk 12))
(initget 2)
(setq uy_yaz_y (getdist (strcat "
Yazılacak yazının Yüksekliği:<" (rtos uy_yaz_yuk) ">:")))
(if (= uy_yaz_y nil)(setq uy_yaz_y uy_yaz_yuk))
(setq uy_yaz_yuk uy_yaz_y)
(setq uy_c 0)
(setq uy_say (sslength uy_sec))
(while (< uy_c uy_say)
(setq uy_sec_tek (ssname uy_sec uy_c))
(setq uy_sec_tek_10 (cdr (assoc 10 (entget uy_sec_tek)))
uy_sec_tek_11 (cdr (assoc 11 (entget uy_sec_tek))))
(setq uy_sec_tek_mes (distance uy_sec_tek_10 uy_sec_tek_11))
(setq uy_sec_tek_10_x (car uy_sec_tek_10)
uy_sec_tek_10_y (cadr uy_sec_tek_10)
uy_sec_tek_11_x (car uy_sec_tek_11)
uy_sec_tek_11_y (cadr uy_sec_tek_11))
(setq uy_yaz_x (/ (+ uy_sec_tek_10_x uy_sec_tek_11_x) 2.00)
uy_yaz_y (/ (+ uy_sec_tek_10_y uy_sec_tek_11_y) 2.00)
uy_yaz (list uy_yaz_x uy_yaz_y))
(if (< uy_sec_tek_10_x uy_sec_tek_11_x)
(progn
(setq uy_sec_aci_bas uy_sec_tek_10)
(setq uy_sec_aci_son uy_sec_tek_11)
)
(progn
(setq uy_sec_aci_bas uy_sec_tek_11)
(setq uy_sec_aci_son uy_sec_tek_10)))
(setq uy_sec_tek_aci (angle uy_sec_aci_bas uy_sec_aci_son))
(command "style" "cizgiyazi" "" "" "" "" "" "" "")
(command "osnap" "node")
(command "text" "j" "bc" uy_yaz uy_yaz_yuk (angtos uy_sec_tek_aci) (strcat (rtos (/ uy_sec_tek_mes 100.0)) " m"))
(setq uy_c (+ uy_c 1))
)))(setvar "osmode" uy_os)(princ))
(princ "
Komutu çalıştırmak için [UY] yazın")(princ)

03.01.2011 10:26    

mttlp
TSKLER ELINEZE SAGLIK HOCAM

04.01.2011 14:53    

muhendis010
İyi günler;

Herhangi bir auto cad dosyasını kaydettiğim zaman bulunduğu klasör içinde dosya isminde lisp dosyası oluşuyor. Bunu nasıl çıkmasını önleye bilirim?

Teşekkürler

İyi çalışmalar

ehya (04.01.2011 15:54 GMT)

04.01.2011 15:55    

ehya
Alıntı
muhendis010 :
İyi günler;

Herhangi bir auto cad dosyasını kaydettiğim zaman bulunduğu klasör içinde dosya isminde lisp dosyası oluşuyor. Bunu nasıl çıkmasını önleye bilirim?

Teşekkürler

İyi çalışmalar




Arama motorunda ACADDOC.LSP olarak aratın. Cevap bulacaksınız...

04.01.2011 18:14    

ProhibiT
ehya hocam,

Bu mesajı okuyunca bir şey dikkatimi çektmişti. Arkadaşımız; "Herhangi bir auto cad dosyasını kaydettiğim zaman bulunduğu klasör içinde dosya isminde lisp dosyası oluşturuyor" demiş. Üç defa "dosya" kelimesi kullanılmış, belirgin bir sıfat kullanılmadığı için, değişik yerlerine virgül koyarak anlamaya çalıştım. Sonuçta, DrawingName.Lsp şeklinde bir dosya kasdedildiğini düşünerek, arkadaşımıza özel mesaj yazıp, bahsettiği dosyanın tam ismini yazmasını ve eğer benim tahmin ettiğim gibi ise o dosyayı mail ile göndermesini istemiştim. Bana bir dönüşü olmadı arkadaşımızın.

Yeri gelmişken, genelde biribirine karıştırılan bir kaç detaydan bahsetmek istiyorum.

    1) acaddoc.lsp dosyası oluşuyorsa... Buna sebep olan ALS/Pasdoc.A virüsü. Çözümünü burada paylaşmıştık. Söz konusu çözüm yolunu daha basit, daha işlek hale getirmek için yazmaya başladım. Tüm Sabit Diskler, CDROM sürücüler, Taşınabilir aygıtlar ile Network sürücülerini de bir seferde tarayıp temizleyen fonksiyon bitmek üzere, daha doğrusu fırsat bulup son noktayı koyamadım.

    2) acad.lsp dosyası oluşuyorsa... Buna sebep olan ALS.Bursted.A virüsü. Bu virüsle ilgili buradan bir arkadaşımız sabırla, bir haftadan uzun süre uğraşarak bana virüslü dosyayı ulaştırdı sağolsun. Virüsün her türlü davranışını çözdüm. Manuel olarak temizleme işini de çözdüm. Bahsettiğim temizleme işlemi pek çok kullanıcının kolayca uygulayabileceği sadelikte olmadığı için, bir temizleme fonksiyonu yazıyorum. Bitmek üzere, umarım kısa sürede paylaşmış olacağım.

    3) Bunlara benzer bir başka virüs te, Acad.vLx ve logo.gif dosyalarını kullanan virüs. Bu virüsün temizleme mantığı AutoDesk'in sitesinde verilmiş. Yukarıda bahsettiğim gibi, pek çok kullancının zorlanacağını düşünerek, basit bir fonksiyon da bunun için yazmayı düşünmüştüm. ALS/Pasdoc.A ve ALS.Bursted.A için yazdıklarımı bitirince buna sıra gelecek.

Arkadaşımızın bahsettiği, gerçekten benim anladığım gibi DrawingName.Lsp ise, yukarıdakilere benzemiyor. Söz konusu -.Lsp dosyası elimize geçerse, ona da bir çözüm bulunur elbette.

Herkese kolay gelsin...

05.01.2011 12:52    

aslanv
prohibit hocam yakında paylaşacaklarınızı sabırla ve merakla bekliyoruz. Çok şükür şu an virüslerle ilgili bir sıkıntımız yok ama tedbirli olmakta fayda var. :-) Kolay gelsin.

05.01.2011 13:51    

ProhibiT
muhendis010 arkadaşımızın mesajını bu sabah aldım...
-----------------------------------------------------------------------
Bugün itibari ile kaydettiğim dosyalarda acad isminde lisp oluşmaya başladı. Nedenini bilmiyorum yılbaşından sonra başladı çalışdığım dosya ismi "mu" ise "mu.lsp" ismi çıkıyordu 05/04/2011 tarihinden itibaren acad.lsp olarak çıkmaya başladı.
-----------------------------------------------------------------------

demiş...
Bu durumda net olarak anlaşılıyor ki; ALS.Bursted.A virüsünden muzdarip olmuş.

aslanv, sen virüs konusunda tecrübeli kardeşlerimizden birisin, sıkıntın olursa da bir kaç ipucu paylaşırız, manuel olarak temizlersin. :)

Kolay gelsin.

13.01.2011 12:24    

yoldasgokhan
selam.
autolispte bi program yazdım çizim yapıyobu program.bu çizimi sorunsuz çiziyor fakat command satırına en son nil yazısı çıkıyor sebebi nedir?

ayrıca bu programı başka bi programın içine koyduğumda bu nil yazısına rağmen çizen şekli diğer programında içinde çizmiyor acaba sorun nedir?

cevaplarsanız çok sevinirim.
çapı ,başlangıç açısı ve bitiş açısı gibi ölçüleri verilen bir dirsek çizimidir bu program.

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] > 11 < [15] [20] [25] [30] [35] [40] [42] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.6 saniye - Sorgu: 98 - Ortalama: 0.01633 saniye