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

HELP!!!! Nhờ cải tiến lisp

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

Chào các bác, em có tự tạo được 1 lisp theo nhưng vẫn còn 1 điểm chưa ưng ý nghĩ mãi không ra. Nhờ các cao thủ giúp đỡ ạ

- Bản vẽ của em được trình bày theo đường ucs trong file dwg em đính kèm.

- Em muốn tạo 1 leader và vòng tròn tại các point màu vàng ( ví trí điểm đặt của leader và tâm vòng trong là tọa độ sau khi làm tròn lấy 3 số sau dấu phẩy và ở ucs world)

***** Vấn đề của em là sau sau khi tạo leader thì nó lại tạo ở tọa độ world nên nó bị nghiêng, em muốn nó được tạo theo đường ucs của mình.

Bên dưới là lisp của em

 

(defun c:DT (/ p p1 center n clayer osmode)

  (setvar "cmdecho" 0)

  (setq clayer (getvar "clayer")

        osmode (getvar "osmode")

  )

  (command "ucs" "w")

  (command "clayer" "8 平面図")

  (command "cmleaderstyle" "引き出し線1")

  (prompt "\n Chọn vị trí điểm T ")

  (setq n 0)

  (while 

    (setq p (getpoint))

    (setq n (1+ n))

    (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0))

    (setvar "osmode" 0)

    (command "circle" p1 0.05)

    (command "line" (polar p1 0 0.05) (polar p1 pi 0.05) "")

    (command "rotate" "l" "" p1 "c" 90 "")

    ;(command "ucs" "p")

    (command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))

    (setvar "osmode" osmode)

  

  

  )

  (command "ucs" "p")

  (command "clayer" clayer)

  (princ)

  

  

)

HELP.dwg

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

Chào các bác, em có tự tạo được 1 lisp theo nhưng vẫn còn 1 điểm chưa ưng ý nghĩ mãi không ra. Nhờ các cao thủ giúp đỡ ạ

- Bản vẽ của em được trình bày theo đường ucs trong file dwg em đính kèm.

- Em muốn tạo 1 leader và vòng tròn tại các point màu vàng ( ví trí điểm đặt của leader và tâm vòng trong là tọa độ sau khi làm tròn lấy 3 số sau dấu phẩy và ở ucs world)

***** Vấn đề của em là sau sau khi tạo leader thì nó lại tạo ở tọa độ world nên nó bị nghiêng, em muốn nó được tạo theo đường ucs của mình.

Bên dưới là lisp của em

 

(defun c:DT (/ p p1 center n clayer osmode)

  (setvar "cmdecho" 0)

  (setq clayer (getvar "clayer")

        osmode (getvar "osmode")

  )

  (command "ucs" "w")

  (command "clayer" "8 平面図")

  (command "cmleaderstyle" "引き出し線1")

  (prompt "\n Chọn vị trí điểm T ")

  (setq n 0)

  (while 

    (setq p (getpoint))

    (setq n (1+ n))

    (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0))

    (setvar "osmode" 0)

    (command "circle" p1 0.05)

    (command "line" (polar p1 0 0.05) (polar p1 pi 0.05) "")

    (command "rotate" "l" "" p1 "c" 90 "")

    ;(command "ucs" "p")

    (command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))

    (setvar "osmode" osmode)

  

  

  )

  (command "ucs" "p")

  (command "clayer" clayer)

  (princ)

  

  

) 

HELP.dwg

Không biết đúng ý chủ thớt ko nhỉ. Nếu đúng thì khi thao tác vẫn ở trong ucs thì thao tác bình thường với chế độ ortho là off và bỏ dòng  (command "ucs" "w") là đc mà nhỉ ! ^_^

test1.gif

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

Không biết đúng ý chủ thớt ko nhỉ. Nếu đúng thì khi thao tác vẫn ở trong ucs thì thao tác bình thường với chế độ ortho là off và bỏ dòng  (command "ucs" "w") là đc mà nhỉ ! ^_^

test1.gif

 

 

Vấn đề của em là: em muốn làm tròn tọa độ ở hệ world chứ ko phải ở hệ tọa độ sau UCS bá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

