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

Autolips đo góc và xuất giá trị sang text.

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

Dạ  chào các anh chị, em là member mới

 

em có vấn đề này muốn nhờ các anh chị giúp đỡ.

 

Công việc của em hay cần phải dim ra kích thước giá trị góc( bằng độ phút giây) .

 

Sau đó thì click chuột vào kích thước này copy nội dung và cho vào 1 text nào đó.

 

Em cần một autolips mà cho phép em chọn 3 điểm hoặc 2 đường thẳng( để xác định góc đo)  , sau đó bấm enter , rồi click chọn một điểm bất kỳ trên màng hình thì text thể hiện giá trị góc độ sẽ hiện ra luôn .

 

Em cảm ơ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

Của bạn đây:

Lisp nó hoạt động như lệnh Dim góc nhé:

- Dim giữa 2 đối tượng thì pick 2 đối tượng và 1 điểm xuất text

- Dim 3 điểm thì bạn cần enter 1 phát sau khi DG, sau đó mới chọn 3 điểm (điểm góc trước, 2 điểm ở 2 cạnh sau) + 1 điểm xuất text.

- Hay có thể dim cung cũng được.

Tóm lại bạn dùng lệnh DAN ntn thì lisp như thế.

(defun C:dg ( / ENT_DIM ENT_LAST PT RAD STR)
  (setq ent_last (entlast))
  (command "_DIMANGULAR")
  (while (> (getvar "CMDACTIVE") 0)
    (command pause)
    )
  (setq ent_dim (entlast))
  (if (not (eq ent_last ent_dim))
    (progn
      (setq pt (getvar "lastpoint"))
      (setq rad (vla-get-Measurement (vlax-ename->vla-object ent_dim)))
      (setq str (vl-string-subst "%%d" "d" (angtos rad 1 4)))
      (entmake (list
		 (cons 0 "TEXT")
		 (cons 100 "AcDbEntity")
		 (cons 100 "AcDbText")
		 (cons 8 (getvar "CLAYER"))
		 (cons 1 str)
		 (cons 7 (getvar "TEXTSTYLE"))
		 (cons 10 pt)
		 (cons 40 1.0)
	      ))
      (entdel ent_dim)
      )
    )
  (print)
  )
(vl-load-com)

Muốn sửa cao chữ bạn sửa chỗ 1.0 ở dòng (cons 40 1.0) 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

Cảm ơn bạn Duong Nhat Duy nha.

 

Minh đang học cách viết lips mà còn gà quá :D

 

Bạn cho mình hỏi tí .Dòng "(while (> (getvar "CMDACTIVE") 0) (command pause)" cùa lips trên có ý nghĩa là gì vậy bạn.

 

Cảm ơn bạ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
13 giờ trước, Lethuongtri đã nói:

Cảm ơn bạn Duong Nhat Duy nha.

Minh đang học cách viết lips mà còn gà quá :D

Bạn cho mình hỏi tí .Dòng "(while (> (getvar "CMDACTIVE") 0) (command pause)" cùa lips trên có ý nghĩa là gì vậy bạn.

Cảm ơn bạn

pause để chờ người dùng nhập liệu từ command, ví dụ (command "Line" pause pause)

CMDACTIVE là biến hệ thống, nôm na là khi nó khác 0 thì là vẫn đang trong lệnh command, bạn có thể tìm hiểu trên autodesk

Ví dụ command vẽ 1 pline, bạn ko thể dùng cách đơn thuần như: (command "Polyline" pause pause pause pause pause "") vì ko biết người dùng sẽ nhập bao nhiêu điểm, thậm chí còn các option khác như vẽ cung, đổi dày nét trong lệnh pline, vậy ta kết hợp CMDACTIVE và pause.

(command "POLYLINE")
(while (> (getvar "CMDACTIVE") 0)
  (command pause)
  )
(command "")

 

  • Like 2

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

Bác Duong Nhat Duy cho em hỏi cái này với. Khi dùng command copy trong lisp chỉ paste được 1 lần, không giống như gõ lệnh copy của cad.

Em tham khảo của bác và viết như này nó cũng không được.

(setq ss (ssget) p1 (getpoint))
(command "copy" ss "" p1)
(while (< 0 (getvar "cmdactive"))
	(command pause)
)

 

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

Bác Duong Nhat Duy cho em hỏi cái này với. Khi dùng command copy trong lisp chỉ paste được 1 lần, không giống như gõ lệnh copy của cad.

Em tham khảo của bác và viết như này nó cũng không được.

  • cadvietlisp.lsp
    lisp help
  •  

