Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
tien2005

[Yêu cầu] lisp mở file mới rồi thực hiện các lệnh trên file vừa mở

Các bài được khuyến nghị

tien2005    97

Các Bạn giúp mình lisp như sau:

1. mở 1 file

2. kiểm tra file đã được mở xong chưa

3. thực hiện các lệnh hoặc lisp khác trên file được mở ở bước 1

4. đóng file được mở ở bước 1 có tùy chọn lưu hay không lưu file

5. kiểm tra file đã được đóng xong chưa

 

Bên dưới là líp do tôi viết nhưng chưa làm được từ bước 2

(defun c:ofl ()
  ;1 - mo file bat ky
  (command "ai_editcustfile"
	   (getfiled "Mo 1 file bat ki" "" "dwg" 0)
  )
  ;2 - kiem tra da mo file xong chua
  ;3 - chay cac lisp khac trong ban ve mo vua mo, vd ve duong thang, duong tron
  (entmake (list (cons 0 "line")
		 (cons 10 (list 0 0 0))
		 (cons 11 (list 1000 1000 0))
	   )
  )
  (entmake (list (cons 0 "circle")
		 (cons 10 (list 500 500 0))
		 (cons 40 500)
	   )
  )
  ;4 - close file co tuy chon save file
  ;5 - kiem tra file da duoc close xong chua(muc dich la de thuc hien tiep vong lap o buoc 1
  (princ)
)

Thanks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Tôi nghĩ lisp không làm được việc này, vì lisp chỉ ảnh hưởng đối với file đang mở. Khi bạn mở file khác thì file mới không hề biết đến cái lisp đang chạy ở file kia.Bạn nên dùng vba hoặc dot.net thì hay hơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tien2005    97

thanks ketxu

 

như vậy là lisp có thể làm được

đoạn ở giữa cũng đơn giản là chọn các block theo tên đã biết rồi vẽ pline nối chúng lại với nhau hoặc xóa đi, ..

các hàm này đã được load ở Starup Suite (nên mới y/cầu kiểm tra file đã được mở xong chưa), còn các tham số thì mình ghi ở registry

 

ketxu giúp mình lisp này nhé

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
gia_bach    1.442

thanks ketxu

 

như vậy là lisp có thể làm được

đoạn ở giữa cũng đơn giản là chọn các block theo tên đã biết rồi vẽ pline nối chúng lại với nhau hoặc xóa đi, ..

các hàm này đã được load ở Starup Suite (nên mới y/cầu kiểm tra file đã được mở xong chưa), còn các tham số thì mình ghi ở registry

 

ketxu giúp mình lisp này nhé

Làm được, phụ thuốc cái lisp ở giữa kia của bạn nó làm cái gì. 

Nói chung thì Lisp làm được. Nhưng phụ thuộc vào cái Lisp của bạn sử dụng các hàm gì ? 

Trong t/hợp này (thực hiện trên 1 file mới mở), có 1 số hàm Lisp không thể sử dụng (vd : SSget, entsel,...), mà chỉ có thể sử dụng cấc hàm vòng lặp (Vla-for, foreach,... ) duyệt qua toàn bộ bản vẽ để chọn đối tượng.

Như vậy khái niệm "đơn giản là chọn các Block ..." có thực sự đơn giản hay không vẫn có quá mơ hồ ?

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.653

Hướng của anh gia_bach phù hợp chạy hàng loạt (DBx) mà k cần Open file đó lên trên Editor, là gợi ý khá hay nên bạn hãy xem lại

 

Nếu cần Open thì cũng có thể sử dụng phương pháp truyền biến trạng thái giữa các file như ghi vào registry, txt, ini, blackboard,vl-propagate.

Lisp của bạn load ở StartUp nên nó sẽ là một hàm chạy khi CAD khởi động. Lệnh của bạn gọi lại hàm này. Hàm đó sẽ làm gì tùy thuộc vào biến trạng thái của bạn.

Ví dụ :

- Hàm tên là (defun func()(đọc biến flag)(cond ((flag=1 thì làm j)(flag=1 thì làm gì ...)) ...(ghi lại biến flag khi thoát hàm))

- Hàm (func) đặt trước lệnh là (c:abc()(func))

 

- Khi gọi lệnh ở file A, set lại biến flag là 1, tức là trạng thái chạy ở file gốc => Bật file mới

- Khi file mới bật lên, tự nó chạy hàm (func), kiểm tra lại flag, thấy nó bằng 1 => làm công việc 1. Làm xong tự đặt lại Flag để thể hiện là xong 1 file không phải file gốc

(Nếu muốn lặp nhiều file thì bạn theo hướng đó mà tiếp tục nhé)

 

Còn một số ý khác như

2. kiểm tra file đã được mở xong chưa :

- Sử dụng hàm Rename, nếu k được thì là file đang mở, được thì là đang không mở. Đương nhiên mở xong thì nó sẽ chạy lisp của bạn rồi, k phải kiểm tra

3. thực hiện các lệnh hoặc lisp khác trên file được mở ở bước 1

- Đã nói ở trên

4. đóng file được mở ở bước 1 có tùy chọn lưu hay không lưu file

- Command closed thôi

5. kiểm tra file đã được đóng xong chưa

Bước 2

 

Rất tiếc là dạo này Ket bận quá, k hiện thực hóa được, bạn có thể tiếp tục ý tưởng trên gợi ý đó :(

(Lưu ý : ân test tựt - sai bạn thông cảm)

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
tien2005    97

Mấy hôm nay mình cũng bận quá, lên forum thì thấy có 2 comment. Thanks gia_bach va ketxu đã góp ý

 

- Mình mới test thì khi lisp được load trong startup thì vẫn thực hiện được lệnh ssget trong các file được mở

- Cách kiểm tra file open/close cơ bản mà mình lại không nghĩ đến. Thanks ketxu lần nữa

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×