04.03.2011 09:54    

delao42
Arkadaşlar herkese kolay gelsin,

açılmış konulara baktım fakat sorunuma çözüm bulamadım,eğer konu daha önceden açılmış ise de özür dilerim.

sorum şu: mimari planda oda adı,mahal no ve m2 sini içeren bir sürü attribute var.

bu attributelerde farklı farklı text yükseklikleri ayarlanmış, hatta kimileri yazı büyüklüğü sebebi ile odanın dışına taşmış, acaba bunların hepsini tek seferde seçtiğimizde referans noktalarını değiştirmeden yazı boyutunu ayarlamaya imkan var mıdır ?

04.03.2011 11:55    

ProhibiT
"seçtiğimiz referans noktalarını değiştirmeden" ifadesi tanımsız. aşağıdaki verdiğim fonksiyon, find/replace mantığıyla, eski attribute text yüksekliklerini yenisi ile değiştirir.
Kod:

;;; M. Şahin Güvercin - 04-03-2011
(defun c:CaH ()
  (setvar "cmdecho" 0) (command "_.undo" "group")
  (initget 1) (setq OaTxh (getreal "\n  Eski Attribute Text Yüksekliği: "))
  (initget 1) (setq NaTxh (getreal "\n    Yeni Attribute Text Yüksekliği: "))
  (princ "\n Attribute Text yüksekliğini değiştirmek istediğiniz bLock'ları seçiniz...")
  (setq aTrs (ssget (list (cons 0 "insert") (cons 66 1))) L (sslength aTrs) n -1)
  (while (< (setq n (1+ n)) L)
    (setq pvt (ssname aTrs n))
    (while (= (cdr (assoc 0 (entget (setq pvt (entnext pvt))))) (strcase "attrib"))
      (setq aTr (entget pvt))
      (if (= (atof (rtos (cdr (assoc 40 aTr)))) OaTxh)
        (setq aTr (subst (cons 40 NaTxh) (assoc 40 aTr) aTr)))
      (entmod aTr) (entupd (cdr (assoc -1 aTr)))))
  (command "_.undo" "e") (prin1)
)

Kolay eglsin.

ProhibiT (04.03.2011 13:39 GMT)

04.03.2011 12:40    

delao42
Sn. prohibit ,

vermiş olduğunuz fonksiyonu çalıştıramamaktayım.

"too many arguments" diye bir hata veriyor.

04.03.2011 13:41    

ProhibiT
Benim hatam, initget parantezini kapatmayı unutmuşum :( şimdi düzelttim. tekrar dener misiniz?

04.03.2011 13:50    

delao42
Parantez hatasını daha önceden farkederek düzeltmiştim. hala too many arguments diyor ve yazı boyutunu ayarlamıyor.

04.03.2011 14:15    

ProhibiT
Bahsettiğim yalnızca parantezi kapatmak değil. initget fonksiyonun tamamladım, bir başka initget daha ekledim. son yüklediğim hali bende problemsiz çalışıyor.

08.03.2011 12:04    

delao42
Evet denedim.
şu an problemsiz çalışıyor.
teşşekür ederim.

29.09.2011 12:24    

mimar_ist
Meraba arkadaşlar
benim attribute hakkında bi sorum olacak
mekan adları m2 leri attribute ile oluşturulumuş planı 180 derece çevirince yazılarda 180 dönüyor ama rotation 0 olsun istiyorum
ama properties den değiştirince yazılar block dışına çıkıyor rotation nasıl 0 yapabilirim

30.09.2011 06:32    

mimar_ist
Iyi günler,
attribute text block larını rotate etmek için prohibit lisp yazdı, ellerine sağlık çok işime yaradı
lispin kullanımı için lispi yükledikten sonra

"autocad komut satırından bcv girdiğinizde, fonksiyon sizden block adını girmenizi isteyecektir.
block adını yazarak değil ilgili block'u ekrandan seçerek belirlemek için, sağ tıklayın, ya da enter girin. ekranda block objesini seçmenizi isteyen bir mesaj çıkacaktır. ekranda işleme almak istediğiniz bloklardan birini seçmeniz yeteridir.

fonksiyon ikinci olarak, attribute'lerinizin hangi açıda olmasını istediğinizi soracaktır. bu soruya da doğrudan komut satırından açı değerini girerek cevap verebileceğiniz gibi, gene sağ tıklayarak veya enter ile geçtiğinizde, sizden sırasıyla iki nokta seçmeniz istenir. böylelikle ekranda mevcut bir objenin iki noktasını seçerek veya boşlukta iki nokta seçerek istediğiniz açıyı belirleyebilirsiniz.

son adım, işleme alınacak block'ların seçilmesini olacak. ekranda select object(s) mesajı çıktığında, autocad genel obje seçimine girilecek, isterseniz windows, crossing gibi yöntemlerle çiziminizin belli bir bölgesini seçebileceğiniz gibi, tek bir objeye tıklayarak ta seçim yapabilirsiniz. windows veya crossing kullandığınızda seçilen bölgede, yalnızca daha önceden adını belirlediğiniz blocklar seçilecektir. select object(s) mesajına cevap olarak "all" girerseniz, çiziminiz içinde daha önceden adını belirlediğiniz tüm block'lar seçilerek işleme alınacaktır."

benim çok işime yaradı umarım size de yardımcı olur ;)
Kod:

