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

[yêu cầu]Sửa hộ lisp tự viết

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

;------------------------------------------
(defun Get_tt (/ g:tt)
 (set_tile "error" "")
 (setq g:tt (get_tile "tt"))
 (setq tt g:tt)
)
;------------------------------------------
(defun Get_cd (/ g:cd)
 (set_tile "error" "")
 (setq g:cd (get_tile "cd"))
 (setq cd g:cd)
)
;------------------------------------------
(defun Get_kc (/ g:kc)
 (set_tile "error" "")
 (setq g:kc (get_tile "kc"))
 (setq kc g:kc)
)
;------------------------------------------
(defun Get_nd()
 (set_tile "error" "")
 (setq filename (getfiled "Write Text to File" "C:/My Documents/" "dhn" 1))
 (setq tfw filename)
)
;------------------------------------------
(defun Get_li (/ ch1 ch2 ch3)
 (start_list "tt")
(foreach ch1 ltt (add_list ch1))
 (end_list)
 (start_list "cd")
(foreach ch2 lcd (add_list (rtos ch2 2 2)))
 (end_list)
 (start_list "kc")
(foreach ch3 lkc (add_list (rtos ch3 2 2)))
 (end_list)
 (mode_tile "start" 0)
 (start_dialog)
)
;------------------------------------------------------------------------------------------
;************** NHAP TEXT CAO DO + TEXT KHOANG CACH VA GHI RA FILE ************************
(defun nhaptext (/ dfile ti lti i Ca Kc E Eo Dlist Elist Elelist tso ddat total)
 (setq lis nil li nil En nil dfile nil lkc nil lcd nil)
 (setq dfile (open filename "w"))
 (initget 128 "S G")
 (if (not E) (setq E "S"))
 (setq Eo (getkword "\n Select or Enter Elevation Texts (G/<S>) : "))
 (if Eo (setq E Eo))
 (cond
  ((= E "G")
(while
 	(setq Ca (getreal "\n Cao do...(<Retern>to end) :"))
 	(write-line (rtos Ca 2 2) dfile)
)
(while
 	(setq Kc (getreal "\n Khoang cach...(<Retern>to end) :"))
 	(write-line (rtos Kc 2 2) dfile)
)
(write-line (rtos tim 2 2) dfile)
  )
  (T
(prompt "\n Selec Elevation Texts...: ")
(setq Ele (ssget))
 	(setq total 0 n (sslength Ele) tso '() ddat '())
 	(while (< total n)
   	(setq Elist (entget (ssname Ele total)))
  		(cond
    		((= "TEXT" (cdr (assoc 0 Elist)))
      		(setq tso (cons (atof (cdr (assoc 1 Elist))) tso))
      		(setq ddat (cons (cadr (assoc 10 Elist)) ddat))
    		)
  		)
   	(setq total (+ total 1))
)
(setq lcd tso i 0 ltt '())
(while tso
   	(write-line (rtos (car tso) 2 3) dfile)
   	(setq tso (cdr tso) ltt (cons (rtos (+ i 1) 2 0) ltt))
   	(setq i (+ i 1))
)
(prompt "\n Selec Distance Texts...: ")
(setq Dis (ssget))
(setq i 0 tso '() ddat '())
(repeat (sslength Dis)
   	(setq Dlist (entget (ssname Dis i)))
  		(cond
    		((= "TEXT" (cdr (assoc 0 Dlist)))
      		(setq tso (cons (atof (cdr (assoc 1 Dlist))) tso))
      		(setq ddat (cons (cadr (assoc 10 Dlist)) ddat))
    		)
  		)
   	(setq i (+ i 1))
)
(setq lkc tso ltt (reverse ltt))
(while tso
   	(write-line (rtos (car tso) 2 3) dfile)
   	(setq tso (cdr tso))
)
(write-line (setq tim "10") dfile)
  );*******dong ngoac T
 );*******dong ngoac Cond
 (close dfile)
)
;------------------------------------------------------------------------------------------
;----------------------------- Chuong trinh chinh -----------------------------------------
(defun C:Ve-MCN-03()
; (/ gii tim tfr tfw done datafile filename ltt lcd lkc)

 	(if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))
 	(setq datafile nil filename nil)
 	(setq gii (load_dialog "Ve_Mcn_03.dcl"))
 	(setq done 3)
 	(while (> done 1)
   	(if (not (new_dialog "vemcn" gii)) (exit))

   	(action_tile "tt" "(Get_tt)")
   	(action_tile "cd" "(Get_cd)")
   	(action_tile "kc" "(Get_kc)")

   	(action_tile "nd" "(Get_nd)(done_dialog 2)")
   	(action_tile "start" "(done_dialog 1)")

   	(action_tile "cancel" "(done_dialog 0)")
   	(setq done (start_dialog))
   	(cond
     	((= done 2) (nhaptext)(Get_li))
     	((= done 1) (vemcn))
   	)
 	);---dong while
 	(unload_dialog gii)
 	(command "color" "bylayer" "ortho" "on" "osmode" 33 "REDRAW")
)

