Đến nội dung


Hình ảnh

help: làm sao để chia một đường polyline thành các đoạn có chiều dài khác nhau?


  • Please log in to reply
8 replies to this topic

#1 manhhuy1984

manhhuy1984

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 February 2009 - 11:33 AM

Mình đang cần chia một đường polyline thành các đoạn có chiều dài khác nhau với điểm chèn là 1 block. Ai biết cách chỉ mình với, thanks!
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 27 February 2009 - 12:58 PM

Mình đang cần chia một đường polyline thành các đoạn có chiều dài khác nhau với điểm chèn là 1 block. Ai biết cách chỉ mình với, thanks!

bạn hãy ví dụ bằng 1 file DWG,

nói rõ bạn nhập vào cái gì và bạn mong muốn sẽ nhận được cái gì.
  • 0

#3 manhhuy1984

manhhuy1984

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 05 March 2009 - 01:06 PM

bạn hãy ví dụ bằng 1 file DWG,

nói rõ bạn nhập vào cái gì và bạn mong muốn sẽ nhận được cái gì.

bác xem làm sao vẽ đc hình sau nhanh nhất!
http://www.cadviet.c...Drawing1_34.dwg
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 March 2009 - 09:17 PM

bác xem làm sao vẽ đc hình sau nhanh nhất!
http://www.cadviet.c...Drawing1_34.dwg

Mình hiểu ý bạn. Ý của bạn là định chia Pline thành các đoạn có chiều dài khác nhau rồi chèn cái block hình vuông có 2 đường chéo vào đúng vị trí chia trên pline đó phải không?
Riêng mình để vẽ nhanh thì chỉ cần sử dụng lệnh Align và lệnh copy(Multiple) là nhanh nhất
Lệnh Align để xoay cho tâm 2 đường chéo hình vuông nằm trên Pline như trong hình vẽ (cạnh hình vuông song song; vuông góc với Pline)
copy (multilple) : để sao chép nhiều đối tượng với cách nhập direct distance (Nhập khoảng cách trực tiếp) (sử dụng chế độ truy bắt điểm Nearest) (hoặc có thể bạn sử dụng chế độ truy bắt điểm From)
Mong bạn hiểu ý của mình.
  • 0

#5 KE AN MAY DI VANG

KE AN MAY DI VANG

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 822 Bài viết
Điểm đánh giá: 572 (tốt)

Đã gửi 05 March 2009 - 10:38 PM

Cách của bạn Tue_NV :Lệnh Align để xoay cho tâm 2 đường chéo hình vuông nằm trên Pline như trong hình vẽ.

Cách của tôi: Chọn đối tượng > Ro > Bắt điểm trọng tâm hình vuông, di chuột vào đường thẳng a-b-c bắt điểm Nearest để xoay.
  • 0
KẺ ĂN MÀY DĨ VÃNG

#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 06 March 2009 - 01:43 PM

bác xem làm sao vẽ đc hình sau nhanh nhất!
http://www.cadviet.c...Drawing1_34.dwg

Chào bạn manhhuy1984,
Bạn dùng thử cái lisp này xem có đúng ý bạn không nhé. Có gì chưa đúng post lên để mình xem lại.
Bạn lư ý là lisp này chèn cái block b trên bản vẽ bạn post. Nếu bạn muốn chèn một block khác thì bạn sửa lại tên nó trong hàm insert hoặc thay vào đó là một hàm chọn tên block bạn nhé. Hơn nữa vì mình xài cái block cũ của bạn nên bạn đã đặt điểm chèn của block là tâm của hình rồi. Với các bock khác bạn phải lưu ý cái điểm chèn này nhé.
(defun C:PTEST()
;;;--- Get the entity's name
(setq en(car(entsel "\n Select a PolyLine: ")))

;;;--- Get the DXF group codes of the entity
(setq enlist(entget en))

;;;--- Create an empty list to hold the points
(setq ptList(list))

;;;--- Get the sub-entities name
(setq en2(entnext en))

;;;--- Get the dxf group codes of the sub-entity
(setq enlist2(entget en2))

(setq ptList(append ptList (list (cdr(assoc 10 enlist2)))))

;;;--- While the polyline has a next vertice
(while (not (equal (cdr(assoc 0 (entget(entnext en2))))"SEQEND"))

;;;--- Get the next sub-entity
(setq en2(entnext en2))

;;;--- Get its dxf group codes
(setq enlist2(entget en2))

;;;--- Check to make sure it is not a spline reference point
(if(/= 16 (cdr(assoc 70 enlist2)))

;;;--- It is a vertex, save the point in a list [ptlist]
(setq ptList(append ptList (list (cdr(assoc 10 enlist2)))))

)
)
(setq olmode (getvar "pdmode"))
(setvar "pdmode" 3)
(setq n 0)
(while (nth (1+ n) ptlist)
(setq p1 (nth n ptlist)
p2 (nth (1+ n) ptlist)
x1 (car p1)
y1 (cadr p1)
x2 (car p2)
y2 (cadr p2)
k 1
goc (angle p1 p2)
a (getreal "\n Nhap khoang cach cho block thu nhat : ")
b (getreal "\n Nhap khoang cach cho block thu hai :")
)

(setq p3 (list (+ x1 (* a (cos goc))) (+ y1 (* a (sin goc)))))
(command "point" p3)
(command "insert" "b" "s" 1 p3 0 "")
(setq p4 (list (+ x1 (* (+ a b) (cos goc))) (+ y1 (* (+ a b) (sin goc)))))
(command "point" p4)
(command "insert" "b" "s" 1 p4 0 "")


(setq n (1+ n))
)
(setvar "pdmode" olmode)
(princ)
)