Bác Bee xem điểm T1 em đang tọa sẽ rõ: điểm đó sau khi đưa về UCS world thì nó đang được làm tròn 3 số sau dấu phẩy, nhưng sau khí ucs nó sẽ ko đc làm làm ( đó làm điều em muốn)

Bài toán cần giải là làm cho cái Mleader ngang ra sau khi ucs ý

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

Bác Bee xem điểm T1 em đang tọa sẽ rõ: điểm đó sau khi đưa về UCS world thì nó đang được làm tròn 3 số sau dấu phẩy, nhưng sau khí ucs nó sẽ ko đc làm làm ( đó làm điều em muốn)

Bài toán cần giải là làm cho cái Mleader ngang ra sau khi ucs ý

Không hiểu lắm ý 1 là sau 3 dấu phẩy.

Ý 2 là Mleader ngang thì chỉ cần bật ortho là ngang mà:

https://uphinh.org/image/9JBPbl

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

Không hiểu lắm ý 1 là sau 3 dấu phẩy.

Ý 2 là Mleader ngang thì chỉ cần bật ortho là ngang mà:

https://uphinh.org/image/9JBPbl

Em nghĩ bác chưa hiểu ý em do em giải kém.

Sau khi thao tác lệnh DT em đc cái T1 màu trắng nó có rotate nhưng em muốn rotate = 0 để nó đc như cái màu đỏ bên cạnh

Capture.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
8 phút trước, tavantoan12 đã nói:

Em nghĩ bác chưa hiểu ý em do em giải kém.

Sau khi thao tác lệnh DT em đc cái T1 màu trắng nó có rotate nhưng em muốn rotate = 0 để nó đc như cái màu đỏ bên cạnh

Capture.JPG

Để ra Mlea màu đỏ thì mình post trên rồi bỏ ortho đi là nó tự động thành T1 đỏ theo UCS.

https://uphinh.org/image/9JFgQ2

 

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

Để ra Mlea màu đỏ thì mình post trên rồi bỏ ortho đi là nó tự động thành T1 đỏ theo UCS.

 https://uphinh.org/image/9JFgQ2

 

câu truyện của em nó ở chỗ này 

[ bỏ dòng  (command "ucs" "w") là đc mà nhỉ ! ^_^]

nếu bác bỏ dòng này của em lsp sẽ làm tròn tọa độ ở hệ tọa độ đã bị UCS mà em thì muốn làm tròn tọa độ ở hệ WORLD.

2 nữa là Mleader nó ăn theo UCS mà nên nó mới tạo ra Rotate không theo ý em. Rotate thì em muốn nó ăn theo thằng đã UCS.

 

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

Mong bác xem video này sẽ hiểu 

Muốn MLead theo ucs thì quay về wcs làm gì khi dùng lệnh  (command "ucs" "w") ?

Nói chung là nhìn clip vẫn chưa hiểu lắm. Tọa độ làm tròn 3 sau phẩy thì dùng unit chỉnh.

Mình cũng làm clip xem đúng chưa nhé.

https://youtu.be/D24cxAnMToE

 

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

Muốn MLead theo ucs thì quay về wcs làm gì khi dùng lệnh  (command "ucs" "w") ?

Nói chung là nhìn clip vẫn chưa hiểu lắm. Tọa độ làm tròn 3 sau phẩy thì dùng unit chỉnh.

Mình cũng làm clip xem đúng chưa nhé.

https://youtu.be/D24cxAnMToE

 

May quá bác bắt đầu hiểu ý em rồi, cám ơn bác đã kiên nhẫn.

Với câu hỏi của bác thì: Do tính chất công việc em buộc phải làm tròn tọa độ ở wcs , làm tròn của em là từ số thứ 4 sau dấu phẩy sẽ đưa nó về 0 chính về thế mới có dòng (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0)) này đó bác, không phải làm tròn kiểu luprec đâu ( cái này chỉ về mặt hiển thị thôi chứ bản chất nó không làm tròn)

Theo video của bác, nếu bác đưa về wcs , để luprec 7 thì tọa độ của bác sẽ không có dạng xx,xxx0000 (đây là điều em muốn)

  • Vote giảm 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
1 giờ trước, tavantoan12 đã nói:

May quá bác bắt đầu hiểu ý em rồi, cám ơn bác đã kiên nhẫn.

