15.07.2015 14:28    

ProhibiT
Kod:

;|----------------------------------------------------------------------------|
| AutoCAD çizim ekranından seçilerek belirlenen bir BLOCK altında yer alan   |
| ATTRIBUTE nesnelerinin değerleri, MS EXCEL uygulaması etkin durumda ise,   |
| bu dosyaya yeni bir çalışma sayfası eklenerek, MS EXCEL uygulaması etkin   |
| durumda değilse, yeni bir oturum açılarak, ilk çalışma sayfasına yazılır.  |
|                www.cizimokulu.com  M. Şahin Güvercin (ProhibiT) 15-07-2015 |
|____________________________________________________________________________|;
(defun c:AtEx (/ *error* AtR Books EbL ExB ExceLApp ExCeLLs n NewBook PaT PvT
               rn Sheet1 Sheets sTn sTr VaL)
  (vl-load-com)
  (setq ocmd (getvar "cmdecho") odz (getvar "dimzin") atd (getvar "attdia"))
  (defun *error* (er /)
    (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
    (if ocmd (setvar "cmdecho" ocmd)) (if odz (setvar "dimzin" odz))
    (if atd (setvar "attdia" atd)) (if er (princ (strcat "\n" er))) (prin1))
  (setvar "cmdecho" 0) (command "_.undo" "group") (setvar "dimzin" 0)
  (while (not ExB) (princ "\r Attribute Export edilecek Block'u seçiniz.")
    (setq ExB (ssget ":s" (list (cons 0 "INSERT")))
          ExB (cdr (assoc 2 (entget (ssname ExB 0)))))
    (if (/= (cdr(assoc 70 (entget(tblobjname "Block" ExB)))) 2)(setq ExB nil)))
  (setq ExceLApp (vlax-get-or-create-object "Excel.Application"))
  (if (setq NewBook (vlax-get-property ExceLApp "ActiveWorkbook"))
    (setq Books  (vlax-get-property ExceLApp "Workbooks")
          Sheets (vlax-get-property NewBook "Sheets")
          Sheet1 (vlax-invoke-method Sheets "Add"))
    (setq Books   (vlax-get-property ExceLApp "Workbooks")
          NewBook (vlax-invoke-method Books "Add")
          Sheets  (vlax-get-property NewBook "Sheets")
          Sheet1  (vlax-get-property Sheets "Item" 1)))
  (setq ExCeLLs (vlax-get-property Sheet1 "Cells"))
  (vlax-put-property ExceLApp "UseSystemSeparators" :vlax-false)
  (vlax-put-property ExceLApp "DecimalSeparator" ".")
  (vlax-put-property ExceLApp "ThousandsSeparator" " ")
  (vla-put-visible ExceLApp :vlax-true)
  (setq PvT (tblobjname "Block" ExB) sTn 0 sTr 1)
  (while (setq PvT (entnext PvT))
    (if (= (cdr (assoc 0 (entget PvT))) "ATTDEF")
      (progn (setq sTn (1+ sTn)
                   AtR (append AtR (list (cdr (assoc 2 (entget PvT))))))
     (vlax-put-property ExCeLLs "Item" sTr sTn (cdr (assoc 3 (entget PvT)))))))
  (setq EbL (ssget "x" (list (cons 0 "INSERT") (cons 2 ExB))) n -1)
  (while (< (setq n (1+ n)) (sslength EbL))
    (setq sTr (1+ sTr) PvT (ssname EbL n))
    (while (= "ATTRIB" (cdr (assoc 0 (entget (setq PvT (entnext PvT))))))
      (setq PaT (cdr (assoc 2 (entget PvT))) VaL (cdr (assoc 1 (entget PvT))))
      (vlax-put-property ExCeLLs "Item" sTr (1+ (vl-position Pat AtR)) VaL)))
  (setq rn (vlax-get-property ExCeLLs "Range"
             (vlax-variant-value (vlax-get-property ExCeLLs 'Item 1 1))
             (vlax-variant-value (vlax-get-property ExCeLLs 'Item sTr sTn))))
  (vlax-invoke-method (vlax-get-property rn 'Columns) 'AutoFit)
  (vlax-invoke-method (vlax-get-property rn 'Rows) 'AutoFit)
  (vlax-put-property (vlax-get-property rn 'Borders) 'Color
    (vlax-make-variant "0.0"))
  (vlax-put-property (vlax-get-property rn 'Borders) 'LineStyle
    (vlax-make-variant "1"))
  (vlax-put-property ExcelApp "UseSystemSeparators" :vlax-true)
  (mapcar 'vlax-release-object
          (list rn ExCeLLs Sheet1 Sheets NewBook Books ExcelApp))
  (setq ExcelApp nil) (gc) (gc)
  (if (= (logand (getvar "undoctl") 8) 8) (command-s "_.undo" "e"))
  (if odz (setvar "dimzin" odz)) (if atd (setvar "attdia" atd))
  (if ocmd (setvar "cmdecho" ocmd)) (prin1))


Tüm dostların bayramı kutlu olsun :)

ProhibiT (03.12.2021 06:42 GMT)

15.07.2015 15:40    

mttlp
eline sağlık hocam
excell Dosyasından import etmek için nasıl yabilirim

23.07.2015 09:28    

alpayelmas
Prohibit hocam benim bu attribute ler ile ilgili bir sorum olucak müsayit olduğunuzda bir cevap yazmanız mumkun olursa cok sevınırım. daha önce paylaştıgım kalıp metraj lısplerı ve demir lisplerinde attriblerdeki tag değerlerini axcel'e aktarıp metraj formatlarını excelde duzenleyerek hakediş oluşturuyorum. Ancak autocad dosyasında ayrıca ataçmaları duzenlemek ve excel metraj sayfalarına değerler nerelerden gelmiş hazırlamak gerekiyor. Bu nedenle işlem yaptırdıgım attributelerde seçim sırasına göre bir sıra numarasına seçilmiş attrib in içine yeni bir tag ekleyip yazmak istiyorum. Bu tag değerinide attrib ile oluşturulmuş örneğin bir demir pozunda görünmesini autocad uzerınde sağlamak istiyorum.
Bunu nasıl yapabiliriz. Kısacası hocam attrib e yeni bir tag eklemek ve sıralı numara verıp autocad ekranında bu attrıbde sıra no guzuksun ıstıyorum.

23.07.2015 10:12    

Travaci
Alpay okadarını yapabiliyorsan bunu zaten yapabileceğini düşünüyorum :)
Aynı isimde yeni bir block oluştur (içinde numara vericeğin tag olucak)
Projeni bu block un olduğu dosyaya taşı daha sonra block una "attsync" uygula
Attrib leri okuduğun gibi aynı şekilde yazdırıyorsun, bilmiyorsan sitede örnekler mevcut.
Gerisi zaten aynı ...

06.10.2022 09:35    

alpayelmas
Hocam merhaba ;
Nasılsınız?

Hocam bir dosyada Attribute un tag ismi ÖLÇÜ ancak içerdiği değeri (val) alarak yazdıramıyorum. muhtemelen tag ismi türkçe karakter içerdiği için. tek nesne seçerek bu değeri nasıl alacağım konusunda yardımınız olurmu ? benim kullandığım kodun bir bölümü aşşağıda "NO" yazan kısım ile NO isimli tag ın value değerini alıyor ancak "ÖLÇÜ" yazdığımda değeri alamıyor.

(defun c:xxx (/ tag val ps i ss en an ad)
(setq obj (car (entsel)) )
(setq str (LM:getattributevalue obj "NO" ) )
(princ str)
)


(defun LM:getattributevalue ( blk tag / enx )
(if (= "ATTRIB" (cdr (assoc 0 (setq enx (entget (setq blk (entnext blk)))))))
(if (= (strcase tag) (strcase (cdr (assoc 2 enx))))
(cdr (assoc 1 enx))

)
)
)

06.10.2022 11:39    

ProhibiT
Merhaba alpayelmas,

kullandığınız LM:getattributevalue fonksiyonu (anlaşılan LeeMac'ten alınmış) içinde Türkçe Karakter(ler) nedeniyle bir hata oluyor görünüyor. O fonksiyon nasıl bir şey nasıl çalışıyor bilmediğimiz için yorum yapma şansımız yok. Sözünü ettiğimiz sitede çok güzel paylaşımlar var. Bununla birlikte benim temel eleştirim, en temel işlemleri bile fonksyion (function) olarak tanımlıyor, bunları da diğer fonksiyonlardan çağırıyor. Kendince (haklı da olabilir) bir hiyerarşik düzen (uzun ve karmaşık) kuruyor, kullanıcı da verilen örnekte düzgün çalıştığını görünce bayılıyor buna. Ama ihtiyaçlarına göre düzenlemeye çalışınca yolunu kaybediyor, boğulup kalıyor.

https://cizimokulu.com/forums.php?m=posts&p=68037#68037 linkindeki yazımda da bahsettiğim gibi,
"Zaman zaman herkesin gözünün korktuğu matematik konularının o kadar da zor olmadığını örnekleyerek açıklamaya çalışıyorum. Orta öğretim dahil, eğitimin her aşamasında türev diye bir şey anlatılır, bir sürü de formül verilir. Öyle onlarca türev formülü falan yok :) bir tek türevin geometrik anlamı var. İntegral de öyle. Matrisler konusunda da durum aynı."
Öğrenci, aslında tek bir formülden türemiş onlarca formülü ezberlemek zorunda kalınca (aslında başlangıçta öğrencinin de işine geliyor) altında eziliyor, hem öğrenemiyor, hem de boğulup kalıyor. Ben bu LM fonksiyonlarını buna benzetiyorum, tek bir işlevin (fonksiyonun, komutun ya da işlemin) her kullanım türü için bir fonksiyon yazılıyor.

Sizin yapmak isteğiniz işlemde böyle bir fonksiyon kullanmaya ihtiyaç yok ki. Bir Attribute'ün değerine ulaşmak için VsiualLisp'e bile ihtiyaç yok AutoLisp komutlarıyla gayet kolay ve rahat bir şekilde yapılabilir.

Ne demiş atalarımız, "Don't create the problem and then trying to resolve them."

Kolay gelsin.

06.10.2022 13:43    

alpayelmas
Kıymetli hocam , nazik mesajınız için çok teşekkür ederim. Söylediklerinizde çok haklisiniz. Ben çok uzun zamandır lee mac in sitesinden aldığım bu fonksiyonlari kullaniyordum. Ancak bu problemi çözemedim. Sizin mesajınızda bahsettiğiniz autolisp komutları ile bir örnek yazmaniz mükünmü ? Kitaptan da ayrica kontrol edebilir ve fonksiyon yerine artik attrib ler ile ilgili olarak bu kodlari kullanirim.
İlginize ve ayırdığınız kıymetli vaktinize tekrar teşekkür ederim.

07.10.2022 13:41    

alpayelmas
ProhibiT Hocam problemimi sınırlı olsa da çözdüm , teşekkürler...

> 1 <
Copyright © 2004-2022 SQL: 1.137 saniye - Sorgu: 65 - Ortalama: 0.0175 saniye