Tôi có viết một đoạn Code nhập các Text cao độ và khoảng cách trên màn hình để vẽ mặt cắt ngang địa hình...

nhưng khi nhập xong thì không hiện các trị số các Text trong các list_box trên hộp thoại...

Nhờ các Bạn sửa giúp làm sao khi nhập xong các Text thì trên list_box hiện các giá trị đó...

Link file *.dcl và *.dwg đi kèm:http://www.mediafire...dad3bpmd58rdbbd

  • 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

Srr trước là ketxu k có CAD test, chỉ đọc code thôi.

QUa đó thấy :

- Mỗi lần nhập điểm nhập 1 lần, bạn lại làm một lần hiện hộp thoại, ghi file, mỗi lần thực hiện lệnh lại khử biến filename

- Để lại quá nhiều biến toàn cục k cần thiết

- THeo mình bạn nên nhập điểm chán chê => gán vào list cd,kc,tt. Sau khi người dùng nhập xong thì mới hiện hộp thoại lại, lúc này hàm Get_li của bạn chỉ làm một lần thôi, tránh tái tạo list nhiều lần.

Việc hiện hộp thoại giữa chừng chủ yếu phục vụ việc xóa, thêm, bơt, n ở đây chưa có, nên cũng cần gì bạn nhỉ :)

- Sau khi thoát hộp thoại thì ghi file

  • 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

Nói chung, sửa LSP+DCL để dialoge của 1 người khác viết, cho nó hoạt động trơn tru là hơi bị khổ.

Tôi chỉ sửa để hiện list cho bạn thôi. Còn mọi thứ bạn cứ tiếp tục:

;------------------------------------------
(defun Get_tt (/ g:tt)
 (set_tile "error" "")
 (setq g:tt (get_tile "tt"))
 (setq tt g:tt)
)
;------------------------------------------
(defun Get_cd (/ g:cd)
 (set_tile "error" "")
 (setq g:cd (get_tile "cd"))
 (setq cd g:cd)
)
;------------------------------------------
(defun Get_kc (/ g:kc)
 (set_tile "error" "")
 (setq g:kc (get_tile "kc"))
 (setq kc g:kc)
)
;------------------------------------------
(defun Get_nd()
 (set_tile "error" "")
 (setq filename (getfiled "Write Text to File" "C:/My Documents/" "dhn" 1))
 (setq tfw filename)
)
;------------------------------------------
(defun Get_li (/ ch1 ch2 ch3)
 (start_list "tt")
   (foreach ch1 ltt (add_list ch1))
 (end_list)
 (start_list "cd")
   (foreach ch2 lcd (add_list (rtos ch2 2 2)))
 (end_list)  
 (start_list "kc")
   (foreach ch3 lkc (add_list (rtos ch3 2 2)))
 (end_list)
 (mode_tile "start" 0)
;  (start_dialog)
)
;------------------------------------------------------------------------------------------
;************** NHAP TEXT CAO DO + TEXT KHOANG CACH VA GHI RA FILE ************************
(defun nhaptext (/ dfile ti lti i Ca Kc E Eo Dlist Elist Elelist tso ddat total)
 (setq lis nil li nil En nil dfile nil lkc nil lcd nil)
 (setq dfile (open filename "w"))
 (initget 128 "S G")
 (if (not E) (setq E "S"))
 (setq Eo (getkword "\n Select or Enter Elevation Texts (G/<S>) : "))
 (if Eo (setq E Eo))
 (cond
  ((= E "G")
   (while
     (setq Ca (getreal "\n Cao do...(<Retern>to end) :"))
     (write-line (rtos Ca 2 2) dfile)
   )
   (while
     (setq Kc (getreal "\n Khoang cach...(<Retern>to end) :"))
     (write-line (rtos Kc 2 2) dfile)
   )
   (write-line (rtos tim 2 2) dfile)
  )
  (T
   (prompt "\n Selec Elevation Texts...: ")
   (setq Ele (ssget))
     (setq total 0 n (sslength Ele) tso '() ddat '())
     (while (< total n)
       (setq Elist (entget (ssname Ele total)))
  		(cond
    		((= "TEXT" (cdr (assoc 0 Elist)))
      		(setq tso (cons (atof (cdr (assoc 1 Elist))) tso))
      		(setq ddat (cons (cadr (assoc 10 Elist)) ddat))
    		)
  		)
       (setq total (+ total 1))
)
(setq lcd tso i 0 ltt '())
(while tso
       (write-line (rtos (car tso) 2 3) dfile)
       (setq tso (cdr tso) ltt (cons (rtos (+ i 1) 2 0) ltt))
       (setq i (+ i 1))
)
(prompt "\n Selec Distance Texts...: ")
(setq Dis (ssget))
(setq i 0 tso '() ddat '())
(repeat (sslength Dis)
       (setq Dlist (entget (ssname Dis i)))
  		(cond
    		((= "TEXT" (cdr (assoc 0 Dlist)))
      		(setq tso (cons (atof (cdr (assoc 1 Dlist))) tso))
      		(setq ddat (cons (cadr (assoc 10 Dlist)) ddat))
    		)
  		)
       (setq i (+ i 1))
)
(setq lkc tso ltt (reverse ltt))
(while tso
       (write-line (rtos (car tso) 2 3) dfile)
       (setq tso (cdr tso))
)
(write-line (setq tim "10") dfile)
  );*******dong ngoac T
 );*******dong ngoac Cond
 (close dfile)
)
;------------------------------------------------------------------------------------------
;----------------------------- Chuong trinh chinh -----------------------------------------
(defun C:Ve-MCN-03()
; (/ gii tim tfr tfw done datafile filename ltt lcd lkc)

     (if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))
     (setq datafile nil filename nil)
     (setq gii (load_dialog "Ve_Mcn_03.dcl"))
     (setq done 3)
     (while (> done 1)
       (if (not (new_dialog "vemcn" gii)) (exit))
       (Get_li)
       (action_tile "tt" "(Get_tt)")
       (action_tile "cd" "(Get_cd)")
       (action_tile "kc" "(Get_kc)")

       (action_tile "nd" "(Get_nd)(done_dialog 2)(Get_li)")
       (action_tile "start" "(done_dialog 1)")

       (action_tile "cancel" "(done_dialog 0)")
       (setq done (start_dialog))
       (cond
         ((= done 2) (nhaptext)(Get_li))
         ((= done 1) (vemcn))
       )
     );---dong while
     (unload_dialog gii)
     (command "color" "bylayer" "ortho" "on" "osmode" 33 "REDRAW")
)

  • Vote tăng 3

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
Srr trước là ketxu k có CAD test, chỉ đọc code thôi. QUa đó thấy : - Mỗi lần nhập điểm nhập 1 lần, bạn lại làm một lần hiện hộp thoại, ghi file, mỗi lần thực hiện lệnh lại khử biến filename - Để lại quá nhiều biến toàn cục k cần thiết - THeo mình bạn nên nhập điểm chán chê => gán vào list cd,kc,tt. Sau khi người dùng nhập xong thì mới hiện hộp thoại lại, lúc này hàm Get_li của bạn chỉ làm một lần thôi, tránh tái tạo list nhiều lần. Việc hiện hộp thoại giữa chừng chủ yếu phục vụ việc xóa, thêm, bơt, n ở đây chưa có, nên cũng cần gì bạn nhỉ :) - Sau khi thoát hộp thoại thì ghi file
Nói chung, sửa LSP+DCL để dialoge của 1 người khác viết, cho nó hoạt động trơn tru là hơi bị khổ. Tôi chỉ sửa để hiện list cho bạn thôi. Còn mọi thứ bạn cứ tiếp tục:

Cám ơn các bạn nhiều !

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  

×