23.02.2013 07:29    

ehya
çıkarmak istediğin elemanları sırası ile ssdel komutunu kullanarak istediğin listeden çıkaracaksın.

örneğin;

secim-1 --> 10 eleman
secim-2 --> 5 eleman

Kod:

(setq c 0)
(repeat (sslength secim-2)
(ssdel (ssname secim-2 c) secim-1)
(setq c (+ c 1))
)

23.02.2013 07:53    

Travaci
Teşekkürler.

23.02.2013 08:08    

ProhibiT
Daha önce paylaştığım AcxL isimli fonksiyonun bir bölümü açarak incelemekte fayda var.
Kod:

(setq yz (ssget '((-4 . "<OR") (0 . "*text,Line,*Polyline") (-4 . "<AND")
         (0 . "Insert") (66 . 1) (-4 . "AND>") (-4 . "OR>"))) n -1 cz (ssadd))
(while (< (setq n (1+ n)) (sslength yz))
  (if (wcmatch (cdr (assoc 0 (entget (setq pv (ssname yz n))))) "*LINE")
    (setq cz (ssadd pv cz) yz (ssdel pv yz) n (1- n))))

- Excel dosyasına aktarılacak tablo elemanlarının tümünü seçiyoruz.
- Seçilen elemanlar, Line, Polyline, Lwpolyline, Text, Mtext ve Attibute içeren Insert Objeleri'dir.
- Seçilen objeler başlangıçta yz isimli değişkene (yz=yazı, tablonun veri türü objeleri) alınıyor.
- Bu seçim setinde obje türü adında "*line" bulunan objeler, yani Line, Polyline, Lwpolyline olanlar, yz'den silinip, cz (cz=çizgi, tablonun ve hücrelerin sınırlarını belirleyen objeler) seçim setine ekleniyor.
- işlemin sonunda türlerine göre ayrılmış yz ve cz isimli iki seçim seti elde ediyoruz.

23.02.2013 08:15    

Travaci
Teşekkürler.

23.02.2013 10:01    

kerem1453
(command "_.scale" "w" ksolust ksagalt "yn" "2" "") bu kodla scale yap w ile ksolust noktası ile ksaglat köşesi arasında kalan objeleri yn noktasıntan 2 kat büyüt demek istedim ama objeyi seciyor ama büyütme işlemini yapmıyor hata bu kodlamada nerde ustalarımızdan biri bakarda yanıtlarsa sevinirim.

23.02.2013 10:10    

ehya
kerem1453




iki nokta gösteriminden sonra "" ifadesini kullanın.
Nokta gösteriminden sonra referans koordinat belirleyin.
"yn" ifadesi nedir? Bu şekilde yazım, scale komutu içerisinde yn adlı bir alt komut olduğunu ifade eder.
Bir sayısal değer verirken de bu tırnak içinde yazılmaz...

yani şu şekilde yazılabilir.

Kod:

(command "_.scale" "w" ksolust ksagalt "" (polar ksolust (angle ksolust ksagalt)(/ (distance ksolust ksagalt) 2.0)) 2)

23.02.2013 10:20    

kerem1453
yn scale yapacagım ogjenin tutmasını istedigim noktası ehya.tşk ederim yardımın için.

23.02.2013 10:28    

ehya
o zaman yn değerini tırnak içinde yazamazsınız. Eğer tırnak içinde olursa bir önceki mesajımda söylediğim gibi scale komutunun alt komutu olarak algılar. Bu da komutun hatalı olmasına neden olur.
koordinat değerlerini nasıl aldığınızı bilmediğim için farklı yazım örneklerinde bulunamıyorum.
Eğer ki, nokta gösterimlerinin ikisini de getpoint ile yaptırdıysanız, bu görsel olarak yetersiz bir işlem olacaktır. Böyle bir durumun olacağını düşünerek ilkinde getpoint, ikincisi işlemde ise getcorner komutunu kullanın..

Örnek :

Kod:

(setq a (getpoint) b (getcorner a))


Bu örnekte açılan pencerenin görüntüsünü de göreceksiniz.
İlk koordinat a değişkeninde, ikinci koordinat b değişkeninde saklanır.

