25.11.2019 17:08    

kiorgi
Herkese merhaba,
Çok araştırdım, örnekleri inceledim ama istediğim olmadı maalesef (belki de ben araştırmayı beceremedim).
Arkadaşlar yapmak istediğim çok basit:
lisp ile mevcut çizime başka bir dwg dosyasını blok olarak çağırmak (xref olarak değil).
Nedir bunun yolu?
Herkese şimdiden teşekkürler.

26.11.2019 14:15    

ehya
C sürücüsünde yer alan cizim.dwg adlı dosyayı blok olarak orjine yerleştirir
Dosya adını,yolunu ve yerleşim yerini kendinize göre uyarlayın...

Kod:

(setq obj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument obj))
(setq msp (vla-get-ModelSpace doc))
(setq yerlesim (vlax-3d-point 0 0 0))
(setq bl (vla-InsertBlock msp yerlesim "c:\\cizim.dwg" 1 1 1 0))

26.11.2019 18:04    

kiorgi
Alıntı
ehya :
C sürücüsünde yer alan cizim.dwg adlı dosyayı blok olarak orjine yerleştirir
Dosya adını,yolunu ve yerleşim yerini kendinize göre uyarlayın...

Kod:

(setq obj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument obj))
(setq msp (vla-get-ModelSpace doc))
(setq yerlesim (vlax-3d-point 0 0 0))
(setq bl (vla-InsertBlock msp yerlesim "c:\\cizim.dwg" 1 1 1 0))





Kodlar gayet güzel çalıştı. Emeğine sağlık Ehya. Ben bunu biraz daha açtım. Aşağıda da göreceğin üzere dcl yardımı ile bir butona bağladım. Ekranda tıkladığım noktaya bloğu getirmesini istiyorum. Ancak 3d point sorunu oluştu. Hata mesajı: bad 3D point: nil
Bunu nasıl hallederiz? Şimdiden teşekkürler.

ilgili lisp kodları:

(defun c:test ()
(setq dcl_id (load_dialog "deneme.dcl"))
(if (null (new_dialog "tablo_01" dcl_id))(exit))

(action_tile "tbl-01" "(xxx)")
(action_tile "accept" "(exit)")
(start_dialog)
(unload_dialog dcl_id)
)


(defun xxx ()
(setq p1 (getpoint "\nBir nokta seçiniz:"))
(setq obj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument obj))
(setq msp (vla-get-ModelSpace doc))
(setq yerlesim (vlax-3d-point p1))
(setq bl (vla-InsertBlock msp yerlesim "c:\\Users\\xxxxx\\Desktop\\Yeni klasör\\test.dwg" 1 1 1 0))
(done_dialog 1)
)

27.11.2019 09:22    

ehya
Yazdığınız kodlamada düzeltme yapmak yerine örnek bir kodlama paylaşayım.


;; DCL BÖLÜMÜ

Kod:

tablo_01 : dialog {
label = "Örnek Çalışma";
: row {
: button { key = "tbl-01"; label = "BLOK YERLEŞTİR"; width = 2;}
: button { key = "okey" ; label = "TAMAM"; height = 2; width = 15; is_default = true ;}
}
}


;; LISP BÖLÜMÜ


Kod:

(defun diag_sor ()
(if (= diag 1)(progn (xxx)))
(if (= diag 2)(progn (princ "\nİşlem yapılmadan kapatıldı.."))))

(defun c:test ()
(setq dcl_id (load_dialog "deneme.dcl"))
(if (null (new_dialog "tablo_01" dcl_id))(exit))

(action_tile "tbl-01" "(setq diag 1)(done_dialog)")
(action_tile "okey" "(setq diag 2)(done_dialog)") 
(start_dialog)
(diag_sor) 
(princ)  )
 
 
(defun xxx ()
(setq p1 (getpoint "\nBir nokta seçiniz:"))
(setq obj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument obj))
(setq msp (vla-get-ModelSpace doc))
(setq yerlesim (vlax-3d-point p1))
(setq bl (vla-InsertBlock msp yerlesim "c:\\Users\\xxxxx\\Desktop\\Yeni klasör\\test.dwg" 1 1 1 0))
(unload_dialog dcl_id)
)

29.11.2019 16:12    

kiorgi
Ehya eline sağlık, çok teşekkürler.
İyi çalışmalar.

> 1 <
Copyright © 2004-2022 SQL: 1.024 saniye - Sorgu: 57 - Ortalama: 0.01797 saniye