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

cách chia đường cong thành đoạn không bằng nhau

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

cách chia đường cong thành đoạn không bằng nhau? ai biết giúp mình với . lệnh DIV chỉ chia được thành những đoạn bằng nhau.hic

Dùng lisp sau của bác SSG nhé. Mình tính hoàn chỉnh lisp này nhưng vẫn chưa làm đc.

 

(defun C:POC( / c p1 oldos ph k d1 dh p2) ;;;Point On Curve

(vl-load-com)

(setq

c (car (entsel "\nChon curve:"))

p1 (getpoint "\nDiem chuan tren curve:")

oldos (getvar "osmode")

)

(entmake (list (cons 0 "POINT") (cons 10 p1)))

(setvar "osmode" 512)

(setvar "pdmode" 34)

(setq

ph (getpoint p1 "\nDiem dinh huong tren curve:")

k (getreal "\nKhoang cach:")

d1 (vlax-curve-getDistAtPoint c p1)

dh (vlax-curve-getDistAtPoint c ph)

)

(if (> dh d1) (setq d2 (+ d1 k)) (setq d2 (- d1 k)))

(setq p2 (vlax-curve-getPointAtDist c d2))

(entmake (list (cons 0 "POINT") (cons 10 p2)))

(setvar "osmode" oldos)

(princ)

)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

Thực chất lisp này không chi 1 lúc nhiều đoạn được nhưng thao tác như sau bạn có thể làm nhiều lẩn để ra kết quả ưng ý.

 

-Tên lệnh POC.

-Chọn đường cong (thực chất thì mọi loại cuver).

-Chọn điểm chuẩn trên đường cong (điểm này nằm bất kỳ không nhất thiết là điểm đầu hay điểm cuối)

-Chọn điểm định hướng (nhằm xác định phía sẽ tính, từ điểm chuẩn).

-Nhập khoảng cách.

Lisp sẽ vẽ ra 1 point tại vị trí cách điểm chẩn khoảng cách vừa nhập nằm trên đường cong ở phía điểm định hướng.

 

Bạn cứ làm vài lần cới điểm chẩn là điểm mới vẽ ra và khoảng cách nhập vào là đáp ứng nhu cầu chứ ME và DIV không đáp ứng được đâu.

  • 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
Dùng lisp sau của bác SSG nhé. Mình tính hoàn chỉnh lisp này nhưng vẫn chưa làm đc.

1- Ý bạn muốn hoàn chỉnh như thế nào? Nói chung, các hàm dạng vlax-curve-xxxx có đủ khả năng để đảm đương việc "chia chác" curve theo đủ các kiểu ta muốn. Thật ra thì ý của chủ topic này chưa rõ ràng: cách user nhập số liệu? Cách đáp ứng của chương trình? v.v...

 

2- Nói về DIV và ME, ssg xin nêu Bài toán trồng trụ rào như sau:

Đường ranh có chiều dài L. Người ta muốn trồng các trụ rào cách đều nhau, với khoảng cách dự kiến là k.

Số khoảng chia n = L/k nói chung không phải là số nguyên -> ta phải làm tròn n, sau đó tính lại kt = L/n, có sai khác chút ít với k dự kiến ban đầu. Bài toán này ssg gặp rất nhiều trong cơ khí: chia và khoan các lỗ cách đều nhau trên một đoạn chiều dài cho trước. Dùng ME trong trường hợp này không ổn vì nó sẽ chừa lại một đoạn cuối cùng "không giống ai"! Để dùng DIV phải qua các bước:

- Đo chiều dài L của curve

- Dự kiến khoảng cách k

- Tính n = L/k. Làm tròn n (có thể làm tròn tăng hoặc giảm tùy trường hợp)

- Dùng lệnh DIV với thông số n

Ssg vẫn thường dùng lisp sau, kết hợp ME và DIV. Bạn nào có nhu cầu tương tự bài toán "trồng trụ rào" nêu trên thử dùng xem:

;;;---------------------------------------------------------
(defun C:MED( / e kc L OK n kieu) ;;;Measure then Divide
(if (not kieu0) (setq kieu0 "Tang"))
(setq
 e (car (entsel "\nChon doi tuong:"))
 L (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))
 OK nil
)
(while (not OK)
 (setq kc (getreal (strcat "\nChieu dai doi tuong L= " (rtos L) ". Nhap khoang cach du kien:")))
 (if (>= kc L) 
   (alert "Khoang cach lon hon chieu dai doi tuong!")
   (setq OK T)
 )
)
(setq n (/ L kc))
(initget "Tang Giam")
(setq kieu (getkword (strcat "\nSo khoang chia tinh toan n= " (rtos n) ". Lam tron n [Tang/Giam] <" kieu0 ">:")))
(if (not kieu) (setq kieu kieu0) (setq kieu0 kieu))
(setq n (fix n))
(if (= kieu "Tang") (setq n (1+ n)))
(command "divide" e n)
(setvar "pdmode" 34)
(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
1- Ý bạn muốn hoàn chỉnh như thế nào? Nói chung, các hàm dạng vlax-curve-xxxx có đủ khả năng để đảm đương việc "chia chác" curve theo đủ các kiểu ta muốn. Thật ra thì ý của chủ topic này chưa rõ ràng: cách user nhập số liệu? Cách đáp ứng của chương trình? v.v...

Hồi Duy hỏi anh cái lisp này là muốn xào nấu thêm để ra thành lệnh me và div nhưng cho chọn điểm xuất phát và đối tượng rải không cần là block mà do mình chọn 1 nhóm đối tượng và điểm gốc nhóm đối tượng (Duy thường thiết kế cây xanh vỉa hè mà). Nhưng rồi bận với lại không hiểu rỏ lắm về các hàm vlax-. Cố thì dựa vào lisp của anh rồi viết thêm nhưng cũng lười nên bỏ trôi miết tới hôm nay.

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

×