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

Có cái này rất hay hỏi các pro

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

Em đang làm một bản giao thông, nhưng tim đường là những đường cong, em muốn dựng những tiếp tuyến tại những đường cong đó. Tức là giả sử có một đường cong, em muốn dựng 2 đường tiếp tuyến tại 2 đầu của đường cong đó, nhưng không biết trong cad có lệnh nào làm như vậy không. Em đã bật chế độ bắt điểm tangent nhưng không áp dụng cho đường cong được. Các bác xem trong cad có lệnh nào làm được như vậy không bảo em với, hoặc bác nào có thể viết lisp đó giúp em được không. Cảm ơn các bác nhiều :s_big:

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 đang làm một bản giao thông, nhưng tim đường là những đường cong, em muốn dựng những tiếp tuyến tại những đường cong đó. Tức là giả sử có một đường cong, em muốn dựng 2 đường tiếp tuyến tại 2 đầu của đường cong đó, nhưng không biết trong cad có lệnh nào làm như vậy không. Em đã bật chế độ bắt điểm tangent nhưng không áp dụng cho đường cong được. Các bác xem trong cad có lệnh nào làm được như vậy không bảo em với, hoặc bác nào có thể viết lisp đó giúp em được không. Cảm ơn các bác nhiều :s_big:

Bạn nên gửi lên một ví dụ cụ thể gồm cái "đường cong", điểm bắt đầu của tiếp tuyến muốn vẽ. Vì thực tế có trường hợp từ một số điểm nào đó không thể vẽ tiếp tuyến với một đường cong cho trướ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
Em đang làm một bản giao thông, nhưng tim đường là những đường cong, em muốn dựng những tiếp tuyến tại những đường cong đó. Tức là giả sử có một đường cong, em muốn dựng 2 đường tiếp tuyến tại 2 đầu của đường cong đó, nhưng không biết trong cad có lệnh nào làm như vậy không. Em đã bật chế độ bắt điểm tangent nhưng không áp dụng cho đường cong được. Các bác xem trong cad có lệnh nào làm được như vậy không bảo em với, hoặc bác nào có thể viết lisp đó giúp em được không. Cảm ơn các bác nhiều :s_big:

 

Bạn thử cái lisp này xem.

