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.
Funiki28

[Help] Nhờ Sửa Giúp File Dcl Và File Lisp Chèn Block Được Chọn

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

Funiki28    2

https://drive.google.com/open?id=0B_ToehCkY5kzNXdhTktxVG1SWDg

 

https://drive.google.com/open?id=0B_ToehCkY5kzRzY2RDJteVUxd0k

 

Hi anh em

Mình đang tập tọe viết DCL, có làm file dcl này nhưng bị lỗi ko chạy đc. Mọi người xem giúp xem bị lỗi ở đâu với.

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
quansla    232

https://drive.google.com/open?id=0B_ToehCkY5kzNXdhTktxVG1SWDg

 

https://drive.google.com/open?id=0B_ToehCkY5kzRzY2RDJteVUxd0k

 

Hi anh em

Mình đang tập tọe viết DCL, có làm file dcl này nhưng bị lỗi ko chạy đc. Mọi người xem giúp xem bị lỗi ở đâu với.

Thanks !

Không rõ lý do nhưng mình không tải được file DCL chỉ có tải đươc LSP

Một số ý kiến tham khảo.

1. File dwg (cụ thể là "Tapblockset4575.dwg"; "Tapblockset4550.dwg"; "Tapblockset4540.dwg") phải được đặt trong thư mục được Add Support của Cad thì mới tìm được muốn kiểm tra bạn có thể tham khảo hàm (findfile "Tapblockset4540.dwg") chẳng hạn

2. Nên viết cấu trúc của DCL theo kiểu của Lee (dùng hàm cond ...) link http://www.lee-mac.com/listboxsync.html

mình mới nghĩ được thế thôi, chúc vui

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
Funiki28    2

Không rõ lý do nhưng mình không tải được file DCL chỉ có tải đươc LSP

Một số ý kiến tham khảo.

1. File dwg (cụ thể là "Tapblockset4575.dwg"; "Tapblockset4550.dwg"; "Tapblockset4540.dwg") phải được đặt trong thư mục được Add Support của Cad thì mới tìm được muốn kiểm tra bạn có thể tham khảo hàm (findfile "Tapblockset4540.dwg") chẳng hạn

2. Nên viết cấu trúc của DCL theo kiểu của Lee (dùng hàm cond ...) link http://www.lee-mac.com/listboxsync.html

mình mới nghĩ được thế thôi, chúc vui

