Đến nội dung


Hình ảnh
- - - - -

[Hỏi] Tính độ dài cung tròn và Spline


  • Please log in to reply
5 replies to this topic

#1 avi612

avi612

    biết lệnh move

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

Đã gửi 28 September 2012 - 11:38 AM

Mình đang thử viết 1 lisp tính độ dài của các đối tượng riêng biệt như line, pline, arc, và spline.
Về phần các đối tượng là line và pline thì mình tính được rồi còn 2 đối tượng nữa là arc (cung tròn) và spline nữa nhưng mình ko biết cách tính và lập hàm như thế nào.
Ai biết giúp mình cấu trúc của hàm tính đó ntn nhá....Tks
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 28 September 2012 - 11:52 AM

Chiều dài của 1 curve bất kỳ: line, pline, arc, ellipse, circle, spline:
(setq LEN (vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename)))
  • 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.


#3 avi612

avi612

    biết lệnh move

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

Đã gửi 28 September 2012 - 12:20 PM

Chà! cũng khó đây...Tại mình chưa thạo lắm về thể loại "lisp vla..." này nên vận dụng cũng chưa tốt lắm.
Dưới đây là đoạn lisp mình đã thử làm..nhưng sai cấu trúc...pác xem lại giùm e nó sai ở đâu với...

Àh! cho mình hỏi thêm luôn là ngoài dùng những hàm lisp "vla.." này thì mình còn có thể làm cách khác được không, ví như những hàm đơn giãn hơn..


(defun c:ttt(/ #sset #Bacc i #tong #tong1 #ssname #ename #dau #cuoi #ent #dis #point)
(vl-load-com)
(setvar "CMDECHO" 0)
(command ".undo" "BE")
(command ".UCS" "W" ^C^C)
(Prompt "\n- Ch\U+1ECDn \U+0111o\U+1EA1n th\U+1EB3ng c\U+1EA7n tính t\U+1ED5ng: ")
(setq #sset (ssget ":N" '((0 . "*LINE,PLINE,ARC,ELLIPSE"))))
(setq #Bacc (getint "\n- Nh\U+1EADp s\U+1ED1 l\U+1EBB: "))
(if (null #Bacc) (setq #Bacc 2))
(setq i 0)
(setq #tong 0)
(while
(setq #ssname (ssname #sset i))
(setq #ename (cdr (assoc 0 (entget #ssname))))
(setq #dis (vlax-curve-getDistAtParam #ename (vlax-curve-getEndParam #ename)))
(setq #tong (+ #tong #dis))
(setq i (1+ i))
);WHILE
(setq #tong1 (rtos #tong 2 #Bacc))
(setq #point (getpoint "\n- Ch\U+1ECDn \U+0111i\U+1EC3m chèn k\U+1EBFt qu\U+1EA3: "))
(command ".text" "J" "MC" #point 1.7 0 #tong1)
(command ".undo" "E")
(princ)
(princ)
)

  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 28 September 2012 - 01:40 PM



(defun c:ttt(/ #sset #Bacc i #tong #tong1 #ssname #ename #dau #cuoi #ent #dis #point)
(vl-load-com) (setvar "CMDECHO" 0) (command ".undo" "BE")
; (command ".UCS" "W" ^C^C) ;sai
(command ".UCS" "W"
(Prompt "\n- Ch\U+1ECDn \U+0111o\U+1EA1n th\U+1EB3ng c\U+1EA7n tính t\U+1ED5ng: ")
(setq #sset (ssget ":N" '((0 . "*LINE,PLINE,ARC,ELLIPSE")))) ;thua PLINE
(setq #Bacc (getint "\n- Nh\U+1EADp s\U+1ED1 l\U+1EBB: "))
(if (null #Bacc) (setq #Bacc 2))
(setq i 0)
(setq #tong 0)
(while
; (setq #ssname (ssname #sset i))
(setq #ename (ssname #sset i))
; (setq #ename (cdr (assoc 0 (entget #ssname)))) ;khong phai ename
(setq #dis (vlax-curve-getDistAtParam #ename (vlax-curve-getEndParam #ename)))
(setq #tong (+ #tong #dis))
(setq i (1+ i)) );WHILE
(setq #tong1 (rtos #tong 2 #Bacc))
(setq #point (getpoint "\n- Ch\U+1ECDn \U+0111i\U+1EC3m chèn k\U+1EBFt qu\U+1EA3: "))
(command ".text" "J" "MC" #point 1.7 0 #tong1)
(command ".undo" "E")
(princ)
(princ)
)

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


#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 28 September 2012 - 06:59 PM

Vla trong trường hợp này đơn giản nhất bạn ạ. Nếu bạn muốn tính cung tròn thì phải sử dụng các công thức tính hình học + lượng giác, spline thì tích phân v..v.. Sẽ khó hơn nhiều :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 avi612

avi612

    biết lệnh move

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

Đã gửi 28 September 2012 - 09:57 PM

Uh, mình cũng đã thử dùng công thức tính hình học thử thì nó ra một đống lằng nhằng....nhìn ghê quá thôi thì cứ dùng cái vla này đi đã...cũng ko khó vận dụng mấy...
  • 0