Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
thanhduan2407

[Hỏi] Cách thức đo góc theo kiểu trái-giữa-phải trong autolisp

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

thanhduan2407    226

Chào các bác!

Em đang định viết chương trình tự động đo góc được thể hiện theo chiều trái – giữa – phải từ 3 điểm. Kiểu thể hiện đo góc sẽ được ghi mũi tên theo đúng chiều trái – giữa – phải đó với bán kính thể hiện nhất định do người nhập vào (khoảng cách từ tâm góc đến vị trí text thể hiện góc). Sau khi thể hiện được góc đó thì em muốn sửa nội dung của Dimension đó (entlast) và cho vào 1 giá trị mới (entmod) thì cách thức viết sẽ được viết như thế nào ạ?

Có được Module nhỏ này em sẽ áp dụng vào bài toán rộng hơn vào chuyên ngành của mình các bác ạ! Cảm ơn các bác nhiều!

36665_455.jpg

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
Tue_NV    3.841

Vấn đề làm sao cho Lisp hiểu đầu nào là Trái, đầu nào là phải?

Cái này có thể sử dụng Dimension đo góc (DIMANGULAR) 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
thanhduan2407    226

Vấn đề làm sao cho Lisp hiểu đầu nào là Trái, đầu nào là phải?

Cái này có thể sử dụng Dimension đo góc (DIMANGULAR) là được!

Em sẽ cấp cho Lisp 3 tọa độ theo thứ tự anh ạ!

Anh có thể viết 1 đoạn phương thức được không ạ?

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
Tue_NV    3.841

Em tham khảo ví dụ trong Help :

(vl-load-com)
(defun c:Example_AddDimAngular()
;; This example creates an angular dimension in model space.
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))

;; Define the dimension
(setq angVert (vlax-3d-point 0 5 0)
FirstPoint (vlax-3d-point 1 7 0)
SecondPoint (vlax-3d-point 1 3 0)
TextPoint (vlax-3d-point 3 5 0))

;; Create the angular dimension in model space
(setq modelSpace (vla-get-ModelSpace doc))
(setq dimObj (vla-AddDimAngular modelSpace angVert FirstPoint SecondPoint TextPoint))
(vla-ZoomAll acadObj)
)

Em nghiên cứu 3 tọa độ trong ví dụ trên:

FirstPoint (1 7 0)
SecondPoint (1 3 0)
TextPoint (3 5 0)

(vl-load-com)
(defun c:Example_AddDimAngular()
    ;; This example creates an angular dimension in model space.
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
    
    ;; Define the dimension
    (setq angVert (vlax-3d-point 0 5 0)
          FirstPoint (vlax-3d-point 1 7 0)
          SecondPoint (vlax-3d-point 1 3 0)
          TextPoint (vlax-3d-point 3 5 0))
  
    ;; Create the angular dimension in model space
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq dimObj (vla-AddDimAngular modelSpace angVert FirstPoint SecondPoint TextPoint))
    (vla-ZoomAll acadObj)
)
  • 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
thanhduan2407    226

 

Em tham khảo ví dụ trong Help :

(vl-load-com)
(defun c:Example_AddDimAngular()
;; This example creates an angular dimension in model space.
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))

;; Define the dimension
(setq angVert (vlax-3d-point 0 5 0)
FirstPoint (vlax-3d-point 1 7 0)
SecondPoint (vlax-3d-point 1 3 0)
TextPoint (vlax-3d-point 3 5 0))

;; Create the angular dimension in model space
(setq modelSpace (vla-get-ModelSpace doc))
(setq dimObj (vla-AddDimAngular modelSpace angVert FirstPoint SecondPoint TextPoint))
(vla-ZoomAll acadObj)
)

Em nghiên cứu 3 tọa độ trong ví dụ trên:

FirstPoint (1 7 0)

SecondPoint (1 3 0)

TextPoint (3 5 0)

(vl-load-com)
(defun c:Example_AddDimAngular()
    ;; This example creates an angular dimension in model space.
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
    
    ;; Define the dimension
    (setq angVert (vlax-3d-point 0 5 0)
          FirstPoint (vlax-3d-point 1 7 0)
          SecondPoint (vlax-3d-point 1 3 0)
          TextPoint (vlax-3d-point 3 5 0))
  
    ;; Create the angular dimension in model space
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq dimObj (vla-AddDimAngular modelSpace angVert FirstPoint SecondPoint TextPoint))
    (vla-ZoomAll acadObj)
)

Dạ, em cảm ơn anh Tue_NV.

 

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
thanhduan2407    226

Cảm ơn anh Tue_NV nhé! Em đã làm được rồi. Nhưng lại theo kiểu khác anh ạ.

 

Code như anh thì em viết hàm con thế này

(vl-load-com)
(defun VD1G1 ( P_Cen P_Trai P_Phai BKR  / P_Text TextPoint  )

(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))
(setq   angVert     (vlax-3d-point P_Cen)
	FirstPoint  (vlax-3d-point P_Trai)
	SecondPoint (vlax-3d-point P_Phai)
	   TextPoint(vlax-3d-point (polar P_Cen (+ (angle P_Cen P_Phai) (/ Pi 4)) BKR))
 )

;; Create the angular dimension in model space
(setq modelSpace (vla-get-ModelSpace doc))
(setq dimObj (vla-AddDimAngular modelSpace angVert FirstPoint SecondPoint TextPoint))
)

Nhưng nó không đo được góc lớn hơn 180 độ

 

Thế nên em lại dùng theo cách thủ công

(defun DV1G (P_Cen  P_Trai  P_Phai  BKR  / P_Text )
(setvar "OSMODE" 0)
(setq P_Text (polar P_Cen (+ (angle P_Cen P_Phai) (/ pi 4)) BKR))
(command "dimangular" "" P_Cen P_Trai P_Phai P_Text)
)

Các bác góp ý cho em hàm trên cùng để nó đo được góc lớn hơn 180 được không ạ?

Cảm ơn các 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
thanhduan2407    226

Bác cho em hỏi ké 1 chút là 

(Chr ?) thì mã Ascii là dấu nháy kép ( " ) ạ? Trong phần độ phút em tìm đc là (chr 176) = "    ° '',  (chr 39) = " ' ''

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
Tue_NV    3.841

Bác cho em hỏi ké 1 chút là 

(Chr ?) thì mã Ascii là dấu nháy kép ( " ) ạ? Trong phần độ phút em tìm đc là (chr 176) = "    ° '',  (chr 39) = " ' ''

 

Em dùng (ascii "\"") là biết mã rồi

  • 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
thanhduan2407    226

Em dùng (ascii "\"") là biết mã rồi

Ôi! Tuyệt vời anh ạ!

Tại vì dấu " đặc biệt quá nên em ko Test được. Thêm cái \ OK luôn. ^^

Cảm ơn anh Tue_NV

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
thanhduan2407    226

Search ascii table ra đủ cả

http://www.asciitable.com/

Em cũng tìm dc cái này rồi, nhưng loay hoay thế nào khi test lại ko ra. Với lại khi tra phải có internet. ^^

Dc anh Tue_NV chỉ cho cách là ok 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

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


×