Lệnh chạy lisp là ptest, trong quá trình chạy lisp sẽ yêu cầu bạn nhập polyline, nhập các khoảng cách chèn block a, b và d.e như trên bản vẽ của bạn. (khoảng cách c là không cần thiết đâu bạn ạ, có a,b tất sẽ suy ra c mà)
Nếu polyline có nhiều đoạn thẳng hơn thì bạn sẽ phải nhập như vậy cho tới đoạn cuối cùng. Ở đoạn nào bạn không muốn chèn block vào thì bạn chỉ việc enter bỏ qua khi lisp hỏi khoảng cách chèn block.
Ở lisp này mình chỉ chèn block mà không xoay nó đi. nếu cần phải xoay, bạn bổ xung góc xoay vào cuối dòng lệnh insert là được
Cái lisp này mình dựa trên lisp lấy đỉnh của polyline của bác Hoành đã post trên diễn đàn rồi bổ sung phần lấy điểm chia theo khoảng cách cho trước và chèn block thôi. Bạn xem và cho mình biết ý kiến nếu như thấy chưa đạt theo yêu cầu của bạn.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 25 September 2009 - 02:01 PM

(defun C:PTEST()
;;;--- Get the entity's name
(setq en(car(entsel "\n Select a PolyLine: ")))

;;;--- Get the DXF group codes of the entity
(setq enlist(entget en))

;;;--- Create an empty list to hold the points
(setq ptList(list))

;;;--- Get the sub-entities name
(setq en2(entnext en))

;;;--- Get the dxf group codes of the sub-entity
(setq enlist2(entget en2))

(setq ptList(append ptList (list (cdr(assoc 10 enlist2)))))

;;;--- While the polyline has a next vertice
(while (not (equal (cdr(assoc 0 (entget(entnext en2))))"SEQEND"))

;;;--- Get the next sub-entity
(setq en2(entnext en2))

;;;--- Get its dxf group codes
(setq enlist2(entget en2))

;;;--- Check to make sure it is not a spline reference point
(if(/= 16 (cdr(assoc 70 enlist2)))

;;;--- It is a vertex, save the point in a list [ptlist]
(setq ptList(append ptList (list (cdr(assoc 10 enlist2)))))

)
)
(setq olmode (getvar "pdmode"))
(setvar "pdmode" 3)
(setq n 0)
(while (nth (1+ n) ptlist)
(setq p1 (nth n ptlist)
p2 (nth (1+ n) ptlist)
x1 (car p1)
y1 (cadr p1)
x2 (car p2)
y2 (cadr p2)
k 1
goc (angle p1 p2)
a (getreal "\n Nhap khoang cach cho block thu nhat : ")
b (getreal "\n Nhap khoang cach cho block thu hai :")
)

(setq p3 (list (+ x1 (* a (cos goc))) (+ y1 (* a (sin goc)))))
(command "point" p3)
(command "insert" "b" "s" 1 p3 0 "")
(setq p4 (list (+ x1 (* (+ a b) (cos goc))) (+ y1 (* (+ a b) (sin goc)))))
(command "point" p4)
(command "insert" "b" "s" 1 p4 0 "")


(setq n (1+ n))
)
(setvar "pdmode" olmode)
(princ)
)

Chào bạn phamthanhbinh.
Mình muốy nhờ bạn chỉnh giúp mình của Lisp trên,
Để đo khoảng cách và thể hiện điểm đo trên cạnh. Ví như ta có một hình tứ giác chử nhật có chiều dài và rộng, ta chọn hình đó để chia, chọn điểm bắt đầu chia và hướng chia, nhập chiều dài. Thì lisp thực hiện công ciệc xác định điểm đó và vẻ kí hiệu chấm tròn nhỏ, yêu cầu nhập số điểm đó, thể hiện lên số điểm chia đó và khoảng cách,
Lisp thực hiện chia khoảng cách, ghi kí hiệu điểm và chiều dài trên cạnh chia đó.
Rất mong được Bạn giúp
  • 0

#8 minhcv90

minhcv90

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 June 2014 - 11:39 AM

cho em xin cái lisp chia 1 polyline (gồm cả line +arc tạo thành) thành các đoạn có chiều dài bằng nhau được không ạ.thank 


  • 0

#9 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 11 June 2014 - 04:06 PM

cho em xin cái lisp chia 1 polyline (gồm cả line +arc tạo thành) thành các đoạn có chiều dài bằng nhau được không ạ.thank 

Hề hề hề,

Thử dùng lệnh divide hay lệnh measure coi sao hè. Lisp chửa chắc đã ngon hơn đâu.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.