(defun c:gt( / ent obj dai pt1 pt2 ang1 ang2)
 (setq ent (car (entsel "Chon duong cong:"))
dai (getreal "\nChieu dai 2 doan tiep tuyen:")
       obj (vlax-ename->vla-object ent)
       pt1 (vlax-curve-getStartPoint obj)
       pt2 (vlax-curve-getEndPoint obj)
       ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv obj
		     (vlax-curve-getParamAtPoint obj pt1)))
       ang2 (angle '(0 0 0) (vlax-curve-getFirstDeriv obj
		     (vlax-curve-getParamAtPoint obj pt2)))
 )
 (if (vlax-curve-getClosestPointto obj  (polar pt1 ang1 dai))
   (setq dai (- dai)))
 (entmake (list '(0 . "LINE") (cons 10 pt1) (cons 11 (polar pt1 ang1 dai))))

 (if (vlax-curve-getClosestPointto obj  (polar pt2 ang2 dai))
   (setq dai (- dai)))
 (entmake (list '(0 . "LINE") (cons 10 pt2) (cons 11 (polar pt2 ang2 dai))))
)

  • 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
Bạn thử cái lisp này xem.

(defun c:gt( / ent obj dai pt1 pt2 ang1 ang2)
 (setq ent (car (entsel "Chon duong cong:"))
dai (getreal "\nChieu dai 2 doan tiep tuyen:")
       obj (vlax-ename->vla-object ent)
       pt1 (vlax-curve-getStartPoint obj)
       pt2 (vlax-curve-getEndPoint obj)
       ang1 (angle '(0 0 0) (vlax-curve-getFirstDeriv obj
		     (vlax-curve-getParamAtPoint obj pt1)))
       ang2 (angle '(0 0 0) (vlax-curve-getFirstDeriv obj
		     (vlax-curve-getParamAtPoint obj pt2)))
 )
 (if (vlax-curve-getClosestPointto obj  (polar pt1 ang1 dai))
   (setq dai (- dai)))
 (entmake (list '(0 . "LINE") (cons 10 pt1) (cons 11 (polar pt1 ang1 dai))))

 (if (vlax-curve-getClosestPointto obj  (polar pt2 ang2 dai))
   (setq dai (- dai)))
 (entmake (list '(0 . "LINE") (cons 10 pt2) (cons 11 (polar pt2 ang2 dai))))
)

cai này hay nhưng ban phải bung ra hay cắt từng đoạn mình muốn ráp ường thẳng vào . nhừng làm vậy nó kho tiếp uyên với hai dường cong liên tuc . chắt phải vẽ hai đường thăng rôi mới chon ban 1 kinh đương cong

  • 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

Mình đoán là bản vẽ của bạn không còn vị trí các đỉnh đổi hướng của tuyến nên muốn xác định lại.

Cách đơn giản không cần dùng lisp

- Nếu đường cong không nối trực tiếp với nhau thì bạn còn 2 cánh tuyến. extend 2 cánh tuyến này ra cắt nhau tại đâu thì đỉnh tại đó.

- Nếu 2 đường cong nối trực tiếp thì thông thường mõi đường cong bạn còn 1 cánh tuyến. bạn cũng làm tương tự. extend 2 cánh tuyến còn lại của 2 đường cong rồi mirror 1 trong 2 cánh tuyến đó qua đường vuông góc với đường thẳng nối từ TD và TC của đường cong đó. bạn sẽ tìm được cánh tuyến chung của cả 2 đường cong.

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 đoán là bản vẽ của bạn không còn vị trí các đỉnh đổi hướng của tuyến nên muốn xác định lại.

Cách đơn giản không cần dùng lisp

- Nếu đường cong không nối trực tiếp với nhau thì bạn còn 2 cánh tuyến. extend 2 cánh tuyến này ra cắt nhau tại đâu thì đỉnh tại đó.

- Nếu 2 đường cong nối trực tiếp thì thông thường mõi đường cong bạn còn 1 cánh tuyến. bạn cũng làm tương tự. extend 2 cánh tuyến còn lại của 2 đường cong rồi mirror 1 trong 2 cánh tuyến đó qua đường vuông góc với đường thẳng nối từ TD và TC của đường cong đó. bạn sẽ tìm được cánh tuyến chung của cả 2 đường cong.

Thank bạn, nhưng bạn chưa hiểu vấn đề của mình lắm thì phải. Mình có các đường cong nối với nhau, nhưng mình muốn tìm cánh tuyến của 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
cai này hay nhưng ban phải bung ra hay cắt từng đoạn mình muốn ráp ường thẳng vào . nhừng làm vậy nó kho tiếp uyên với hai dường cong liên tuc . chắt phải vẽ hai đường thăng rôi mới chon ban 1 kinh đương cong

Em đã sử dụng lisp này, nhưng thấy báo lỗi sau :

Command: gt

Chon duong cong:

Chieu dai 2 doan tiep tuyen:10

; error: no function definition: VLAX-ENAME->VLA-OBJECT

Các bác chỉ bảo giúp em xem 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
Em đã sử dụng lisp này, nhưng thấy báo lỗi sau :

Command: gt

Chon duong cong:

Chieu dai 2 doan tiep tuyen:10

; error: no function definition: VLAX-ENAME->VLA-OBJECT

Các bác chỉ bảo giúp em xem với

Dưới dòng Code :

(defun c:gt( / ent obj dai pt1 pt2 ang1 ang2)

Bạn thêm dòng : (vl-load-com)

  • 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
Thank bạn, nhưng bạn chưa hiểu vấn đề của mình lắm thì phải. Mình có các đường cong nối với nhau, nhưng mình muốn tìm cánh tuyến của nó.

 

???????? Cách mình bảo bạn chính là đi tìm cánh tuyến của các đường cong còn gì nữa

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ưới dòng Code :

(defun c:gt( / ent obj dai pt1 pt2 ang1 ang2)

Bạn thêm dòng : (vl-load-com)

Thanks các bác rất nhiều, lúc đầu em sử dụng lisp đó trong cad 2008 không đc, nhưng dùng cho 2004 thì lại ok, sau khi thêm đoạn code dùng ok rùi. Xin hỏi bác Thaistreet có phải ngày xưa làm ở HDCI cùng chỗ anh Quân không nhỉ, bác có nhớ thằng ngồi cạnh bác làm giao thông 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

Cái này chỉ là kiến thức hình học thuần tuý thôi mà.

Vẽ 2 đường line từ tâm đường tròn tới các điểm tiếp xúc đó (TĐ,TC)

Vẽ các đường vuông góc với các đường vừa vẽ.

Move chúng tới các điểm tiếp xúc. thế là xong.

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  

×