Đến nội dung


Hình ảnh
- - - - -

Làm sao để tạo Spline đi qua n điểm bằng hàm entmake?


  • Please log in to reply
4 replies to this topic

#1 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 03 December 2010 - 09:16 AM

Tôi muốn tạo 1 Spline đi qua n điểm Pi(xi,yi) bằng hàm entmake, nhưng không biết cách lấy mã DXF nào để đưa vào trong hàm (việc dùng lệnh command Spline để vẽ đường cong đi qua n điểm thì đã biết). Nhờ mọi người giúp đỡ.
  • 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.


#2 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 03 December 2010 - 12:19 PM

Tôi muốn tạo 1 Spline đi qua n điểm Pi(xi,yi) bằng hàm entmake, nhưng không biết cách lấy mã DXF nào để đưa vào trong hàm (việc dùng lệnh command Spline để vẽ đường cong đi qua n điểm thì đã biết). Nhờ mọi người giúp đỡ.

Với mã DXF Việc đấy rất khó thực hiện bạn à vì toạ độ mỗi điểm nhập của bạn cad đã tự động chuyển sang thành toạ độ đỉnh của điểm cong không theo toạ độ có sẵn của bạn, vì vậy bạn phải nghiên cứu công thức chuyển đổi đỉnh của SPLINE trước rồi mới dùng lệnh entmake được. Chúc bạn may mắn.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#3 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 03 December 2010 - 12:27 PM

Đây là ví dụ cho bạn nè
(defun c:thu ()
(setq pt1 (getpoint "\n nhap diem: "))
(setq pt2 (getpoint "\n nhap diem: "))
(setq pt3 (getpoint "\n nhap diem: "))
(entmake(list(cons 0 "SPLINE")(cons 100 "AcDbEntity")(cons 8 "0")(cons 100 "AcDbSpline") (cons 70 24) (cons 71 3) (cons 72 8) (cons 73 4) (cons 74 2)(cons 11 pt1)(cons 11 pt2)(cons 11 pt3)))
)
Không biết kết quả như ý không bạn thử xem nếu được thì phát triển lên theo ý bạn nhé. Chúc bạn may mắn
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#4 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 03 December 2010 - 02:06 PM

Đây là ví dụ cho bạn nè

(defun c:thu ()
(setq pt1 (getpoint "\n nhap diem: "))
(setq pt2 (getpoint "\n nhap diem: "))
(setq pt3 (getpoint "\n nhap diem: "))
(entmake(list(cons 0 "SPLINE")(cons 100 "AcDbEntity")(cons 8 "0")(cons 100 "AcDbSpline") (cons 70 24) (cons 71 3) (cons 72 8) (cons 73 4) (cons 74 2)(cons 11 pt1)(cons 11 pt2)(cons 11 pt3)))
)
Không biết kết quả như ý không bạn thử xem nếu được thì phát triển lên theo ý bạn nhé. Chúc bạn may mắn

Nói thế này thì không ai hiểu đuợc.
các đường Spline là loại đuờng đặc biệt đuợc biểu diễn bởi các hàm số toán học, mã 71 quy định bậc của hàm số dùng để vẽ.
Các đường Spline được vẽ theo cách thông thường bằng hàm command được biểu diễn bởi 1 hàm số bậc 3.
vẽ theo cách này thông thường ta nhận được 2 dạng đường Spline là spline đóng hoặc spline mở.
mã 70 quy định điều này.
1. đường spline đóng
2. đường spline tuần hoàn
mặc dù 2 giá trị trên là độc lập để quy định thuộc tính của spline nhưng theo cách vẽ thông thường thì ta luôn nhận được cả 2 giá trị trên khi vẽ spline đóng hoặc không nhận đc giá trị nào khi spline mở.
4. đường spline hữu tỷ
8. đường spline phẳng
16. đường spline tuyến tính
Vậy muốn vẽ spline phẳng và đóng bạn phải đưa vào giá trị là 11 (= 1+2+8) cho mã 70
Số đỉnh của Spline do mã 74 quy định. mã 73 hình như tuân theo mã 74 (cái này mình không chắc lắm. kệ nó, mình để mặc đinh)
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#5 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 03 December 2010 - 02:19 PM

Với mã DXF Việc đấy rất khó thực hiện bạn à vì toạ độ mỗi điểm nhập của bạn cad đã tự động chuyển sang thành toạ độ đỉnh của điểm cong không theo toạ độ có sẵn của bạn, vì vậy bạn phải nghiên cứu công thức chuyển đổi đỉnh của SPLINE trước rồi mới dùng lệnh entmake được. Chúc bạn may mắn.

Trước hết, cám ơn bạn. Tuy nhiên, cách làm theo file của bạn nếu các danh sách con đều viết trong cùng 1 hàm entmake thì tốt, chứ nếu tách ra từng danh sách hàm entmake thì không được. Trong khi nếu viết đúng mã DXF thì có thể được. Ví dụ hàm AA và BB dưới đây chạy tốt nhưng CC thì... bó tay.
;---------- ;Ham nay chay tot
(defun C:AA()
(entmake (list (cons 0 "POLYLINE")))
(setq a (+ 1 1))
(entmake (list (cons 0 "VERTEX") '(10 0.0 100.0 0.0)))
(entmake (list (cons 0 "VERTEX") '(10 100.0 150.0 0.0)))
(entmake (list (cons 0 "SEQEND"))))
;---------- ;Ham nay chay tot
(defun C:BB()
(entmake (list '(0 . "SPLINE") '(100 . "AcDbEntity") '(100 . "AcDbSpline") '(71 . 3)
'(11 0.0 100.0 0.0) '(11 100.0 150.0 0.0) '(11 300.0 100.0 0.0))))
;---------- ;Ham nay botay.com
(defun C:CC()
(entmake (list '(0 . "SPLINE")))
(setq b (+ 1 1))
(entmake (list '(11 0.0 100.0 0.0)))
(entmake (list '(11 100.0 150.0 0.0)))
(entmake (list '(11 300.0 100.0 0.0)))
(entmake (list '(100 . "AcDbEntity")))
(entmake (list '(100 . "AcDbSpline")))
(entmake (list '(71 . 3))))
;----------
  • 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.