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

Lisp dim khoảng cách liên tiếp trên Polyline - Pline

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

Khi thực hiện ghi kích thước theo các phương (thẳng đứng, nằm ngang....) cho nhiều đối tượng trong một bản vẽ, mình không biết làm thế nào để đưa các khoảng cách từ đường ghi kích thước (dim line) tới các đối tượng (line...) về cùng một giá trị. Mình đã đã thử tìm kiếm trên DĐ rồi mà không thấy kết quả nào cả. Mong anh em trong diễn đàn cho ý kiến giúp đỡ nhé.

Thanks!

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
Khi thực hiện ghi kích thước theo các phương (thẳng đứng, nằm ngang....) cho nhiều đối tượng trong một bản vẽ, mình không biết làm thế nào để đưa các khoảng cách từ đường ghi kích thước (dim line) tới các đối tượng (line...) về cùng một giá trị. Mình đã đã thử tìm kiếm trên DĐ rồi mà không thấy kết quả nào cả. Mong anh em trong diễn đàn cho ý kiến giúp đỡ nhé.

Thanks!

Thiết lập như sau:

New_Picture_7.jpg

Khi ghi kích thước bạn kéo dim sao cho khoảng cách từ chân dim đến line một khoảng a nhỏ thôi.

Drawing1_2.jpg

Thế là tất cả đều bằng nhau một khoảng cách tương đối :lol2:

Nếu tuyệt đối bằng nhau thì phải nhờ đến các cao thủ trong diễn đàn. :lol2:

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
Khi thực hiện ghi kích thước theo các phương (thẳng đứng, nằm ngang....) cho nhiều đối tượng trong một bản vẽ, mình không biết làm thế nào để đưa các khoảng cách từ đường ghi kích thước (dim line) tới các đối tượng (line...) về cùng một giá trị. Mình đã đã thử tìm kiếm trên DĐ rồi mà không thấy kết quả nào cả. Mong anh em trong diễn đàn cho ý kiến giúp đỡ nhé.

Thanks!

vao modi dimi line anh arrows chọn nơi offset from origin chon kich thước

java script:void(0)

untitled.jpg

néu làm khoang cach tới đương ghi số thì phải dùng offset để chi khoang cách

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
vao modi dimi line anh arrows chọn nơi offset from origin chon kich thước

java script:void(0)

untitled.jpg

néu làm khoang cach tới đương ghi số thì phải dùng offset để chi khoang cách

Cám ơn levanduy và truongnhataz! Hướng dẫn của 2 bạn là để thiết lập khoảng cách từ chân đường dóng kích thước tới đối tượng đúng không? Nhưng ý của mình là muốn bằng cách nào đó để trong bản vẽ có được tất cả khoảng cách từ ĐƯỜNG GHI KÍCH THƯỚC tới các đối tượng cần ghi kích thước có giá trị bằng nhau cơ(vì khi thực hiện kéo kích thước, nhất là các đối tượng ở các mặt cắt khác nhau thì rất khó cố định một k/c nhất định từ dim line tới đối tượng)

Mong các bạn chỉ bảo tiếp nhé. :lol2:

Đây là ví dụ về ý định của mình:

http://www.cadviet.com/upfiles/VD.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
Cám ơn levanduy và truongnhataz! Hướng dẫn của 2 bạn là để thiết lập khoảng cách từ chân đường dóng kích thước tới đối tượng đúng không?

Bạn hiểu sai rồi.Cách làm của mình là thiết lập cố định khoảng cách từ chân đường kích thước đến đường ghi kích thước luôn luôn là không đổi.

Còn khoảng cách từ chân đường kích thước đến đối tượng xa gần tùy thuộc vào vị trí đặt đường kích thướ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

 

Cám ơn levanduy và truongnhataz! Hướng dẫn của 2 bạn là để thiết lập khoảng cách từ chân đường dóng kích thước tới đối tượng đúng không? Nhưng ý của mình là muốn bằng cách nào đó để trong bản vẽ có được tất cả khoảng cách từ ĐƯỜNG GHI KÍCH THƯỚC tới các đối tượng cần ghi kích thước có giá trị bằng nhau cơ(vì khi thực hiện kéo kích thước, nhất là các đối tượng ở các mặt cắt khác nhau thì rất khó cố định một k/c nhất định từ dim line tới đối tượng)
Mong các bạn chỉ bảo tiếp nhé. %5Burl=
Đây là ví dụ về ý định của mình:
http://www.cadviet.com/upfiles/VD.dwg


