27.10.2009 09:07    

k005
Betonarme duvar için donatı yerleştirmesi yapmak istiyorum.. aşağıda verdiğim lispte.,, başka bir lispten hesap sonuçları alıp çizimi yapan kodlar mevcut... 12m lik demir adedi belli ;

Örneğin;
4 adet 12m lik demir var. son kısımda kalan demirin boyuda 5,60m.
ankraj mesafesi de : 50*14 fi = 0,70m.

Yapmak istediğim olay; kalıba tıkladığımda 4 adet 12m lik demiri ve kalan son demiri (5,60) şaşırtmalı olarak çizdirmek.

Kod:

(defun c:md ()
(setq no (- 12m 1)) ;12m lik demir adedi. -1 diyorum çünkü birini çizdirdim.
(setq klp(entget(car(entsel "\nKalıba TıkLAyıN "))))
(setq k1 (cdr (assoc 10 klp)))
(setq k2 (cdr (assoc 11 klp)))
(setq k1x(car k1))
(setq k1y(cadr k1))
(setq k2x(car k2))
(setq k2y(cadr k2))
(setq xfrk ( + k2x k1x))
(setq yfrk ( + k2y k1y)) 
(setq ortx (/ xfrk 2))
(setq orty (/ yfrk 2))
(setq prtx (+ pas ortx)) ; başlangıç noktası pas payı dahil.
(setq prty (+ pas orty)) 
(setq onkt (list prtx prty))
(setq bsl (list (+ prtx 1200.0) prty)) ; ilk başlayan 12m demir.
(setq mm (command "Line" onkt bsl"")))


Yardımcı olacak arkadaş(lar)a şimdiden teşekkürler. Herkese kolay gelsin.

admin (07.12.2017 11:23 GMT)

28.10.2009 14:02    

yazgunesi
Öncelikle mevcut lispin elden geçirilmesi gerektiğinin kanatindeyim..

Bu arada lispinizle ilgili anlayamadığım bir iki şey var:

1) başka bir lispten hesap sonuçları alıp çizimi yapan kodlar mevcut... O başka lisp nasıl birşey ve o hesaplanan değerler sizin lispinizde nasıl kullanılıyor? Değişken ismi, yoksa 12M mi?

2) Aşağıda gözüken satırda hata var , sayısal değer yerine Nil ifadesi çıkıyor test anında.Lisp çalışmadı..
Kod:

(setq k2 (cdr (assoc 11 klp)))


Entity için kaynak kodlar :

; (entget(car(entsel)))

; Entsel = selects the entity,
; car = the entity name from entsel,
; entget = returns the Group Codes of the entity.

; Group code 10 is the start point of the line.
; Group code 11 is the end point of the line.

Kod:

; donatı dizayn lispi

; ****    ***    örnek kalıbın entity değeri     ****   *****   ****   *****   *****

; ((-1 . <Entity name: 7e06c340>) (0 . "LWPOLYLINE")
; (330 . <Entity name: 7e087cf8>) (5 . "298") (100 . "AcDbEntity")
; (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 5) (70 . 0) (43 . 0.0) (38 . 0.0) (39 . 0.0)
; (10 500.0 5500.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 42700.0 5500.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)
; (10 42700.0 -4500.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 500.0 -4500.0) (40 . 0.0) (41 . 0.0) (42 . 0.0)
; (10 500.0 5500.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))

