Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
quansla

[Yêu cầu] giúp em sửa Code và ghép hai file dcl + lsp về vlx với

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

Yêu cầu thứ nhất của em là: em có hai code sau: một là lsp hai là dcl tương ứng với nó, dùng thì bình thường, nhưng mà code chưa được đẹp có rất nhiều thiếu xót, em muốn các bác sửa giúp em thành được như thế này:

Sơ lược về tác dụng của CODE: cho phép người dùng ấn định phím tắt A1,A2,A3,A4,....,A9 là phím tắt của việc gọi layer tương ứng với thiết lập trong file dcl kèm theo (ví dụ (defun c:A3 (setvar "clayer" (nth k ##liluu##))) \\ trong list code sẽ khác chút)

Em muốn sửa như sau:

code khoa học hơn:

  1. ở các phần gán thành phần list cho các key của dcl (key viết bởi hàm :popup_list {...) .
  2. đặc biệt ở phần 'append với list li và các thành phần lấy được từ hộp thoại (get_tile kết hợp với (nth i NAMES) )
  3. Và phần đặt lệnh tắt, theo cách em viết code thì mặc nhiên sẽ xuất hiện đủ cả 9 lệnh mới (từ A1 đến A9) chưa nói gì đến việc trùng tên lệnh của người dùng, cái này là code mở nên sửa dễ dàng) cái đáng nói là em muốn nếu trong hộp thoại người dùng để mặc định nó(mặc định là gọi layer "0") thì khi dùng lệnh tương ứng nó không gọi layer "0" nữa mà chỉ gi là Unknown command "*****". Press F1 for help. Tức là nếu đặt mặc định thì không thiết lập lệnh tắt nữa
  4. Đây là code tự viết nên còn nhiều thiếu xót, còn những chỗ nào nữa thì em cũng chưa lường trước được xin các bác chỉ dạy thêm

 

 

 

dưới đây là code

http://www.cadviet.c.../101306_dcl.rar

Yều cầu thứ hai là có phải khi nén chung về vlx thì file dcl của em không cần để trong support không, nếu đúng thì xin nén dùm em, không hiểu sao Cad12 của em phần make new wi... hoàn toàn không hỗ trợ dcl (chỉ có lsp và hai cái khác

 

 

Tên lệnh của list là quanthunghiem

 

Dưới đây là phần sửa quan trọng trong code (không ảnh hưởng đến thực thi code nhưng không thể biên tập về vlx)

Trong code có đoạn

 

 

(defun goi ( k )

(setvar "cmdecho" 0)

;(setq ##liluu## (list 12))

(if (nth k ##liluu##)

(progn

(setvar "clayer" (nth k ##liluu##))

(princ (strcat "Layer " (nth k ##liluu##) " hien hanh"))

)

(nil)

)

(setvar "cmdecho" 1)

(princ)

)

 

Ở đó có dòng (nil) dòng thứ 5 từ dưới lên đây là sai. vì thực tế không có hàm con nil và KHÔNG ĐƯỢC dùng nil cho tên hàm (tương tự với T,list, ... là các tên hàm có sẵn của cad không nên đặt làm tên hàm, biến của lisp)

Cần sửa lại là bỏ (nil) đi hoặc thêm dấu "chấm phẩy" ( ; ) vào trước (nil)

Nếu không thì do lỗi này mà cad không thể biên tập về vlx được, nhắc lại cho các mem cad việt, ai biết rồi thì bỏ quá qua nhé, mình thì biết mà giờ mới ngấm, ẩu quá

Chỉnh sửa theo quansla

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

code khoa học hơn:

  1. ở các phần gán thành phần list cho các key của dcl (key viết bởi hàm :popup_list {...) .
  2. đặc biệt ở phần 'append với list li và các thành phần lấy được từ hộp thoại (get_tile kết hợp với (nth i NAMES) )
  3. Và phần đặt lệnh tắt, theo cách em viết code thì mặc nhiên sẽ xuất hiện đủ cả 9 lệnh mới (từ A1 đến A9) chưa nói gì đến việc trùng tên lệnh của người dùng, cái này là code mở nên sửa dễ dàng) cái đáng nói là em muốn nếu trong hộp thoại người dùng để mặc định nó(mặc định là gọi layer "0") thì khi dùng lệnh tương ứng nó không gọi layer "0" nữa mà chỉ gi là Unknown command "*****". Press F1 for help. Tức là nếu đặt mặc định thì không thiết lập lệnh tắt nữa
  4. Đây là code tự viết nên còn nhiều thiếu xót, còn những chỗ nào nữa thì em cũng chưa lường trước được xin các bác chỉ dạy

 

 

 

 

dưới đây là code

http://www.cadviet.c.../101306_dcl.rar

Yều cầu thứ hai là có phải khi nén chung về vlx thì file dcl của em không cần để trong support không, nếu đúng thì xin nén dùm em, không hiểu sao Cad12 của em phần make new wi... hoàn toàn không hỗ trợ dcl (chỉ có lsp và hai cái khác

màu đỏ: nghĩa là nếu dcl dùng Popup_list thì cần khai báo một list có sẵn và add_list từng thành phần của list đó cho popup_list tương ứng (ở đây tất cả các popup_list đều cần nhập vào list có nội dung là tập hợp các layer đang có của bản vẽ)

màu xanh: ví dụ với hộp thoại các phần A3,A6,A7 để nguyên là 0 (tương ứng layer "0") thì khi ấn A3 enter, A6 enter, A7 enter thì không gọi layer "0" mà ghi "unkow..." tương ứng là không có lệnh A3,A6,A7 hoặc nếu tốt hơn, thì nếu A3,A6,A7 là lệnh của người dùng trước kia thì khi sử dụng code không ghi đè lên tên lệnh cũ,hoặc không sử dụng khi là gọi layer 0 mà dùng lệnh của người dùng (với layer "0" thôi)

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

Mới đọc và dòm sơ qua code của bạn thì góp ý sơ thế này:

Ý thứ hai:

- Khi biên dịch cả lsp và dcl, bạn phải chọn "Expert" (thay vì "Simple") thì bước 1 sẽ chọn file lsp và bước 2 chọn dcl.

- Đã vlx thì xách đi du lịch thoải mái, không cần support...

Ý thứ nhất:

- Bỏ cái mớ setvar đi vì bạn không dùng hàm command trong lisp.

- Nên dùng hàm con cho chuỗi 9 hàm tương tự nhau.

  • 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

Mới đọc và dòm sơ qua code của bạn thì góp ý sơ thế này:

Ý thứ hai:

- Khi biên dịch cả lsp và dcl, bạn phải chọn "Expert" (thay vì "Simple") thì bước 1 sẽ chọn file lsp và bước 2 chọn dcl.

- Đã vlx thì xách đi du lịch thoải mái, không cần support...

Ý thứ nhất:

- Bỏ cái mớ setvar đi vì bạn không dùng hàm command trong lisp.

- Nên dùng hàm con cho chuỗi 9 hàm tương tự nhau.

Cảm ơn bác đã quan tâm,

tại thói quen thôi, setvar bác nói là "cmdecho" phải không ạ,em xin tiếp thu

Còn phần hàm con thì chính vì biết là cần viết nhưng vì không tự nghĩ ra code như thế nào để làm được công việc sau:

(defun saveVars(/ li i )
(setq li (list))   
(if (= (setq i (get_tile "A1")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A2")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A3")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A4")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A4")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A5")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A6")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A7")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A8")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
(if (= (setq i (get_tile "A9")) "")
 	(setq li (append li "0"))
 	(setq li (append li (list (nth(atoi i ) NAMES))))
 	)
li
 )

trong đó NAMES là list layer tạo bằng một hàm con khác (giả dụ NAMES = '( "0" "tuong" "Hatch" "N.Manh") )

Xin bác sửa giúp em ạ

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

Hàm saveVars này thay cho hàm trên. Đây chỉ là 1 ví dụ thôi nhé!

(defun HamCon (key lst / i)
(if (= (setq i (get_tile key)) "")
 (setq li (append li "0"))
 (setq li (append li (list (nth (atoi i) lst))))))
(defun saveVars()
(setq li (list))
(mapcar '(lambda (key) (HamCon key names)) '("A1" "A2" "A3" "A4" "A5" "A6" "A7" "A8" "A9")))

  • 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

Hàm saveVars này thay cho hàm trên. Đây chỉ là 1 ví dụ thôi nhé!

 

Cảm ơn bác rất nhiều, để em kiểm tra lại, cũng báo cáo với bác là em làm theo và biên tập được file đó rồi, lúc đầu chắc em vừa không chọn expert lại vừa có lỗi trong code( lỗi code đã up ở #1) nên chua biên tập được. thanks bác

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

Hàm saveVars này thay cho hàm trên. Đây chỉ là 1 ví dụ thôi nhé!

Cảm ơn bác rất nhiều, để em kiểm tra lại, cũng báo cáo với bác là em làm theo và biên tập được file đó rồi, lúc đầu chắc em vừa không chọn expert lại vừa có lỗi trong code nên chua biên tập được. thanks bác

woa bác giỏi thật, sửa tẹo là list chạy vô tư rồi, còn đoạn bác nói là "Đây chỉ là 1 ví dụ thôi nhé!" nghĩa là tiếp tục làm hàm con với các công việc khác phải không?, còn việc thay thế hàm này vô list để code copy của bác chạy trơn tru trên lisp của e thì em làm xong rồi, một lần nữa cảm ơn bác

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  

×