Cái này có lẽ phải dùng lisp thôi
Bạn dùng thử
lệnh là :
- SelfAdjustDim : dùng khi chiều dài 2 chân dim = nhau, dim nằm trong cùng
- AdjustDim : dùng khi định vị trí dimline với 1 điểm cho trước
Đã sửa phần đổi hệ tọa độ

(defun Dxf(n e) (cdr (assoc n e)))

(defun ModDxf(n v e)

    (if (Dxf n e)

        (entmod (subst (cons n  v) (assoc n e) e))

        (entmod (append e (list (cons n  v))))

    )

)

(defun TSel(et ms)     (if ms (princ ms))    (ssget (if et (list (cons 0  et))))    )



(defun DimSpace () (* (getvar "DIMSCALE") (getvar "dimscale")))



(defun AdjustDim1 (p l e / a)

    (if (= 0 (logand 92 (Dxf 70 e)))

        (progn

            (setq a (angle (Dxf 14 e) (Dxf 10 e)))

            (ModDxf 10 (polar p a  (if (= 1 (rem  (Dxf 70 e) 2)) l (/ l (abs (sin (- a (Dxf 50 e))))))) e )    )

    )

)

 

(defun AdjustDim(ss l / i p)

  (if ss

        (progn

            (setq p (trans (getpoint "\nBase point:")1 0) i -1)

      (repeat (sslength ss)

            (setq i (1+ i) )    (AdjustDim1 p l (entget (ssname ss i)))

    )    ) )(princ)

)



(defun C:AdjustDim()    (AdjustDim (TSel "DIMENSION" "\nSelect Dimensions :") (DimSpace)))



(defun C:SelfAdjustDim( / e)

  (setq i -1 ss (TSel "DIMENSION" "\nSelect Dimensions :") )

  (if ss

    (repeat (sslength ss)

            (setq i (1+ i) e (entget (ssname ss i))  )

            (AdjustDim1 (Dxf 14 e) (DimSpace) e)

  ) )(princ)

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

Mình định  sửa đoạn code khoảng cách đường kích thước dimension line đến điểm base point như này:

(defun DimSpace () (* 5 (getvar "dimscale") (getvar "dimtxt")))

Nhưng như này vẫn bất tiện. Vì đây là cỡ chữ của dimstyle hiện thời. Mình muốn nó là cỡ chữ của dim đc chỉnh khoảng cách thì làm ntn. :D Cũng đang mày mò nghịch lisp tí :) Anh Hà vào chỉ giáo 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

Lisp ở trang nào? Chỉnh như thế nào thì nói cho rõ ra. Nói trước để bạn khỏi thất vọng: nếu đơn giản thì mần giúp, còn phức tạp thì ngại sửa lisp của người khác lắm. 4R có nhiều người mà sao bạn cứ chỉ đích danh tôi, không hay lắm đâu.

http://www.cadviet.com/upfiles/3/21028_adjustdim_selfadjustdim2.lspn Xin lỗi vì đã làm phiền anh. Tài em thấy anh trả lời ở trên nên em phiền chút.

Mình định  sửa đoạn code khoảng cách đường kích thước dimension line đến điểm base point như này:

(defun DimSpace () (* 5 (getvar "dimscale") (getvar "dimtxt")))

Nhưng như này vẫn bất tiện. Vì đây là cỡ chữ của dimstyle hiện thời. Mình muốn nó là cỡ chữ của dim đc chỉnh khoảng cách thì làm ntn.

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

Hàm lấy height của Dim được chọn:


(defun Get_height(ent / blk1 blklst hei)
 (setq blk1 (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget ent (list "*"))))))))
 (while (setq blk1 (entnext blk1))
  (setq blklst (entget blk1))
  (if (= (cdr (assoc 0 blklst)) "MTEXT")
   (setq hei (cdr (assoc 40 blklst)))))
 hei)
 

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

em lắp vào hàm trên

