Đến nội dung


Hình ảnh
- - - - -

Nhờ bác SSG sửa giùm hàm GetVert


  • Please log in to reply
1 reply to this topic

#1 elleHCSC

elleHCSC

    biết lệnh copy

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

Đã gửi 22 January 2008 - 03:38 PM

;;;-------------------------------------------------------------------------------
(defun getVert (e / i L cl) ;;;Return list of all vertex from pline e
(setq i 0 L nil)
(setq CL (ent_close e))
(if (= CL 1)
(setq k (fix (+ (vlax-curve-getEndParam e) 1)))
(setq k (fix (+ (vlax-curve-getEndParam e) 2)))
)
(repeat k
(setq L (append L (list (vlax-curve-getPointAtParam e i))))
(setq i (1+ i))
)
L
)
;;;-------------------------------------------------------------------------------
(defun ent_close (e / cl)
(vl-load-com)
(setq
sp (vlax-curve-getStartPoint e)
ep (vlax-curve-getEndPoint e)
x_sp (cadr sp) y_sp (car sp)
x_ep (cadr ep) y_ep (car ep)
)
(if (and (= x_sp x_ep) (= y_sp y_ep))
(setq cl 1) ;close
(setq cl 0)
)
)
;;;------------------------------------------------------------------------------------
(defun wtxtL (txt p / sty d h) ;;; Write txt on graphic screen, Left
(setq
sty (getvar "textstyle")
d (tblsearch "style" sty)
h1 (cdr (assoc 40 d))
h2 (cdr (assoc 42 d))
)
(if (> h1 0)
(command "text" p 0 txt)
(command "text" p h2 0 txt)
)
)
;;;-------------------------------------------------------------------------------
(defun getth( / d h) ;;; Return current text height
(setq
d (tblsearch "style" (getvar "textstyle"))
h (cdr (assoc 40 d))
)
(if (= h 0) (setq h (cdr (assoc 42 d))))
h
)
;;;-------------------------------------------------------------------------------
(defun C:DS (/ et pv pvL h oldos num) ;; Danh so thu tu dinh cho Pline
(prompt "\nDanh so thu tu cho dinh polyline...")
(setq e (entsel "\nHay chon duong polyline "))
(setq n (getint "\nDanh so bat dau tu <1>: "))
(if (not n) (setq n 1))
(setq ep (entget (car e)))
(if (/= (cdr (assoc 0 ep)) "LWPOLYLINE")
(progn (alert "Doi tuong phai la POLYLINE !!!") (quit))
); if
(if (= (cdr (assoc 0 ep)) "LWPOLYLINE")
(progn
(setq
et (car e)
pvL (getvert et)
h (getTh)
oldos (getvar "osmode")
)
(setvar "osmode" 0)
(setq i 0 in n)
(setq cl (ent_close et))
(if (= cl 1)
(setq j (1- (length pvL)))
(setq j (length pvL))
)
(command "undo" "begin")
(repeat j
(setq
pv (nth i pvL)
num (itoa in)
)
(wtxtL (strcat " " num) pv)
(setq i (1+ i))
(setq in (1+ in))
)
(command "undo" "end")
(initget "C K")
(setq ans (getkword "\nDao chieu danh so thu tu [Co/Khong] <K>: "))
(if (= ans "C")
(progn
(command "undo" "")
(setq pvL1 (reverse pvL))
(setq cl (ent_close et))
(if (= cl 1)
(setq i 0 in n)
(setq i 0 in (1- n))
)
(command "undo" "Begin")
(repeat j
(setq
pv (nth i pvL1)
num (itoa in)
)
(wtxtL (strcat " " num) pv)
(setq i (1+ i))
(setq in (1+ in))
)
(command "undo" "end"))
) ;if ans
(setvar "osmode" oldos)
) ; progn
) ; if LWPOLYLINE
(prompt "\nType U to Undo")
(princ)
)
;;;-------------------------------------------------------------------------------


Mục đích tôi sửa mấy cài hàm cũ này của bác SSG để đánh số thứ tự đỉnh vertex cho 1 PLine và đã ra được kết quả tạm thôi, tuy nhiên mục đích cuối cùng là khi CT chạy đối với 1 đối tượng là Close_pline (tôi quan niệm Pline_close là có X_start_point = X_end_point và Y_start_point = Y_end_point) thì số thứ tự đánh tôi đang cần là phải xuất phát từ đỉnh vertex có giá trị Y là lớn nhất.
Tôi định dùng hàm vl-sort để sort lại cái List L trong hàm Getvert của bác nhưng loay hoay mãi mà chưa đc nên pót lên nhờ bác chỉ giáo.
Thông cảm nha, tôi mới bập bẹ dùng Lisp từ khi tham gia CADVIET nên kỹ năng còn ít....
TKS !
  • 0
Share for all, all will share !

--------------------
HTTP://WWW.HCSC.VN
HTTP://WWW.HCSC.COM.VN

#2 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 23 January 2008 - 02:08 PM

Mục đích tôi sửa mấy cài hàm cũ này của bác SSG để đánh số thứ tự đỉnh vertex cho 1 PLine và đã ra được kết quả tạm thôi, tuy nhiên mục đích cuối cùng là khi CT chạy đối với 1 đối tượng là Close_pline (tôi quan niệm Pline_close là có X_start_point = X_end_point và Y_start_point = Y_end_point) thì số thứ tự đánh tôi đang cần là phải xuất phát từ đỉnh vertex có giá trị Y là lớn nhất.
Tôi định dùng hàm vl-sort để sort lại cái List L trong hàm Getvert của bác nhưng loay hoay mãi mà chưa đc nên pót lên nhờ bác chỉ giáo.
Thông cảm nha, tôi mới bập bẹ dùng Lisp từ khi tham gia CADVIET nên kỹ năng còn ít....
TKS !

Yêu cầu của bạn sẽ được giải quyết cùng với LandCadViet Utility:

http://www.cadviet.c...amp;#entry11943

Ngoài cái đó ra, nếu có hứng thú, mời bạn tham gia đóng góp ý kiến cho "dự án" này.
  • 0