02.04.2010 08:11    

Harbi65
ProhibiT hocam eline sağlık.
Maşallah yine çözüm üretmişsiniz...:)

Aynı yöntemle bende kafa yormuştum ama entlast sorununu çözememiştim. Bu konuda banada örnek oldu... Teşekkürler.
Ancak bu List konusu kafamı karıştırdı...

02.04.2010 08:25    

ProhibiT
Teşekkür ederim Harbi65 hocam :)

entsel ile obje seçtiğimizde; bilindiği gibi (<Entity name> (x,y,z)) şeklinde dönüyor.
Çoğu yerde de entget ile kullanırken ikinci parametre olarak dönen noktadan kurtulmak için; (entget (car (entsel kullanıyoruz.

DimArc komutunu kullanırken de, hem Entity Name hem de o seçim noktasını (Pick Point) istiyor. Geçici olarak çizdirdiğimiz Arc'ın Entity Name'i ile birlikte daha önce seçtiğimiz ortasındaki noktalist ile birleştiriyoruz. Tıpkı entsel ile obje seçmiş gibi komut parametresi olarak kullanıyoruz.

Kolay Gelsin...

02.04.2010 13:15    

ehya
Alıntı
mttlp :
arkadas neden bırsey yazamıyorsunz




tavsiye istemişsin. kimse cevap yazmamış.. eee normal bu. konu autolisp istek sayfası.. mesaj yazarken konu başlığına dikkat etseniz bizlerinde gereksiz ve yanlış mesajları temizleme zulmüne bırakmazsınız..

ayrıca şimdi gördüm kapı pencere lispi istemişsin.. sitede zaten kapı pencere lispi var.. ama onu kabul etmemişsin. eee daha ne diyeyim.. o zaman ücreti mukabilinde özel lispler sitemizde birkaç üye tarafından yazılır.

03.04.2010 07:52    

halilozcakir
normal plan görünüşü izometrik görmek istiyorsak sw görünüm yeter. oradan da ucs yi değiştirdinmi pratik hallolur.

03.04.2010 11:38    

oğlak
South West İzometrik görünüş yani. ama senin istediğin bu değil galiba. Onları tek tek çizmek kaderinmiş kabul et :)

11.04.2010 07:03    

ferdierken
*Excel'den AutoCAD'e ve AutoCAD'den de Excel'e Layer'lari aktarabilen bir Lisp.
*AutoCAD'deki tum bu Layer ozelliklarini degistirebilen bir Lisp.
*Ve Ornek TABLO-1 deki Layer'lari TABLO-2 deki Layer'larla degistirebilen bir Lisp ariyorum.

NOT: Drawing'lerde Layer adedi cok fazla oldugu icin bunlari hizli bir sekilde degistirmek istiyorum. Asagida verilen Layer'lar sadece cok az bir kismidir.
Bu konuda yardimci olabilecek arkadaslara simdiden tesekkurler.

TABLO-1
Layer Name Color Linetype Plotstyles Description
A-ANNO-ARRW red Continuous Color_1 Architectural-Annotation-Arrow
A-ANNO-TABL-01 red Continuous Color_1 Architectural-Annotation-Data tables
A-ANNO-TABL-02 yellow Continuous Color_2 Architectural-Annotation-Data tables
A-ANNO-TITL yellow Continuous Color_2 Architectural-Annotation-Drawing or detail titles
A-FLOR-DPM red STIPLET04 Color_1 Architectural-Floor - DPC/DPM
A-CLNG-HDDN red STIPLET2 Color_1 Architectural-Ceiling - Hidden
A-COLS-CLDG cyan Continuous Color_4 Architectural-Columns-Cladding
A-COLS-HDDN red STIPLET2 Color_1 Architectural-Columns-Hidden
A-COLS-STEL cyan Continuous Color_4 Architectural-Columns-Steel


TABLO-2
Layer Name Color Linetype Plotstyles Description
ARXX-ANNO-ARRW-1 red Continuous Color_1 Architectural-Annotation-Arrow-1
ARAG-ANNO-TABL-1 red Continuous Color_1 Architectural-Annotation-Data tables-1
ARAG-ANNO-TABL-2 yellow Continuous Color_2 Architectural-Annotation-Data tables-2
ARXX-ANNO-TITL yellow Continuous Color_2 Architectural-Annotation-Drawing or detail titles
ARAO-FLOR-DPCM red STIPLET04 Color_1 Architectural-Floor: DPC/DPM
ARAF-CLNG-HDDN red STIPLET04 Color_1 Architectural-Finishes-Ceiling - Hidden
ARAT-COLS-CLDG cyan Continuous Color_4 Architectural Columns: cladding
ARAT-COLS-HDDN red STIPLET02 Color_1 Architectural Columns: hidden
ARAT-COLS-STEL white Continuous Color_7 Architectural-Columns: steel

12.04.2010 15:36    

sirin35
Mrb arkadaşlar lisp ile tanışalı iki hafta oldu ve çizimlerimi hızlandırmak için kendim lisp yazmaya karar verdim yazdığım lispte bir yerde takıldım biliyorum ki yapmaya çalıştığım şeyi yazsam hemen yaparsınız ama ben sadece takıldığım yeri yazmak istiyorum şöyle ki; KOORDİNATLARINI BİLDİĞİM İKİ NOKTANIN ORTA NOKTASININ KOORDİNATLARINI bulmam lazım bunu da çözersek işlemi bitirebilirim. bitirince asıl amacımı yazacağım ve ilk lispimde ne kadar saçmalamışım onu göreceğim:)

12.04.2010 16:16    

Harbi65
(setq p1 (getpoint "birinci nokta") ;örnek iki nokta.
p2 (getpoint "ikinci nokta"))
(setq mesafe (distance p1 p2)) ;iki noktanın mesafesini hesaplattık.
(setq ortanokta (polar p1 (angle p1 p2) (/ mesafe 2))) ; iki noktanın açısında ilk noktadan mesafenin yarısı kadar giderek orta noktayı bulmuş olduk...

13.04.2010 12:24    

sirin35
Çok Teşekkür ettim ii iş gördü lisp bitti. Ama küçük bi sorun var komutu bi kaç kez ard arda uygulayınca kafayı yiyor sonuçlar birbirine giriyor neden olabilir

13.04.2010 14:02    

Harbi65
Alıntı
sirin35 :
Çok Teşekkür ettim ii iş gördü lisp bitti. Ama küçük bi sorun var komutu bi kaç kez ard arda uygulayınca kafayı yiyor sonuçlar birbirine giriyor neden olabilir



Ne yazdığınızı görmeden, ne işlem yaptığını bilmeden küçük dediğiniz sorunun kaynağını nasıl bilebiliriz ki..!

13.04.2010 16:46    

sirin35
Haklısınız. Kodu buraya kopyalıyorum
Kod:

(defun c:qqq ()
  (setq sec (entsel "\nDikdörtgen seç"))
  (setq nokta_sayisi (cdr (assoc 90 (entget (car sec)))))
  (setq data (entget (car sec)))
  (setq yeni_list '())
  (repeat nokta_sayisi
    (setq list_1 (assoc 10 data))
    (setq yeni_list (cons (cdr list_1) yeni_list))
    (setq data (cdr (member list_1 data)))
  )

  (setq mesafe (distance (nth 0 yeni_list) (nth 2 yeni_list)))
  (setq lamba1
(polar (nth 0 yeni_list)
(angle (nth 0 yeni_list) (nth 2 yeni_list))
(/ mesafe 2)
)
  )

  (setq lamba2
(polar lamba1
(angtof "180")
(/ (distance (nth 2 yeni_list) (nth 3 yeni_list)) 4)
)
  )
  (setq lamba3
(polar lamba1
(angtof "0")
(/ (distance (nth 2 yeni_list) (nth 3 yeni_list)) 4)
)
  )

  (setq lamba4
(polar lamba1
(angtof "90")
(/ (distance (nth 1 yeni_list) (nth 2 yeni_list)) 4)
)
  )
  (setq lamba5
(polar lamba1
(angtof "270")
(/ (distance (nth 1 yeni_list) (nth 2 yeni_list)) 4)
)
  )


  (setq say (getint "\n Lamba Sayısını Giriniz:"))
  (if (= 1 say)
    (command "._circle" lamba1 10)
  )
  (if (= 2 say)
    (setq secim
   (getint
     "\n Yatay Yerleşim İçin 1 Dikey Yerleşim İçin 2 yi Seçin:"
   )
    )
  )
  (if (= 1 secim)
    ((command "._circle" lamba2 10)
      (command "._circle" lamba3 10)
    )
  )
  (if (= 2 secim)
    ((command "._circle" lamba4 10)
      (command "._circle" lamba5 10)
    )
  )
  (if (= 3 say)
    (setq dikyat
   (getint
     "\n Yatay Yerleşim İçin 1 Dikey Yerleşim İçin 2 yi Seçin:"
   )
    )
  )
  (if (= 1 dikyat)
    ((command "._circle" lamba1 10)
      (command "._circle" lamba2 10)
      (command "._circle" lamba3 10)
    )
  )
  (if (= 2 dikyat)
    ((command "._circle" lamba1 10)
      (command "._circle" lamba4 10)
      (command "._circle" lamba5 10)
    )
  )

  (if (= 4 say)
    ((command "._circle" lamba5 10)
      (command "._circle" lamba2 10)
      (command "._circle" lamba3 10)
      (command "._circle" lamba4 10)
    )
  )

  (if (= 5 say)
    ((command "._circle" lamba1 10)
      (command "._circle" lamba2 10)
      (command "._circle" lamba3 10)
      (command "._circle" lamba4 10)
      (command "._circle" lamba5 10)
    )
  )
  (if (< 5 say)
    (alert "\n 5 den Büyük Rakam Girmeyiniz")
  )

  (princ)
)


Şimdi bu kodu biraz daha sadeleştirdim ama aynı sorun yine var. autocad i ilk açtığımda sorunsuz çalışıyor. bi süre sonra; örneğin lamba sayısını 3 giriyorum ama ikinci soruyu sormadan düzleme iki tane atıveriyor. veya lamba sayısını 1 giriyorum düzleme üç tane atıyor. autocad i kapatıp tekrar açınca yine başta düzgün çalışıyor ama sonra yine aynı şey oluyor. Bilmem anlatabildim mi?

14.04.2010 07:45    

Harbi65
Çalışır halde düzenledim. Bu haliyle işinizi görür.
Çoklu seçeneklerde if yerine cond kullanın...

Kod:

(defun c:qqq ()
  (setvar "CMDECHO" 0)
  (setq sec (entsel "\n Dikdörtgen seç"))
  (setq nokta_sayisi (cdr (assoc 90 (entget (car sec)))))
  (setq data (entget (car sec)))
  (setq yeni_list '())
  (repeat nokta_sayisi
    (setq list_1 (assoc 10 data))
    (setq yeni_list (cons (cdr list_1) yeni_list))
    (setq data (cdr (member list_1 data)))
  )

  (setq mesafe (distance (nth 0 yeni_list) (nth 2 yeni_list)))
  (setq lamba1 (polar (nth 0 yeni_list) (angle (nth 0 yeni_list) (nth 2 yeni_list)) (/ mesafe 2)))
  (setq lamba2 (polar lamba1 (angtof "180") (/ (distance (nth 2 yeni_list) (nth 3 yeni_list)) 4)))
  (setq lamba3 (polar lamba1 (angtof "0") (/ (distance (nth 2 yeni_list) (nth 3 yeni_list)) 4)))
  (setq lamba4 (polar lamba1 (angtof "90") (/ (distance (nth 1 yeni_list) (nth 2 yeni_list)) 4)))
  (setq lamba5 (polar lamba1 (angtof "270") (/ (distance (nth 1 yeni_list) (nth 2 yeni_list)) 4)))

  (setq say (getint "\n Lamba Sayısını Giriniz <1-5>: "))

  (cond
    ((= 1 say)
     (command "._circle" lamba1 10)
     )
    ((= 2 say)
     (initget "Y D" 1)
     (setq secim (getkword "\n Yerleşim Şekşi [Yatay/Dikey]:"))
     (cond
       ((= secim "Y")
(command "._circle" lamba2 10)
(command "._circle" lamba3 10)
)
       ((= secim "D")
(command "._circle" lamba4 10)
(command "._circle" lamba5 10)
)
       )
     )
    ((= 3 say)
     (initget "Y D" 1)
     (setq dikyat (getkword "\n Yerleşim Şekşi [Yatay/Dikey]:"))
     (cond
       ((= dikyat "Y")
(command "._circle" lamba1 10)
(command "._circle" lamba2 10)
(command "._circle" lamba3 10)
)
       ((= dikyat "D")
(command "._circle" lamba1 10)
(command "._circle" lamba4 10)
(command "._circle" lamba5 10)
)
       )
     )

    ((= 4 say)
     (command "._circle" lamba5 10)
     (command "._circle" lamba2 10)
     (command "._circle" lamba3 10)
     (command "._circle" lamba4 10)
     )
    ((= 5 say)
     (command "._circle" lamba1 10)
     (command "._circle" lamba2 10)
     (command "._circle" lamba3 10)
     (command "._circle" lamba4 10)
     (command "._circle" lamba5 10)
     )
    ((< 5 say)
     (alert "\n 5 den Büyük Rakam Girmeyiniz")
     )
    )
  (setvar "CMDECHO" 1)
  (princ)
)

14.04.2010 23:09    

sirin35
Teşekkür ederim hocam çözüm olmuştur muhakkak henüz denemedim ama amacım öğrenmek olduğundan, size ilettiğim problemin kaynağı cond kullanmamam mı yoksa setvar komutu ile eklediğiniz şeyin olmamasından mı? birde cmdecho nedir öğrenebilir miyim? Birde lisp ile insert ettiğim bi bloğu mouse nin ucuna değil, koordinatları belli bi noktaya çıkarabilir miyim

sirin35 (16.04.2010 07:08 GMT)

23.04.2010 04:47    

ProhibiT
Merhaba,
Fonksiyonun tamamını inceleyemedim. Ama, iki noktanın ortasını bulurken;
Kod:

(setq p1 (getpoint "birinci nokta")
      p2 (getpoint "ikinci nokta")
      on (list (/ (+ (car p1) (car p2)) 2)
               (/ (+ (cadr p1) (cadr p2)) 2)
               (/ (+ (caddr p1) (caddr p2)) 2)))
şeklinde X, Y ve Z koordinatlarının ortalama değerlerini listeleyerek yeni nokta tanımlarsak daha genel amaçlı bir kod yazmış oluruz. isteğe bağlı olarak Z değerini de işleme katarsak, p1 ve p2 noktalarının farklı düzlemlerde olması durumunda da orta noktayı 3B olarak bulabiliriz.

Orta nokta bulmak için farklı sayılabilecek bir yöntem;
Kod:

(setq p1 (getpoint "birinci nokta")
      p2 (getpoint "ikinci nokta")
      on (mapcar '(lambda (n1 n2) (/ (+ n1 n2) 2.0)) p1 p2))


Daha da abartırsak;
Kod:

(setq on (mapcar '(lambda (n1 n2) (/ (+ n1 n2) 2.0)) (getpoint "birinci nokta") (getpoint "ikinci nokta")))


Kolay Gelsin...

ProhibiT (29.09.2012 07:37 GMT)

27.04.2010 08:22    

cezopp
herkese selam.öncelikle bu siteyi kuranlara teşekkürü borç biliyorum.elinize sağlık...
elimde mevcut bir yol güzergahı var.fakat yol projesine ait başka bir döküman, bilgi vs yok.bana bu güzergah (aliynman ve kurplar) üzerinde başlangıç km sinden itibaren sabit aralıklarla eksen üzerine nokta atan ve bu noktalar üzerinden eksene dik genişliğini kendimin belirleyeceği uzunlukta sağa ve sola çizgiler atan bir lisp varmı elinizde yada yardımcı olabilirmisiniz...şimdiden teşekkürler..

okudumda karmaşık olmuş biraz.daha acık yazayım mesela güzergah aks ı üzerinde her 10m(20 de olabilir) de bir güzergaha dik sağa ve sola genişliği 6m (10 da olabilir) olan çizgiler atmak istiyorum.aksa dik olması şart.yani hem aliynmanda hemde virajlarda...saygılarımla

27.04.2010 09:16    

ProhibiT
Merhaba,

Bahsettiğiniz enkesit çizgilerinin kestikleri münhanilerin kotunu alıp enkesit de çizilmeyecekse...
Ya da yol ekseninin kestiği münhanilerin kotlarını alıp profil çizilmeyecekse...
Bahsettiğiniz işi yapmak için AutoLisp yazmaya gerek yok;
Temel AutoCAD komutlarıyla kolay ve seri olarak yapabilirsiniz.

Yol güzergahını tanımlayan yol eksenini PolyLine yapın.
6 (ya da 10) m uzunluğunda Y eksenine paralel (90 derece) tek çizgiden oluşan bir block yapın, insertion point çizginin mid pointi olsun.
Komut satırından MEASURE girin Yol Eksen çizgisini (polylin) seçin.
Specify length of segment or [Block]: mesajına "b" girin,
Enter name of block to insert: oluşturduğunuz block adını yazın
Align block with object? [Yes/No] Mesajına "y" girin.
Specify length of segment: 10 ya da 20 girin.

Kolay gelsin...

ProhibiT (29.04.2010 06:24 GMT)

04.05.2010 12:18    

ehya
zetacad'in autolisp desteği varsa lispler çalışır.
eğer lisp yoksa yapabilecek birşey yok.

05.05.2010 06:32    

ehya
yanlış anlamışım..

zetacad kullanmadığım için nasıl bir mimari yorum yapamıyorum.
Ama şuana kadar o kadar çok lisp gördüm ki, onları gördükten sonra yazılamaz diye birşey yok...

20.05.2010 19:26    

ozandurmus
arkadaşlar bana bi lisp lazım şöleki ardarda gelen çizgiler arasına ölçü atan bi lisp istiyorum uygun olan arkadaşlardan

21.05.2010 07:43    

halilozcakir
Alıntı
ozandurmus :
arkadaşlar bana bi lisp lazım şöleki ardarda gelen çizgiler arasına ölçü atan bi lisp istiyorum uygun olan arkadaşlardan



bu ölçülendirmeyi qdim komutu yapıyor..

Önceki Sayfa [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] > 14 < [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] Sonraki Sayfa
Copyright © 2004-2022 SQL: 1.247 saniye - Sorgu: 100 - Ortalama: 0.01247 saniye