;;;============================================================================
;;;                     Hazırlayan: M. Şahin Güvercin                         
;;;                    www.autocadokulu.com 30-09-2011                         
;;;============================================================================
(defun c:bcv (/ bName angL sSeT L m pivot p0 insPt dangL p1 dx dy dz)
  (setvar "cmdecho" 0) (command "_.undo" "begin") (vl-load-com)
  (if (= (setq bName (getstring "\nBLock Name: ")) "")
    (setq bName (cdr (assoc 2 (entget (ssname (ssget ":s"
                                               (list (cons 0 "insert"))) 0)))))
    (if (not (tblsearch "bLock" bName))
      (progn (princ (strcat "\n" bName " isimli bLock bulunamadı!")) (exit))))
  (if (setq angL (getreal (strcat "\n" bName
                                " bLock'larının çevrileceği açıyı giriniz: ")))
    (setq angL (* (/ angL 180.0) pi))
    (setq angL (angle (setq p1 (getpoint "\nİlk noktayı seçiniz."))
                      (getpoint p1 "\nİkinci noktayı seçiniz."))))
  (princ "\nÇevrilecek Blockları seçiniz.")
  (setq sSeT (ssget (list (cons 0 "insert") (cons 2 bName)))
        L (sslength sSeT) m -1)
  (while (< (setq m (1+ m)) L)
    (setq pivot (entget (ssname sSeT m))
          p0    (vla-getboundingbox (vlax-ename->vla-object
                                      (ssname sSeT m)) 'mnp 'mxp)
          p0    (mapcar '(lambda (pr1 pr2) (/ (+ pr1 pr2) 2.0))
                        (vlax-safearray->list mnp) (vlax-safearray->list mxp))
          insPt (cdr (assoc 10 pivot)) dangL (- angL (cdr (assoc 50 pivot))))
    (vla-transformby (vlax-ename->vla-object (cdr (assoc -1 pivot)))
      (vlax-tmatrix (list
          (list (cos dangL) (- (sin dangL)) 0 (- (car insPt) (- (* (car insPt)
                                   (cos dangL)) (* (cadr insPt) (sin dangL)))))
          (list (sin dangL) (cos dangL) 0 (- (cadr insPt) (+ (* (car insPt)
                                   (sin dangL)) (* (cadr insPt) (cos dangL)))))
          (list 0 0 1 0) (list 0 0 0 1))))
    (setq p1 (vla-getboundingbox (vlax-ename->vla-object
                                   (ssname sSeT m)) 'mnp 'mxp)
          p1 (mapcar '(lambda (pr1 pr2) (/ (+ pr1 pr2) 2.0))
                     (vlax-safearray->list mnp) (vlax-safearray->list mxp))
          dx (- (car p0) (car p1)) dy (- (cadr p0) (cadr p1))
          dz (- (caddr p0) (caddr p1)))
    (vla-transformby (vlax-ename->vla-object (ssname sSeT m)) (vlax-tmatrix
        (list (list 1 0 0 dx) (list 0 1 0 dy) (list 0 0 1 0) (list 0 0 0 1)))))
  (command "_.undo" "e") (princ)
) (write-line "\nPrepared by: M. Şahin Güvercin - www.autocadokulu.com")(prin1)





umarım doğru şekilde ekleyebilmişimdir.