23.02.2013 10:31    

kerem1453
40*40 cizdirdigim bir objeyi 2 kat büyüt demek istemiştim yn tutmasını istedigim objenin kesişim noktası bu kodlamayı uyguladıgımda 2 kat değilde 4 kat büyütüyo istedigim şekle göre bi kodlama daha yazabilirsen ehya çok sevinirim.(distance ksolust ksagalt) 2.0)) bu kısmı (distance ksolust ksagalt) 1.0)) yaptıgımda 2 kat büyütme oldu yn yani tutmasını istedigim noktasını nereye yazmam gerekekiyo.

23.02.2013 11:03    

ehya
Bir yanlışınız var.
Önceki mesajımda yazdığım kod 2 kat büyütme yapar. Sormuş olduğunuz kod bölümü tek parça olarak ele alınmaz.
Açıklamak gerekirse,

Kod:

(polar ksolust (angle ksolust ksagalt)(/ (distance ksolust ksagalt) 2.0))


bu kod, gösterilen iki noktanın ortasını tutmak için kullanılır. Yani sizin yn adını verdiğiniz noktayı bu kodlama otomatik olarak hesaplar.
polar komutu, bir noktanın açıya bağlı olarak istenilen mesafedeki koordinatını verir.
Burada önce açıyı bulmak gerekiyor.
Bunu da,

Kod:

(angle ksolust ksagalt)


komutuyla radyan cinsinden öğrendik. polar komutu açı değerini derece değil, radyan cinsinden kabul eder.
Ardından iki nokta arasındaki mesafenin ortasını bulmak gerekiyor.

Kod:

(/ (distance ksolust ksagalt) 2.0)


Bu kod ile de, iki nokta arasındaki mesafe bulunup yarısı alınıyor.
Kodlar birleştirildiğinde iki noktanı orta noktasının koordinatı veriliyor.

Ancak siz bu değeri kullanmak değil de, kendi yn değerindeki koordinatı kullanacak iseniz, yazmanız gereken kod;


Kod:

(command "_.scale" "w" ksolust ksagalt "" yn 2)


şeklinde olacaktır.

23.02.2013 23:17    

kerem1453
tşkler ehya açıklamalar ve yardımın için..

24.02.2013 21:13    

kerem1453
Error: no function definition: MINI daha önce çalışan lisplerimden biri bu hatayı vermeye başladı sebebi ne olabilir lispin içeriginde hiç bi değişiklik yapmadım.hatta açmadım bile lispi bu hatayı vermeye başladı.sebebi ne olabilir ?

25.02.2013 07:21    

Travaci
Nedenin neyden kaynaklandığını bilmiyorum ama hatayı sonradan vermeye başlamaz, bazen banada oluyor, yazarken sürekli üst üstde denemeler sonucu çalışıyor, bir sonraki denemede önceki doğrular yeni hatalrı kapatıyor sanırım : ) Autocad'i kapatıp açtığımda çalışmıyor.

27.02.2013 23:15    

Travaci
(command "ucs" "name" "save" isim "") dıyınce aynı ısımde varsa uzerıne yazıyım mı sorusunu soruyor
aynı ısımde varsa uzerıne yaz yoksa, ısleme devam edıp ısım adlı ucsyı olustur nasıl derız.
Tesekkurler

28.02.2013 09:30    

Harbi65
Alıntı
Travaci :
(command "ucs" "name" "save" isim "") dıyınce aynı ısımde varsa uzerıne yazıyım mı sorusunu soruyor
aynı ısımde varsa uzerıne yaz yoksa, ısleme devam edıp ısım adlı ucsyı olustur nasıl derız.
Tesekkurler




Kontrol etmek için önce mevcut ucsname listesini alman lazım. Bu listeye göre de kontrol yaparsın.

Kod:

