Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 642 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 24 November 2012 - 02:13 PM

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:
  • ở 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 {...) .
  • đặ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) )
  • 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
  • Đâ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á

Bài viết đã được chỉnh sửa nội dung bởi quansla: 24 November 2012 - 03:49 PM

  • 0

#2 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 642 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 24 November 2012 - 02:22 PM

code khoa học hơn:

  • ở 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 {...) .
  • đặ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) )
  • 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
  • Đâ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)
  • 0

#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 24 November 2012 - 03:13 PM

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.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#4 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 642 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 24 November 2012 - 03:27 PM

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 ạ
  • 0

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 24 November 2012 - 03:49 PM

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")))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#6 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 642 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 24 November 2012 - 03:54 PM

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
  • 0

#7 quansla

quansla

    biết lệnh xclip

  • Members
  • PipPipPipPipPipPipPip
  • 642 Bài viết
Điểm đánh giá: 224 (khá)

Đã gửi 24 November 2012 - 04:05 PM


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
  • 0