ProhibiT (30.09.2011 09:01 GMT)

30.09.2011 08:58    

ProhibiT
Gayet doğru eklemişsiniz :)

lakin gece saat 2'de uyanıp, uyur uyanık bir zihinle yazarken, bazı hatalar yapmışım.

önce block'u inertion point'ine göre çevirip, sonra da yerinin değişmemesi için daha önceden p0 değişkenine atadığım merkez noktaya bu sefer de transformation matrix'i translate için kullanmışım. yani vla-transformby fonksiyonunu bir çevirmek için bir de yer değiştirme için iki defa kullanmışım.

bu gün sakin kafayla bakınca buna gerek olmadığını, doğrudan doğruya p0 noktasına göre transformation uygulandığında yerinin değişmeden çevirme işleminin yapılabileceğini farkettim.

böylelikle 6 adet değişkene ihtiyaç kalmadı, fonksiyon kodu epeyce kısaldı.
Kod:

;;;============================================================================
;;;                     Hazırlayan: M. Şahin Güvercin                         
;;;                    www.autocadokulu.com 30-09-2011                         
;;;============================================================================
(defun c:bcv (/ bName angL sSeT L m pivot p0 dangL)
  (setvar "cmdecho" 0) (command "_.undo" "begin") (vl-load-com)
  (if (= (setq bName (getstring "\nBLock Name: ")) "")
    (setq bName (cdr (assoc 2 (entget (ssname (ssget ":s"
                                               (list (cons 0 "insert"))) 0)))))
    (if (not (tblsearch "bLock" bName))
      (progn (princ (strcat "\n" bName " isimli bLock bulunamadı!")) (exit))))
  (if (setq angL (getreal (strcat "\n" bName
                                " bLock'larının çevrileceği açıyı giriniz: ")))
    (setq angL (* (/ angL 180.0) pi))
    (setq angL (angle (setq p1 (getpoint "\nİlk noktayı seçiniz."))
                      (getpoint p1 "\nİkinci noktayı seçiniz."))))
  (princ "\nÇevrilecek Blockları seçiniz.")
  (setq sSeT (ssget (list (cons 0 "insert") (cons 2 bName)))
        L (sslength sSeT) m -1)
  (while (< (setq m (1+ m)) L)
    (setq pivot (entget (ssname sSeT m))
          p0    (vla-getboundingbox (vlax-ename->vla-object
                                      (ssname sSeT m)) 'mnp 'mxp)
          p0    (mapcar '(lambda (pr1 pr2) (/ (+ pr1 pr2) 2.0))
                        (vlax-safearray->list mnp) (vlax-safearray->list mxp))
          dangL (- angL (cdr (assoc 50 pivot))))
    (vla-transformby (vlax-ename->vla-object (cdr (assoc -1 pivot)))
      (vlax-tmatrix (list
          (list (cos dangL) (- (sin dangL)) 0 (- (car p0) (- (* (car p0)
                                   (cos dangL)) (* (cadr p0) (sin dangL)))))
          (list (sin dangL) (cos dangL) 0 (- (cadr p0) (+ (* (car p0)
                                   (sin dangL)) (* (cadr p0) (cos dangL)))))
          (list 0 0 1 0) (list 0 0 0 1)))))
  (command "_.undo" "e") (princ)
) (write-line "\nPrepared by: M. Şahin Güvercin - www.autocadokulu.com")(prin1)

kolay gelsin.

14.04.2022 11:51    

halilozcakir
Merhaba hocam ATT içindeki textleri yazarken 0 dan farklı garip bir açıda yazılmış bunların att içindeyken derede değerlerini 0 yapabilir miyiz nasıl?

15.04.2022 06:14    

Travaci
Blok editorden düzeltebilirsiniz.

15.04.2022 09:45    

ProhibiT
Ek bilgi: Block Editor ile yapacağınız düzenlemelerin, daha önce insert edilen bloklarda da geçerli olabilmesi için ATTSYNC komutu kullanılmalıdır. Aksi durumda düzeltilen Attribute açıları (veya yazı yükseklikleri) yeni insert edilen bloklarda geçerli olurken, mevcut bloklar olduğu gibi kalacaktır.

> 1 <
Copyright © 2004-2022 SQL: 1.459 saniye - Sorgu: 81 - Ortalama: 0.01802 saniye