Chuyển đến nội dung
Diễn đàn CADViet
vcdichoi

Lỗi khi sử dụng lisp cad tính diện tích

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

Em có sử dụng lisp cad tính diện tích:

Lisp được tính bằng cách tích điểm vào vùng kín, nhưng dữ liệu hiển thị sau khi tích điểm là một chữ số sau dấu "."

Xin được sự giúp đỡ của các anh/chị để có thể hiển thị sau dấu phẩy 3 hoặc 4 chữ số sau dấu "."

Em xin cảm ơn.

Em có đính kèm bản vẽ và lisp:

TDT.LSP

xem.dwg

 

aaa.png

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ìm các dòng này (ở phía cuối mỗi lệnh của Lisp ý )

(command "text" "m" pt2  "0" (rtos dtl 2 1))
    (command "text" "m" pt2 "1.5" "0" (strcat (rtos dtl  2 1) "m2"))

Thay chỗ số 1 thành số 3 (hoặc số 4) là được

 

(command "text" "m" pt2  "0" (rtos dtl 2 1))
    (command "text" "m" pt2 "1.5" "0" (strcat (rtos dtl  2 1) "m2"))

 

 

thành 

 

(command "text" "m" pt2  "0" (rtos dtl 2 3))
    (command "text" "m" pt2 "1.5" "0" (strcat (rtos dtl  2 3) "m2"))

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

Vâng em cảm ơn anh.

Anh cho em hỏi thêm chút xíu.

Khi em load lisp vào bản vẽ và lần đầu nhập "tdt" để gọi lệnh thì xuất hiện : "Drawing Scale" để nhập khai báo tỷ lệ?

Nhưng lần sau nhập "tdt" để  gọi lệnh thì không xuất hiện "Drawing Scale" nữa, muốn "Drawing Scale" xuất hiện lại phải tắt bản vẽ và load Lisp lại từ đầu.

Vậy có cách nào để có thể xuất hiện "Drawing Scale" khi mình muốn mà không cần phải mở bản vẽ lên và load lại lisp cad .

Em xin cảm ơn!

 

zzz.png

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
Vào lúc 10/6/2020 tại 22:41, vcdichoi đã nói:

Vâng em cảm ơn anh.

Anh cho em hỏi thêm chút xíu.

Khi em load lisp vào bản vẽ và lần đầu nhập "tdt" để gọi lệnh thì xuất hiện : "Drawing Scale" để nhập khai báo tỷ lệ?

Nhưng lần sau nhập "tdt" để  gọi lệnh thì không xuất hiện "Drawing Scale" nữa, muốn "Drawing Scale" xuất hiện lại phải tắt bản vẽ và load Lisp lại từ đầu.

Vậy có cách nào để có thể xuất hiện "Drawing Scale" khi mình muốn mà không cần phải mở bản vẽ lên và load lại lisp cad .

Em xin cảm ơn!

 

zzz.png

bạn tìm đoạn mã này:

    (if (= tl nil)
        (progn (setq tl (getreal "\nDrawing scale : ")) ;    (setq ntl (/ 1 tl))
                                                  ;    (setq tl2 (* ntl ntl))
        )
    )

và thay bằng duy nhất 1 dòng mã:   (setq tl (getreal "\nDrawing scale : "))

Tuy nhiên, nhìn chung lisp này viết không hay.

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
Vào lúc 13/6/2020 tại 16:16, thiep đã nói:

bạn tìm đoạn mã này:

  • cadvietlisp.lsp
    lisp help
  •  

    (if (= tl nil)
        (progn (setq tl (getreal "\nDrawing scale : ")) ;    (setq ntl (/ 1 tl))
                                                  ;    (setq tl2 (* ntl ntl))
        )
    )

và thay bằng duy nhất 1 dòng mã:   (setq tl (getreal "\nDrawing scale : "))

Tuy nhiên, nhìn chung lisp này viết không hay.

Em xin cảm ơn anh!

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
Vào lúc 13/6/2020 tại 16:16, thiep đã nói:

bạn tìm đoạn mã này:

  • cadvietlisp.lsp
    lisp help
  •  

    (if (= tl nil)
        (progn (setq tl (getreal "\nDrawing scale : ")) ;    (setq ntl (/ 1 tl))
                                                  ;    (setq tl2 (* ntl ntl))
        )
    )

và thay bằng duy nhất 1 dòng mã:   (setq tl (getreal "\nDrawing scale : "))

Tuy nhiên, nhìn chung lisp này viết không hay.