(defun c:UCL (/ u u:cs)
  (setq u T
        ucs:lst  '())
  (while (/= (setq u:cs (cdr (assoc 2 (tblnext "UCS" u)))) nil)
    (setq ucs:lst (cons u:cs ucs:lst)
          u nil)
    )
  (if (member isim ucs:lst)
    (progn
      ;Var. üzerine yazdır
      )
    (progn
      ;Yok. yeni kayıt
      )
    ) 
  (princ)
  )

01.03.2013 21:56    

Travaci
Aşağıda istenilen poz numarası bulunamadığında, "Aranan poz no bulunamadı!" uyarısını veremedim.
Kod:

(defun c:PsEc (/ cc ps ad gr pz pc f)
   (setq cc (rtos (getreal "\nSeçilecek Poz No:") 2 0)
         ps (ssget "x" (list (cons 0 "INSERT") (cons 2 "KESIT_POZ")))
         ad (sslength ps) gr (ssadd) f 0)
   (while (< f ad)
      (setq pz (ssname ps f)
            Pc (cdr (assoc 1 (entget (entnext pz)))))
      (if (/= pc cc) (progn) (progn (ssadd pz gr)))
      (setq f (+ f 1)))
   (sssetfirst nil gr) (prin1)
)

Teşekkürler

02.03.2013 07:29    

pulp fiction
Alıntı
Travaci :
Aşağıda istenilen poz numarası bulunamadığında, "Aranan poz no bulunamadı!" uyarısını veremedim.
Kod:

(defun c:PsEc (/ cc ps ad gr pz pc f)
   (setq cc (rtos (getreal "\nSeçilecek Poz No:") 2 0)
         ps (ssget "x" (list (cons 0 "INSERT") (cons 2 "KESIT_POZ")))
         ad (sslength ps) gr (ssadd) f 0)
   (while (< f ad)
      (setq pz (ssname ps f)
            Pc (cdr (assoc 1 (entget (entnext pz)))))
      (if (/= pc cc) (progn) (progn (ssadd pz gr)))
      (setq f (+ f 1)))
   (sssetfirst nil gr) (prin1)
)

Teşekkürler





hocam eline koluna sağlık. çok teşekkürler.

bunu seçmeli yapabiliyormuyuz. bi dosyada 30 tane paftam oluyor ama ben 1 paftada aramak istiyorum mesela..

bi de hocam sana gönderdiğim şeyde L BOY yazan kısımda da aradığımız şey bulabiliyor muyuz?

mesela donatının uzunluğu 970. L=970 yazan yerde ben 970 yazarak bütün 970leri bulma dururumum var mı?

çok çok teşekkür ederim vakit ayırdığın için...

02.03.2013 08:23    

Travaci
Bu kısmı
Kod:

ps (ssget "x" (list (cons 0 "INSERT") (cons 2 "KESIT_POZ")))

Bu sekılde yaparsanız
Kod:

ps (ssget (list (cons 0 "INSERT") (cons 2 "KESIT_POZ")))

Sizden seçim ister.
Kod:

(defun c:LsEc (/ cc ps ad gr pz pc f)
   (setq cc (rtos (getreal "\nAranacak L Boyu:") 2 0)
         ps (ssget (list (cons 0 "INSERT") (cons 2 "DLR01")))
         ad (sslength ps) gr (ssadd) f 0)
   (while (< f ad)
      (setq pz (ssname ps f)
            Pc (cdr (assoc 1 (entget (entnext (entnext (entnext (entnext
                                     (entnext pz)))))))))
      (if (/= pc (strcat "L=" cc)) (progn) (progn (ssadd pz gr)))
      (setq f (+ f 1)))
   (sssetfirst nil gr) (prin1)
)

Travaci (03.03.2013 19:47 GMT)

15.03.2013 14:18    

Harbi65
Herhangi bir txt dosyayı okuturken doğrudan belli bir satırı okutabilir miyiz?
Atıyorum 15. satırı okutmak istesem...

15.03.2013 15:22    

ehya
Alıntı
Harbi65 :
Herhangi bir txt dosyayı okuturken doğrudan belli bir satırı okutabilir miyiz?
Atıyorum 15. satırı okutmak istesem...



read-line kullanırken
(repeat 15
yaparsan 15nci satırın sonucunu verecek.

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