(defun Get_height(ent / blk1 blklst hei)
 (setq blk1 (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget ent (list "*"))))))))
 (while (setq blk1 (entnext blk1))
  (setq blklst (entget blk1))
  (if (= (cdr (assoc 0 blklst)) "MTEXT")
   (setq hei (cdr (assoc 40 blklst)))))
 hei)
(defun DimSpace () (* 5 (Get_height(ent))))

không chạy được. Em gà mấy cái này quá. Biến ent là dim đc chọn thì trong hàm dímpace nhập cái gì nhỉ :D

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ách gọi lệnh:

(DimSpace)

File lisp:


(defun DimSpace()
 (* 5 (getvar "dimscale") (Get_height (car (entsel "\nChon Dim: ")))))
(defun Get_height(ent / blk1 blklst hei)
 (setq blk1 (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget ent (list "*"))))))))
 (while (setq blk1 (entnext blk1))
  (setq blklst (entget blk1))
  (if (= (cdr (assoc 0 blklst)) "MTEXT")
   (setq hei (cdr (assoc 40 blklst)))))
 hei)
 

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ậy thì vầy!


(defun C:HA()
 (princ "\nCho cac Dim...")
 (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "Dimension"))))))
  (DimSpace ent))
 (princ))
(defun DimSpace(ent)
 (* 5 (getvar "dimscale") (Get_height ent)))
(defun Get_height(ent / blk1 blklst hei)
 (setq blk1 (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget ent (list "*"))))))))
 (while (setq blk1 (entnext blk1))
  (setq blklst (entget blk1))
  (if (= (cdr (assoc 0 blklst)) "MTEXT")
   (setq hei (cdr (assoc 40 blklst)))))
 hei)
 

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

Em ghép vào thử lại rồi. Kết quả thì hàm Get_height cho ra kết quả chiều cao dim hiện thời chứ không phải dim đang chọn. Em không hiểu code lắm.

Tai em để dim ở Dim100 dùng gióng khoảng cách vẫn thế, dim 70 cũng giống như thế và kc là 5 lần chiều cao là textdim hiện thời. Nếu như thế ta dùng (getvar "dimtxt") sẽ cho ra chiều cao textdim của dimstyle hiện thời (biến hệ thố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

Sao mà hàm Get_height trả về height của dim current được nhỉ? Bạn add dòng code dưới đây vào command, sau đó chọn dim, xem nó ra gì? Height của Dim current hay Dim được chọn?

(Get_height (car (entsel "\nChon Dim: ")))

Chú ý: có thể height của dim current nó bằng height của dim được chọ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

Em mới mày mò chưa bik cách đặt hàm như thế nào vào hàm để nó chay rồi. :((. Anh đặt hàm vào vị trí giúp em để nó thực hiện đc lệnh gióng em tham khảo vớ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

1). Câu hỏi 1: bạn đã thử bài #25 chưa?

2). Câu hỏi 2: nếu bài #25 là OK thì dùng lisp ở bài #23.

Bạn hỏi một hồi làm tối cũng rối mù lên, trong khi vấn đề là đơn giả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). Câu hỏi 1: bạn đã thử bài #25 chưa?

2). Câu hỏi 2: nếu bài #25 là OK thì dùng lisp ở bài #23.

Bạn hỏi một hồi làm tối cũng rối mù lên, trong khi vấn đề là đơn giản.

http://www.cadviet.com/upfiles/3/21028_add.lsp

Đây là file lisp đã sửa. Từ file lisp gốc em bỏ dòng (defun DimSpace () (* 7 (getvar "dimscale"))) đi và thay vào đoạn code ở bài 23 của anh mà nó khong chay. Em ko biết thêm thêm code gọi hàm như nào. Nhờ anh đặt luô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

http://www.cadviet.com/upfiles/3/21028_add.lsp

Đây là file lisp đã sửa. Từ file lisp gốc em bỏ dòng (defun DimSpace () (* 7 (getvar "dimscale"))) đi và thay vào đoạn code ở bài 23 của anh mà nó khong chay. Em ko biết thêm thêm code gọi hàm như nào. Nhờ anh đặt luôn giúp.

Code ở mục 25 ra kết quả rồi. Nhưng bjo mình không biết cách ghép nó vào lisp trên để nó ra hàm tạo khoảng cách đường kích thước đến đối tượ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

Đây bạn!


(defun GetDxf(n e)
 (cdr (assoc n e)))