Với câu hỏi của bác thì: Do tính chất công việc em buộc phải làm tròn tọa độ ở wcs , làm tròn của em là từ số thứ 4 sau dấu phẩy sẽ đưa nó về 0 chính về thế mới có dòng (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0)) này đó bác, không phải làm tròn kiểu luprec đâu ( cái này chỉ về mặt hiển thị thôi chứ bản chất nó không làm tròn)

Theo video của bác, nếu bác đưa về wcs , để luprec 7 thì tọa độ của bác sẽ không có dạng xx,xxx0000 (đây là điều em muốn)

Mình chỉnh 1 chút chủ thớt test nhé.

(defun c:dt  (/ p p1 center n clayer osmode)
  (setvar "cmdecho" 0)
  (setq clayer (getvar "clayer")
        osmode (getvar "osmode")
        )
  (setvar "ORTHOMODE" 1)
;;;  (command "ucs" "w")
  (command "clayer" "8 ???")
  (command "cmleaderstyle" "1")
  (prompt "\n Ch?n v? trí di?m T ")
  (setq n 0)
  (while
    (setq p (getpoint))
     (setq n (1+ n))
     (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0))
     (setvar "osmode" 0)
     (command "circle" p1 0.05)
     (command "line" (polar p1 0 0.05) (polar p1 pi 0.05) "")
     (command "rotate" "l" "" p1 "c" 90 "")
 ;(command "ucs" "p")
     (command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))
     (setvar "osmode" osmode)
     )
;;;  (command "ucs" "p")
  (command "clayer" clayer)
  (princ)
  )

 

  • 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
1 giờ} trướ}c, Bee đã nói:

Mình chỉnh 1 chút chủ thớt test nhé.


(defun c:dt  (/ p p1 center n clayer osmode)
  (setvar "cmdecho" 0)
  (setq clayer (getvar "clayer")
        osmode (getvar "osmode")
        )
  (setvar "ORTHOMODE" 1)
;;;  (command "ucs" "w")
  (command "clayer" "8 ???")
  (command "cmleaderstyle" "1")
  (prompt "\n Ch?n v? trí di?m T ")
  (setq n 0)
  (while
    (setq p (getpoint))
     (setq n (1+ n))
     (setq p1 (list (atof (rtos (car p) 2 3)) (atof (rtos (cadr p) 2 3)) 0))
     (setvar "osmode" 0)
     (command "circle" p1 0.05)
     (command "line" (polar p1 0 0.05) (polar p1 pi 0.05) "")
     (command "rotate" "l" "" p1 "c" 90 "")
 ;(command "ucs" "p")
     (command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))
     (setvar "osmode" osmode)
     )
;;;  (command "ucs" "p")
  (command "clayer" clayer)
  (princ)
  )

 

Bác đang hiểu nhầm từ " NGANG " của em rồi. Em muốn nói là góc xoay của cái Mleader nó không khớp với cái ucs hiện hành. Không liên quan gì ortho đâu ạ

121.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
55 phút trước, tavantoan12 đã nói:

Bác đang hiểu nhầm từ " NGANG " của em rồi. Em muốn nói là góc xoay của cái Mleader nó không khớp với cái ucs hiện hành. Không liên quan gì ortho đâu ạ

121.png

Đã hiểu.

Chủ thớt chỉ cần thay dòng là chuyển tọa độ center Circle chẵn bên WCS sang UCS rồi vẽ mleader theo điểm này là xong.

(command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))

bằng

(command "mleader" "h" (trans p1 0 1) pause 0 (strcat "T" (rtos n 2 0)))

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

Đã hiểu.

Chủ thớt chỉ cần thay dòng là chuyển tọa độ center Circle chẵn bên WCS sang UCS rồi vẽ mleader theo điểm này là xong.

(command "mleader" "h" p1 pause 0 (strcat "T" (rtos n 2 0)))

bằng

(command "mleader" "h" (trans p1 0 1) pause 0 (strcat "T" (rtos n 2 0)))

52 phút trước, Bee đã nói:

mleader

Từ khóa của em là trans thank bác nhiềuuuuuuuuuuuuuuuuuuu, cám ơn bác kiên nhẫn giúp.

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

×