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

[help] vẽ line có đoạn cong để vòng qua line khác

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

các bác cadviet có cách nào để vẽ nhanh đối tượng như file em đính kèm đây không. em làm thu công bằng cách vẽ line -> vẽ arc -> trim ->pe chúng lại với nhau. thành ra lâu quá.

mong các cao thủ chỉ giáo! thankssss!

drawing.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

Bạn nên vẽ bằng Pline. Chú ý mấy từ tô đậm.

Trích dẫn:

Command: pl

PLINE

Specify start point: pick điểm

Current line-width is 0.0000

Specify next point or [Arc/Halfwidth/Length/Undo/Width]: pick điểm

Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]: a

Specify endpoint of arc or

[Angle/CEnter/CLose/Direction/Halfwidth/Line/Radius/Second pt/Undo/Width]: ce

Specify center point of arc: _per to (pick chọn osnap vuông góc)

Specify endpoint of arc or [Angle/Length]: pick điểm vuông góc với đường thẳng

Specify endpoint of arc or

[Angle/CEnter/CLose/Direction/Halfwidth/Line/Radius/Second pt/Undo/Width]: pick điểm

Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]: pick điểm

Tiếp tục...

  • 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 nên vẽ bằng Pline. Chú ý mấy từ tô đậm.

Trích dẫn:

Command: pl

PLINE

Specify start point: pick điểm

Current line-width is 0.0000

Specify next point or [Arc/Halfwidth/Length/Undo/Width]: pick điểm

Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]: a

Specify endpoint of arc or

[Angle/CEnter/CLose/Direction/Halfwidth/Line/Radius/Second pt/Undo/Width]: ce

Specify center point of arc: _per to (pick chọn osnap vuông góc)

Specify endpoint of arc or [Angle/Length]: pick điểm vuông góc với đường thẳng

Specify endpoint of arc or

[Angle/CEnter/CLose/Direction/Halfwidth/Line/Radius/Second pt/Undo/Width]: pick điểm

Specify next point or [Arc/Close/Halfwidth/Length/Undo/Width]: pick điểm

Tiếp tục...

THANKS Bác Hà, cách của bác em làm ok rồi nhưng các arc tạo thành lại không đều nhau, cái to cái nhỏ.hehe hay tại em khong biết làm 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

các bác cadviet có cách nào để vẽ nhanh đối tượng như file em đính kèm đây không. em làm thu công bằng cách vẽ line -> vẽ arc -> trim ->pe chúng lại với nhau. thành ra lâu quá.

mong các cao thủ chỉ giáo! thankssss!

drawing.jpg

 

Cách khác: Vẽ bình thường line và arc nối nhau, sau đó lấy Lisp chuyển Line thành pline để liên kết các arc, line đó lại.

Tìm kiếm Lisp "chuyển Line thành pline" có trên 4rum.

Chúc bạn thành cô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ó anh chị nào có cách khác không nhỉ?

Dùng lisp đi. Lệnh là LV đối tượng tạo ra là 1 lô xích xông line và arc. (Sẽ không chỉnh thành pline đâu nhé đừng yêu cầu thêm).

*Lưu ý: Bán kính của cung tròn mình đang cho là 100 bạn nhu cầu khác thì sửa số 100 trong dòng

(setq rb 100) thành số khác nhé

À các bác rành lisp ngó giúp em sao đã cho undo end và begin nhưng ko undo được 1 phát nhỉ. Cám ơn!