TapperBlockSets : dialog { label = "Tapper Block Sets 45";
 : column {
 : boxed_column {
 : button {
 key = "but1";
 label = "Tapper Block Sets 45-40";
 is_default = false;
 }
 : button {
 key = "but2";
 label = "Tapper Block Sets 45-50";
 is_default = false;
 }
 : button {
 key = "but3";
 label = "Tapper Block Sets 45-75";
 is_default = false;
 }
 }
 : boxed_row {
 : button {
 key = "cancel";
 label = "Close";
 is_default = true;
 is_cancel = true;
 }
 }
 }
 
Đây là cấu trúc trong file DCL của mình. bạn xem hộ xem. Còn các file dwg đã đc để trong support của cad rồi. Mình mới học nên chưa có đọc đến các hàm của Lee sử dụng. :p

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
quansla    232

TapperBlockSets : dialog { label = "Tapper Block Sets 45";

 : column {

 : boxed_column {

 : button {

 key = "but1";

 label = "Tapper Block Sets 45-40";

 is_default = false;

 }

 : button {

 key = "but2";

 label = "Tapper Block Sets 45-50";

 is_default = false;

 }

 : button {

 key = "but3";

 label = "Tapper Block Sets 45-75";

 is_default = false;

 }

 }

 : boxed_row {

 : button {

 key = "cancel";

 label = "Close";

 is_default = true;

 is_cancel = true;

 }

 }

 }

 

Đây là cấu trúc trong file DCL của mình. bạn xem hộ xem. Còn các file dwg đã đc để trong support của cad rồi. Mình mới học nên chưa có đọc đến các hàm của Lee sử dụng. :P

 

Okie vậy bạn hãy xem cấu trúc file lsp và thử suy nghĩ nhé

(defun c:test (/)
  (setq dcl_id (load_dialog "TapperBlockSets.dcl"))
  (if (not (new_dialog "TapperBlockSets" dcl_id))
    (progn
      (alert "TapperBlockSets.dcl file could not be loaded!")
      (exit)
      )
    )
  (setq str "asasdfa"
	flag nil)
  (action_tile "but1" "(done_dialog) (setq flag 1)")
  (action_tile "but2" "(done_dialog)(setq flag 2)")
  (action_tile "but3" "(done_dialog)(alert str)")
  (action_tile "cancel" "(done_dialog)")
  (start_dialog)
  (unload_dialog dcl_id)
  (if (= 1 flag) (tbs4540))
  (princ)
  )

 

 kksaldljkfjaslkdflkaklsf

 

Hãy chú ý các dòng sau:

(setq str "asasdfa"

flag nil)

 

Với dòng này mình đã gán cho biến str giá trị "asasdfa" để kiểm tra, flag = nil

 

 

tiếp theo 

 

(action_tile "but3" "(done_dialog)(alert str)")

 

 

Bạn thấy rằng Nếu bạn thực hiện test Lệnh trong Cad, thì dù bạn đã cho (done_dialog), sau đó mới cho hiện alert (tức chủ ý là đóng hết Dialog , rồi mới cho hiện alert)

nhưng cad vẫn chưa thoát mà lại cho hiện đồng thời cả 2 hộp thoại: 1 của DCL (do bạn viết) và 1 của dòng Alert (đây CŨNG CHÍNH LÀ NGUYÊN NHÂN CODE BAN ĐẦU BẠN VIẾT KHÔNG HOẠT ĐỘNG MÀ TREO MÁY) cad chưa thoát được hộp thoại DCL thì đối với dòng (getpoint) Cad không thực thi được -> treo

(so sánh với Code cũ: (action_tile "but3" "(done_dialog)(tbs4575)")

 

Vậy tính sao đây, bạn có thể sử dụng như mình bằng cách không cho thực hiện (tbs4575) mà chỉ gán giá trị cho biến Flag = 1 sau khi hộp thoại kết thúc (unload_dialog) thì sẽ kiểm tra giá trị Flag để thực hiện lệnh cần dùng (chú ý với cách này, done_dialog không cần nhé)

bạn chạy lại code mới như mình sửa và nghiên cứu 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
Funiki28    2

Okie vậy bạn hãy xem cấu trúc file lsp và thử suy nghĩ nhé

(defun c:test (/)
  (setq dcl_id (load_dialog "TapperBlockSets.dcl"))
  (if (not (new_dialog "TapperBlockSets" dcl_id))
    (progn
      (alert "TapperBlockSets.dcl file could not be loaded!")
      (exit)
      )
    )
  (setq str "asasdfa"
	flag nil)
  (action_tile "but1" "(done_dialog) (setq flag 1)")
  (action_tile "but2" "(done_dialog)(setq flag 2)")
  (action_tile "but3" "(done_dialog)(alert str)")
  (action_tile "cancel" "(done_dialog)")
  (start_dialog)
  (unload_dialog dcl_id)
  (if (= 1 flag) (tbs4540))
  (princ)
  )

 

 kksaldljkfjaslkdflkaklsf

 

Hãy chú ý các dòng sau:

(setq str "asasdfa"

flag nil)

 

Với dòng này mình đã gán cho biến str giá trị "asasdfa" để kiểm tra, flag = nil

 

 

tiếp theo 

 

(action_tile "but3" "(done_dialog)(alert str)")

 

 

Bạn thấy rằng Nếu bạn thực hiện test Lệnh trong Cad, thì dù bạn đã cho (done_dialog), sau đó mới cho hiện alert (tức chủ ý là đóng hết Dialog , rồi mới cho hiện alert)

nhưng cad vẫn chưa thoát mà lại cho hiện đồng thời cả 2 hộp thoại: 1 của DCL (do bạn viết) và 1 của dòng Alert (đây CŨNG CHÍNH LÀ NGUYÊN NHÂN CODE BAN ĐẦU BẠN VIẾT KHÔNG HOẠT ĐỘNG MÀ TREO MÁY) cad chưa thoát được hộp thoại DCL thì đối với dòng (getpoint) Cad không thực thi được -> treo

(so sánh với Code cũ: (action_tile "but3" "(done_dialog)(tbs4575)")

 

Vậy tính sao đây, bạn có thể sử dụng như mình bằng cách không cho thực hiện (tbs4575) mà chỉ gán giá trị cho biến Flag = 1 sau khi hộp thoại kết thúc (unload_dialog) thì sẽ kiểm tra giá trị Flag để thực hiện lệnh cần dùng (chú ý với cách này, done_dialog không cần nhé)

bạn chạy lại code mới như mình sửa và nghiên cứu nhé

159771_capture.jpg

 

Cám ơn bạn, mình sẽ nghiên cứu cách của bạn. Nhờ bạn check hộ mình cái code trong file dcl của mình xem có lỗi gì mà khi mình đánh lệnh test thì nó hiện bảng như trê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
quansla    232

Thử thêm một dấu ngoặc (}) ở cuối cùng của đoạn code DCL xem nào

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
Doan Van Ha    2.680

Vẫn ko được bạn ạ  :wacko:

Được chứ sao lại không!

Thêm 1 dấu } vào cuối file thì dialog hết lỗi. Còn lỗi lisp thì chưa test.

TapperBlockSets : dialog { label = "Tapper Block Sets 45";
 : column {
   : boxed_column {
     : button { key = "but1"; label = "Tapper Block Sets 45-40"; is_default = false; }
     : button { key = "but2"; label = "Tapper Block Sets 45-50"; is_default = false; }
     : button { key = "but3"; label = "Tapper Block Sets 45-75"; is_default = false; }
   }
   : boxed_row {
     : button { key = "cancel"; label = "Close"; is_default = true; is_cancel = true; }
   }
 }
 }

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
quansla    232

Được chứ sao lại không!

Thêm 1 dấu } vào cuối file thì dialog hết lỗi. Còn lỗi lisp thì chưa test.

Bác Hà cho em hỏi, cái nguyên nhân em chỉ ở trên có đúng không, khi viết lệnh cho hàm action_tile thì việc (done_dialog) sẽ làm được gì, tại sao không thoát được hộp thoại vậy, cái này em chỉ biết và tránh chứ không hiểu lý do

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
Doan Van Ha    2.680

1). Trong help có nói về done_dialog.

2). Trong 1 dialog có nhiều nút tương đương, nếu action 1 mà thoát dialog thì action 2 và 3 phải làm sao đây (?) Vì thế, chả ai done_dialog trong mỗi action như thế.

  • 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

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


×