Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đă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ị

dung12789    1

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
Doan Van Ha    2.676

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
dung12789    1

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
huyphan    71

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
duy782006    1.374

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
Doan Van Ha    2.676

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
dung12789    1

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
Doan Van Ha    2.676

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  

×