Đến nội dung


Hình ảnh

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


  • Please log in to reply
8 replies to this topic

#1 dung12789

dung12789

    biết vẽ ellipse

  • Members
  • PipPip
  • 54 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 28 May 2012 - 02:52 PM

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!
Hình đã gửi
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 28 May 2012 - 02:59 PM

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...
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 dung12789

dung12789

    biết vẽ ellipse

  • Members
  • PipPip
  • 54 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 28 May 2012 - 03:47 PM

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ỉ!
  • 0

#4 dung12789

dung12789

    biết vẽ ellipse

  • Members
  • PipPip
  • 54 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 29 May 2012 - 03:21 PM

có anh chị nào có cách khác không nhỉ?
  • 0

#5 huyphan

huyphan

    biết dimbaseline

  • CADViet Team
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 71 (tàm tạm)

Đã gửi 29 May 2012 - 04:02 PM

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!
Hình đã gửi


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!
  • 0

#6 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1359 (rất tốt)

Đã gửi 30 May 2012 - 08:08 AM

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))

  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 30 May 2012 - 08:30 AM

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))

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#8 dung12789

dung12789

    biết vẽ ellipse

  • Members
  • PipPip
  • 54 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 30 May 2012 - 02:51 PM

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
  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 30 May 2012 - 11:57 PM

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.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.