(defun c:md ()
 
; 12m değişkenine demir adetini atadık..
(setq 12m 12)  ; >>>>> 12m = 12
 
;12m lik demir adedi. -1 diyorum çünkü birini çizdirdim.
(setq no (- 12m 1)) ; -->> no = 11
 
(setq klp(entget(car(entsel "\nKalıba TıkLAyıN : ")))) ; yukarıda kalıbın entity değerleri gözüküyor..

; -->> (entsel "\nKalıba TıkLAyıN : ") -->> (<Entity name: 7e06c340> (431.359 1469.98 0.0))
; -->> (car(entsel "\nKalıba TıkLAyıN : ")) -->> <Entity name: 7e06c340> 

(setq k1 (cdr (assoc 10 klp)))  ;  (500.0 5500.0)
(setq k2 (cdr (assoc 11 klp))) ;  nil

; >>>  (assoc 10 klp)  >>> (10 500.0 5500.0)
; >>>  (cdr (assoc 10 klp))  >>> (500.0 5500.0)
 
; >>>>>  (assoc 11 klp)  >>>>> nil
; >>> (cdr (assoc 11 klp))  >>>>> nil

(setq k2x(car k2)) ; nil
(setq k1x(car k1)) ; 500 
(setq k1y(cadr k1)) ; 5500.0
(setq k2y(cadr k2))  ; nil 
(setq xfrk (+ k2x k1x))   ; error: bad argument type: numberp: nil
(setq yfrk (+ k2y k1y))  ; error: bad argument type: numberp: nil
(setq ortx (/ xfrk 2)) ; error: bad argument type: numberp: nil
(setq orty (/ yfrk 2)) ; error: bad argument type: numberp: nil
 
; başlangıç noktası pas payı dahil edilmesi
 
(setq prtx (+ pas ortx)); error: bad argument type: numberp: nil
(setq prty (+ pas orty)) ; error: bad argument type: numberp: nil
(setq onkt (list prtx prty)) ; >>>>> (nil nil)
 
; >>>>>  prtx --->> nil
; >>>>>  prty --->> nil
; >>>>>  (+ pas ortx)  >>>>> ; error: bad argument type: numberp: nil 
; >>>>>  (list prtx prty)  >>>>> (nil nil)

; ilk başlayan 12m demir.
(setq bsl (list (+ prtx 1200.0) prty)) ; error: bad argument type: numberp: nil
 
(setq mm (command "Line" onkt bsl""))  ; nil
(princ)
  )
(Princ "Lisp'i çalıştırmak için > md < yazınız! ")


Tahminim doğruysa eğer bu lisp ile seçilen kalıpta ; ilk önce demirlerin çizimi için başlangıç kordinatı hesabı yapılıyor ama kordinat hesabı anında (assoc 11 klp) entitiy 'de problem var.

yazgunesi (28.10.2009 14:25 GMT)

28.10.2009 15:37    

k005
Hocam; şöyle yazayım değişkenleri... ( Bu Diğer Lisp. sonuçların hesaplandığı lisp)

Diğer Lisp teki Değişkenler

örnek:

Pas = 2,5cm + 2,5cm (pas payı)

Ypboyu = 4500 cm (yapı boyu veya duvar boyu)

ank = 50*14 fi = 70cm (ankraj)

12m = (4500- 5)/1200 = 3,7 = fix 3 adet alıyorum. (12,00 demir adedi.)

sdmby2 = 1105cm (son kısmda kalan demir boyu)

durum bu şekilde hocam.. bu örneğe göre mesela; 3 adet 12m lik demir ve bir adet de 11,05m lik demir oluşuyor. 0,70m de ankraj boyu.

============================================================
hazırlamak istediğim lisp te bunlar ortak kullanılacak... yani önce hesaplamasını yaptırıyorum sonrada c:md çalıştırıp çizdireceğim..

bu verdiğim kodda bir hata yok şimdilik.. 12,00 m lik demiri çiziyor bırakıyor.... resimdeki gibi bir çizim yaptırmak istiyorum
12m= değişken..
ank= değişken..
pas= değişken..
sdmby2= . sdmby2 yi kullanmadım çünkü,, tamamlayamadım Lispi.... ama bu değişkenler kullanılacak esas olarak yani....

k005 (28.10.2009 16:18 GMT)

28.10.2009 18:59    

yazgunesi
Uygun bi boş zamanda bakarım..

21.11.2009 15:39    

ProhibiT
Merhaba k005 :)
Söz verdiğim gibi, bahsettiğin işi yapabileceğini düşündüğüm basit bir fonksiyon yazıp aşağıda paylaştım.
Çok daha kullanışlı ve pratik çözümler üretilebilir. Mümkün olabildiğince sade ve senin yola çıkış noktandan hareket ederek yazmaya çalıştım. Takip edip değerlendirebilmen, takıldığın noktada önünü açabilmen düşüncesiyle bu tarzda yazdım. Öncelikle yapmak istediğin işin algoritmasını çok net olarak oturtmalısın kafanda. Algoritmayı oturttuktan sonra yazması görece daha kolay :)
Kod:

(defun c:DoDi ()
  (setvar "cmdecho" 0)
  (setq osm (getvar "osmode"))
  (setvar "osmode" 0)
  (setq Cap  (/ (getint  "\n Donatı Çapı Ø (mm): ") 10.0)
        Pas  (getreal "\n      Pas Payı (cm): ")
        Adr  (getint "\nBindirme Boyu (X*Ø): ")
        KaL1 (entget (car (entsel "\nKalıp Başlangış doğrusunu seçiniz...")))
        KaL2 (entget (car (entsel "\nKalıp Bitiş doğrusunu seçiniz.......")))
        n1 (cdr (assoc 10 KaL1)) n2 (cdr (assoc 11 KaL1))
        Nok1 (list (car n1) (/ (+ (cadr n1) (cadr n2)) 2.0 ))
        Nok2 (list (car (cdr (assoc 10 KaL2))) (cadr Nok1))
        Dboy (- (distance Nok1 Nok2) (* 2 pas))
        dn1 (polar Nok1 0 pas) yer 0
  )
  (while (> dboy 1200)
    (setq dn2 (polar dn1 0 1200))
    (if (= yer 1)
      (setq dn1L (list (car dn1) (- (cadr dn1) (* pas 2)))
            dn2L (list (car dn2) (cadr dn1L))
            yer 0
      )
      (setq dn1L dn1 dn2L dn2 yer 1)
    )
    (command "Line" dn1L dn2L "")
    (setq dboy (+ (- dboy 1200) (* Adr Cap))
          dn1 (polar dn2 pi (* Adr Cap))
    )
  )
  (if (/= dboy 0)
    (progn
      (if (= yer 1)
        (setq dn1L (list (car dn1) (- (cadr dn1) (* pas 2))))
        (setq dn1L dn1)
      )
      (command "Line" dn1L (polar dn1L 0 dboy) "")
    )
  )
  (setvar "osmode" osm)
  (prin1)
)

-Önce Donatı Çubuğu Çapı, Paspayı ve Bindirme boyunu giriyoruz.
-Duvarın hem başlangıç hemde bitişindeki düşey Kalıp çizgilerini seçiyoruz. Ayrıca duvar boyu gibi bir değer girmeye gerek kalmıyor böylelikle.
-Betonarme Duvar uzunluğumuzun 12.00 m. (1200 cm.) den küçük yada büyük olması durumlarını gözönüne alıyoruz. 1200 cm. den küçük olması durumu zaten, uzun duvarın son donatı parçasını yerleştirme algoritmasıyla çözülmüş oluyor.
-Donatı çubuklarının şaşırtma mesafelerini 2*paspayı kadar aldım.
-Verdiğin örneklerde Kalıp çizimlerini cm. biriminde yaptığını düşündüğüm için cm. birimini esas aldım...

Selamlar, Sevgiler, Herkese Kolay Gelsin...

ProhibiT (22.11.2009 19:00 GMT)

23.11.2009 14:37    

k005
Hocam çook teşekkürler.. elinize sağlık. tam istediğim gibi.. ---> %100 doğru...

05.03.2015 12:59    

murat34464
ELİNİZE SAĞLIK COK GÜZEL COK FAYDALI BİR LİSP OLMUŞ.EMEKLERİNİZE ELLERİNİZE SAĞLIK..

05.03.2015 14:54    

seboli61
Bende ilk defa görüyorum.Çok iyimiş.

26.07.2018 08:06    

enginproyapi
elinize sağlık. peki ilk demirde gönye varsa nasıl yapabiliriz.
mesela 50 cm lik gönyemiz var. ilk demir 11.50m, sonrakiler 12.00 m olacak.
nasıl ayarlayabiliriz.

16.12.2022 18:00    

k005
@Prohibit

Hocam merhaba. nasılsınız?

Bu yazmış olduğunuz lispte bir değişiklik + ekleme yapabilirmiyiz..?

Şöyleki :

Kalıp başlangıç ve bitiş noktası ; UCS X yönünde düzgün çalışıyor... ok.

Fakat kalıp başlangıcı ve bitişi Y yönünde seçilirse eksik yada hata var hocam... <--- bunu müsait olduğunuzda güncelleyebilirmiyiz.

Teşekkürler.

> 1 <
Copyright © 2004-2022 SQL: 2.218 saniye - Sorgu: 71 - Ortalama: 0.03124 saniye