Em muốn khi mở bất kỳ 1 bản vẽ nào mình chỉ cần khai báo một lần thì làm như thế nào vậy ạ? Chỉnh lại đoạn này như a chỉ thì tính các hình khác nó lại hỏi lặp lại ạ. Ví dụ như 2 bản vẽ thì mỗi bản vẽ nhập "Drawing scale" một lần là cad tự hiểu khi tính các hình khác trong cùng bản vẽ đó. Mong được a chỉ giúp ạ. Thank a!

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
2 giờ trước, lehoa11qn đã nói:

Em muốn khi mở bất kỳ 1 bản vẽ nào mình chỉ cần khai báo một lần thì làm như thế nào vậy ạ? Chỉnh lại đoạn này như a chỉ thì tính các hình khác nó lại hỏi lặp lại ạ. Ví dụ như 2 bản vẽ thì mỗi bản vẽ nhập "Drawing scale" một lần là cad tự hiểu khi tính các hình khác trong cùng bản vẽ đó. Mong được a chỉ giúp ạ. Thank a!

 

Vậy bạn không cần thực hiện chỉnh sửa theo hướng dẫn của @thiep

  • Like 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
Vào lúc 16/4/2022 tại 12:44, tien2005 đã nói:

 

Vậy bạn không cần thực hiện chỉnh sửa theo hướng dẫn của @thiep

Thank bác. Cho mình hỏi chút nữa với ạ. Ở kiểu Style hiện hành mình đặt chiều cao chữ thì mất đuôi m2, trả về lại 0 thì khi kết thúc lệnh lại có đuôi m2 là sao vậy ạ?

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

Các Bạn dùng thử cái này

(defun c:tdt ( / dtl pt ent ss)
  (vl-load-com)
  (or #tl (setq #tl (getreal "\nMau so ti le ban ve: ")))
  (or #htxt (setq #htxt (getreal "\nChieu cao text: ")))
  (or #sole (setq #sole (getint "\nSo le: ")))
  (setq dtl 0)
  (setq ss (ssadd))
  (while (and (setq pt (getpoint "\nPick internal point : "))
	      (vl-cmdf "_.-boundary" pt "")
	      (setq ent (entlast))
	      (vl-cmdf "_.-hatch" "_s" ent "" "_P" "ANSI31" 2 0 "")
	      )
    (setq ss (ssadd ent ss)
	  ss (ssadd (entlast) ss)
	  )
    (setq dtl (+  dtl (vla-get-area (vlax-ename->vla-object ent))))
    )
  (and (/= dtl 0)
       (setq pt (getpoint "\nPoint to write: "))
       (entmake	(list
		  (cons 0 "TEXT")
;;;		  (cons 8 layer)
		  (cons 1 (rtos (/ dtl #tl #tl) 2 #sole))
;;;		  (cons 7 style)
		  (cons 10 pt)
		  (cons 40 #htxt)
		  )
		)
       (vl-cmdf "_.erase" ss "")
       )
  (princ)
  )

 

  • Like 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
Vào lúc 18/4/2022 tại 14:18, tien2005 đã nói:

Các Bạn dùng thử cái này


(defun c:tdt ( / dtl pt ent ss)
  (vl-load-com)
  (or #tl (setq #tl (getreal "\nMau so ti le ban ve: ")))
  (or #htxt (setq #htxt (getreal "\nChieu cao text: ")))
  (or #sole (setq #sole (getint "\nSo le: ")))
  (setq dtl 0)
  (setq ss (ssadd))
  (while (and (setq pt (getpoint "\nPick internal point : "))
	      (vl-cmdf "_.-boundary" pt "")
	      (setq ent (entlast))
	      (vl-cmdf "_.-hatch" "_s" ent "" "_P" "ANSI31" 2 0 "")
	      )
    (setq ss (ssadd ent ss)
	  ss (ssadd (entlast) ss)
	  )
    (setq dtl (+  dtl (vla-get-area (vlax-ename->vla-object ent))))
    )
  (and (/= dtl 0)
       (setq pt (getpoint "\nPoint to write: "))
       (entmake	(list
		  (cons 0 "TEXT")
;;;		  (cons 8 layer)
		  (cons 1 (rtos (/ dtl #tl #tl) 2 #sole))
;;;		  (cons 7 style)
		  (cons 10 pt)
		  (cons 40 #htxt)
		  )
		)
       (vl-cmdf "_.erase" ss "")
       )
  (princ)
  )

 

Thank bác 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

×