(defun C:LV (/ rb a b c gocab gocbc gocbt bt bs bg)
(command "undo" "be")
(setq a (getpoint "\nChon diem dau tien: "))
(setq b (getpoint a"\nChon diem tiep theo: "))
(setq rb 100)
(while
(vegiua)
)
(command "undo" "end")
(Princ))
(defun vegiua ()
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command ".line" a b "")
(setvar "osmode"luubatdiem)
(setq c (getpoint b"\nChon diem tiep theo: "))
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq gocab (angle a B))
(setq daiab (distance a B))
(setq bt (polar a gocab (- daiab rb)))
(setq gocbc (angle b c))
(setq daibc (distance b c))
(setq bs (polar b gocbc rb))
(setq gocbt (angle bt bs))
(setq bg (polar bt (+ gocbt (/ pi 2)) rb))
(command ".erase" "last" "")
(command ".line" a bt "")
(command ".arc" bt bg bs)
(setq a bs)
(setq b c)
(setvar "osmode"luubatdiem)
(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

Hàm while của bác không có đặt điều kiện, nên nó cứ lặp cho đến cả khi bác enter. Mà khi đã enter thì bị lỗi => không undo 1 phát được.

Trong trường hợp bị lỗi, muốn u 1 phát thì phải thêm bước: undo => end, sau đó mới u được.

Tạm sửa theo code của bác thì như vầy chắc ổn.

(defun C:LV (/ rb a b c gocab gocbc gocbt bt bs bg)
(command "undo" "be")
(setq a (getpoint "\nChon diem dau tien: "))
(setq rb 10 c T)
(while (and c (setq b (getpoint a"\nChon diem tiep theo 1: ")))
 (vegiua))
(command "undo" "end")
(Princ))
(defun vegiua ()
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command ".line" a b "")
(setvar "osmode"luubatdiem)
(if (setq c (getpoint b"\nChon diem tiep theo 2: "))
(progn
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq gocab (angle a B))
(setq daiab (distance a B))
(setq bt (polar a gocab (- daiab rb)))
(setq gocbc (angle b c))
(setq daibc (distance b c))
(setq bs (polar b gocbc rb))
(setq gocbt (angle bt bs))
(setq bg (polar bt (+ gocbt (/ pi 2)) rb))
(command ".erase" "last" "")
(command ".line" a bt "")
(command ".arc" bt bg bs)
(setq a bs)
(setq b c)))
(setvar "osmode"luubatdiem)
(Princ))

  • Vote tăng 2

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 while của bác không có đặt điều kiện, nên nó cứ lặp cho đến cả khi bác enter. Mà khi đã enter thì bị lỗi => không undo 1 phát được.

Trong trường hợp bị lỗi, muốn u 1 phát thì phải thêm bước: undo => end, sau đó mới u được.

Tạm sửa theo code của bác thì như vầy chắc ổn.

(defun C:LV (/ rb a b c gocab gocbc gocbt bt bs bg)
(command "undo" "be")
(setq a (getpoint "\nChon diem dau tien: "))
(setq rb 10 c T)
(while (and c (setq b (getpoint a"\nChon diem tiep theo 1: ")))
 (vegiua))
(command "undo" "end")
(Princ))
(defun vegiua ()
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command ".line" a b "")
(setvar "osmode"luubatdiem)
(if (setq c (getpoint b"\nChon diem tiep theo 2: "))
(progn
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq gocab (angle a B))
(setq daiab (distance a B))
(setq bt (polar a gocab (- daiab rb)))
(setq gocbc (angle b c))
(setq daibc (distance b c))
(setq bs (polar b gocbc rb))
(setq gocbt (angle bt bs))
(setq bg (polar bt (+ gocbt (/ pi 2)) rb))
(command ".erase" "last" "")
(command ".line" a bt "")
(command ".arc" bt bg bs)
(setq a bs)
(setq b c)))
(setvar "osmode"luubatdiem)
(Princ))

cái lisp của bác Hà đúng là chuẩn không cần chỉnh. thanks các bác 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

cái lisp của bác Hà đúng là chuẩn không cần chỉnh. thanks các bác nhiều

Lisp này của bác Duy782006, không phải của tôi. Tôi chỉ thêm 1 chút mắm muối, còn 99,99% là công sức của bác ấy. Bạn hãy mau cám ơn bác ấy đ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

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  

×