(defun ModDxf(n v e)
 (if (GetDxf n e)
  (entmod (subst (cons n  v) (assoc n e) e))
  (entmod (append e (list (cons n  v))))))
(defun TSel(et ms)
 (if ms (princ ms))
 (ssget (if et (list (cons 0 et)))))
(defun AdjustDim1 (p l e / a)
 (if (= 0 (logand 92 (GetDxf 70 e)))
  (progn
   (setq a (angle (GetDxf 14 e) (GetDxf 10 e)))
   (ModDxf 10 (polar p a  (if (= 1 (rem  (GetDxf 70 e) 2)) l (/ l (abs (sin (- a (GetDxf 50 e))))))) e))))
(defun AdjustDim(ss / i p)
 (if ss
  (progn
   (setq p (trans (getpoint "\nBase point:")1 0) i -1)
   (repeat (sslength ss)
(setq i (1+ i))
(AdjustDim1 p (DimSpace (ssname ss i)) (entget (ssname ss i))))))
 (princ))
(defun C:AdjustDim()
 (AdjustDim (TSel "DIMENSION" "\nSelect Dimensions :")))
(defun C:SelfAdjustDim( / e)
 (setq i -1 ss (TSel "DIMENSION" "\nSelect Dimensions :"))
 (if ss
  (repeat (sslength ss)
   (setq i (1+ i) e (entget (ssname ss i)))
   (AdjustDim1 (GetDxf 14 e) (DimSpace (ssname ss i)) e)))
 (princ))
(defun DimSpace(ent / blk1 blklst hei)
 (setq blk1 (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget ent (list "*"))))))))
 (while (setq blk1 (entnext blk1))
  (setq blklst (entget blk1))
  (if (= (cdr (assoc 0 blklst)) "MTEXT")
   (setq hei (cdr (assoc 40 blklst)))))
 (* 5 (getvar "dimscale") hei))
 

  • 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

Cái này có lẽ phải dùng lisp thôi

Bạn dùng thử

lệnh là :

- SelfAdjustDim : dùng khi chiều dài 2 chân dim = nhau, dim nằm trong cùng

- AdjustDim : dùng khi định vị trí dimline với 1 điểm cho trước

Đã sửa phần đổi hệ tọa độ

 

(defun Dxf(n e) (cdr (assoc n e)))

(defun ModDxf(n v e)

    (if (Dxf n e)

        (entmod (subst (cons n  v) (assoc n e) e))

        (entmod (append e (list (cons n  v))))

    )

)

(defun TSel(et ms)     (if ms (princ ms))    (ssget (if et (list (cons 0  et))))    )



(defun DimSpace () (* (getvar "DIMSCALE") (getvar "dimscale")))



(defun AdjustDim1 (p l e / a)

    (if (= 0 (logand 92 (Dxf 70 e)))

        (progn

            (setq a (angle (Dxf 14 e) (Dxf 10 e)))

            (ModDxf 10 (polar p a  (if (= 1 (rem  (Dxf 70 e) 2)) l (/ l (abs (sin (- a (Dxf 50 e))))))) e )    )

    )

)

 

(defun AdjustDim(ss l / i p)

  (if ss

        (progn

            (setq p (trans (getpoint "\nBase point:")1 0) i -1)

      (repeat (sslength ss)

            (setq i (1+ i) )    (AdjustDim1 p l (entget (ssname ss i)))

    )    ) )(princ)

)



(defun C:AdjustDim()    (AdjustDim (TSel "DIMENSION" "\nSelect Dimensions :") (DimSpace)))



(defun C:SelfAdjustDim( / e)

  (setq i -1 ss (TSel "DIMENSION" "\nSelect Dimensions :") )

  (if ss

    (repeat (sslength ss)

            (setq i (1+ i) e (entget (ssname ss i))  )

            (AdjustDim1 (Dxf 14 e) (DimSpace) e)

  ) )(princ)

)

chào bạn,  lisp của bạn rất hay, mình sử dụng trong model thi ổn, nhưng khi sử dụng trong môi trường layout, sử dụng loại dim cho nhiều tỉ lệ thì nó lại ko dùng được. Vậy bạn ( hay bác nào đi ngang qua) giúp mình chỉnh cho lisp có thể sử dụng được ở trong môi trường layout. Cám ơn 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  

×