(setq ss (ssget) p1 (getpoint))
(command "copy" ss "" p1)
(while (< 0 (getvar "cmdactive"))
	(command pause)
)

Hàm copy trong command nó mặc định là copy 1 lần, bạn nhập thêm "M" để nó chuyển sang chế độ Multiple: (command "copy" ss "" "M" p1)

  • 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
19 giờ trước, Duong Nhat Duy đã nói:

Hàm copy trong command nó mặc định là copy 1 lần, bạn nhập thêm "M" để nó chuyển sang chế độ Multiple: (command "copy" ss "" "M" p1)

Cảm ơn bác em làm được rồ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

Bạn Duong Nhat Duy cho mình hỏi .Đoạn code phía dưới không biết vì lý do gì mà bị lỗi ko thực hiện được.

 

(DEFUN C:D6 (/ A B)
(SETQ A (GETPOINT "\n CHON DIEM DAT 1:"))
(SETQ B (GETPOINT A "\n CHON DIEM DAT 2:"))
(COMMAND "LEADER" A B "" "" "" "1x2-16x26長孔" "")
(PRINC)

 

mình có thử đổi cái text 長孔 thành 1 text abc hay cde gì đó thì ok ko có lỗi. Do đó mình nghĩ vấn đề nằm ở cái text nhật kia.

Tuy nhiên do tính chất công việc mình vẫn mong muốn sau khi kết thúc lệnh phải xuất ra được leader có text là 1x2-16x26長孔 .

Nhờ bạn chỉ giáo nha.

 

Xin cảm ơ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
14 giờ trước, Lethuongtri đã nói:

Bạn Duong Nhat Duy cho mình hỏi .Đoạn code phía dưới không biết vì lý do gì mà bị lỗi ko thực hiện được.

 

(DEFUN C:D6 (/ A B)
(SETQ A (GETPOINT "\n CHON DIEM DAT 1:"))
(SETQ B (GETPOINT A "\n CHON DIEM DAT 2:"))
(COMMAND "LEADER" A B "" "" "" "1x2-16x26長孔" "")
(PRINC)

 

mình có thử đổi cái text 長孔 thành 1 text abc hay cde gì đó thì ok ko có lỗi. Do đó mình nghĩ vấn đề nằm ở cái text nhật kia.

Tuy nhiên do tính chất công việc mình vẫn mong muốn sau khi kết thúc lệnh phải xuất ra được leader có text là 1x2-16x26長孔 .

Nhờ bạn chỉ giáo nha.

 

Xin cảm ơn.

(COMMAND "LEADER" A B "" "" "" "1x2-16x26\U+9577\U+5B54" "")

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ảm ơn bạn alips nha , mình chỉnh rồi mà ko dc.

 

Cảm ơn bạn NTHAHT nhiều nha, mình làm theo cách của bạn và đã ok rồi .

 

Tuy nhiên mình không hiểu cái cách chuyển đổi từ 長孔-> \U+9577\U+5B54 là theo quy tắc hay bản mã nào vậy ạ. Bạn có thể chỉ cho mình dc ko.

 

Do đôi lúc mình còn có nhu cầu đánh một số text nhật khác vào autolips như センター hay ピッチ hay một số ký hiệu đặc biệt như θ ...vv

 

Cảm ơn bạn nhiều lắm. 

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, Lethuongtri đã nói:

Cảm ơn bạn alips nha , mình chỉnh rồi mà ko dc.

 

Cảm ơn bạn NTHAHT nhiều nha, mình làm theo cách của bạn và đã ok rồi .

 

Tuy nhiên mình không hiểu cái cách chuyển đổi từ 長孔-> \U+9577\U+5B54 là theo quy tắc hay bản mã nào vậy ạ. Bạn có thể chỉ cho mình dc ko.

 

Do đôi lúc mình còn có nhu cầu đánh một số text nhật khác vào autolips như センター hay ピッチ hay một số ký hiệu đặc biệt như θ ...vv

 

Cảm ơn bạn nhiều lắm. 

Đó là mã unicode, muốn biết chữ nào mã bao nhiêu thì dùng hàm unicode() trong excel. Tuy nhiên cách này thủ công quá, vài chữ thì được chứ nhiều thì khá phiền. Tôi thấy nếu trong file lsp đã hiện chữ nhật và trong cad cũng dùng font nhật thì sẽ hiện đúng 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
5 giờ trước, alisp đã nói:

Đó là mã unicode, muốn biết chữ nào mã bao nhiêu thì dùng hàm unicode() trong excel. Tuy nhiên cách này thủ công quá, vài chữ thì được chứ nhiều thì khá phiền. Tôi thấy nếu trong file lsp đã hiện chữ nhật và trong cad cũng dùng font nhật thì sẽ hiện đúng thôi.

Chắc bạn "cưỡi ngựa xem hoa" rồi.

image.thumb.png.dd9dec36623189fd4b818eda7def293a.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

Dạ các anh cho em hỏi , em đang viết một lips mà cho phép chon các đối tượng dim bằng lệnh power dim( autocad mechanical).Sau đó thay đổi tỷ lệ các dim style này.

 

Tuy nhiên hiện tại nó đang bị lỗi "bad SSGET list value" .Nhờ các anh hướng dẫn em cách khắc phục với ạ.

 

Em cảm ơn.

 

(defun c:SD (/ a b)
  (setq a (ssget "x"
         '((0 . "DIMENSION")
           (-4 "<OR") 
           (3 . "AM_JIS$0")
           (3 . "AM_JIS$1")
           (3 . "AM_JIS$2")
           (3 . "AM_JIS$3")
           (3 . "AM_JIS$4")
           (3 . "AM_JIS$5")
           (3 . "AM_JIS$6")
           (3 . "AM_JIS$7")
           (-4 "OR>")
           )
         )
    ) 
  (setq b (getreal "\n nhap ti le:"))
  (command "amsymscale" b)
  (command "amrescale" "" a "")
  (princ)
  )

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
9 phút trước, Lethuongtri đã nói:

           (-4 "<OR") 
           (-4 "OR>")
 

Thiếu dấu chấm: (-4 . "<OR") và  (-4 . "OR>")

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

Dạ cảm ơn anh Doan Van Ha.

 

Tiện thể anh cho em hỏi  khi dùng các lệnh của autocad mechanical trong autolips.

 

ví dụ (command "AMSYMSCALE")

 

thì em bị lỗi là " Unknown command "AMSYMSCALE". "

 

tuy nhiên nếu em nhập trực tiếp lệnh thì ko bị lỗ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

Dạ mọi người cho em hỏi, trong autolips có cách nào lấy được giá trị góc chỉ phương của đường kích thước ( kích thước là loại aligndim hoặc là rotated dim)- giá trị góc là tính theo đường kích thước và đường thẳng nằm ngang.

Cảm ơn mọi ngườ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
13 giờ trước, Lethuongtri đã nói:

Dạ mọi người cho em hỏi, trong autolips có cách nào lấy được giá trị góc chỉ phương của đường kích thước ( kích thước là loại aligndim hoặc là rotated dim)- giá trị góc là tính theo đường kích thước và đường thẳng nằm ngang.

Cảm ơn mọi người.

Dim nó có cái mã DXF 13 và 14 là 2 cái chân dim đó, bạn dùng (angle dxf13 dxf14) nữa là đượ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
1 giờ} trướ}c, Duong Nhat Duy đã nói:

Dim nó có cái mã DXF 13 và 14 là 2 cái chân dim đó, bạn dùng (angle dxf13 dxf14) nữa là được.

Dxf 13,14 chỉ dùng cho aligned thôi khi chiều dài chân dim bằng nhau, còn rotated có chiều dài chân dim khác nhau thì dùng dxf 50 đúng hơ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
1 giờ} trướ}c, alisp đã nói:

Dxf 13,14 chỉ dùng cho aligned thôi khi chiều dài chân dim bằng nhau, còn rotated có chiều dài chân dim khác nhau thì dùng dxf 50 đúng hơn.

DXF 50 của dim = 0 hết à.

Vậy thì đành lấy góc giữa dxf10 là dxf14 + thêm 90 độ chắc cũng đc ta:

 

Screenshot_1.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
6 phút trước, Duong Nhat Duy đã nói:

DXF 50 của dim = 0 hết à.

Vậy thì đành lấy góc giữa dxf10 là dxf14 + thêm 90 độ chắc cũng đc ta:

 

Screenshot_1.png

Bạn vẽ dim đứng sẽ thấy dxf50 = 1.5708, hoặc xoay dim sẽ thấy dxf50 khác 0.

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, alisp đã nói:

Bạn vẽ dim đứng sẽ thấy dxf50 = 1.5708, hoặc xoay dim sẽ thấy dxf50 khác 0.

Uh đúng nhưng mà Dim Align nó vẫn = 0 nên mình nghĩ dùng cái trên cho tổng quát.

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

×