Đến nội dung


Hình ảnh
- - - - -

[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ở


  • Please log in to reply
6 replies to this topic

#1 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 12 April 2014 - 11:56 AM

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


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 12 April 2014 - 02:48 PM

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.


  • 0

#3 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 12 April 2014 - 04:15 PM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#4 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 12 April 2014 - 04:39 PM

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é


  • 0

#5 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 16 April 2014 - 08:56 AM

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ồ ?


  • 1

#6 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 16 April 2014 - 12:11 PM

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)


  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#7 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 17 April 2014 - 06:02 PM

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


  • 0