Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
elleHCSC

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

Các bài được khuyến nghị

;;;-------------------------------------------------------------------------------
(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 !

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
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.com/forum/index.php?sho...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.

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  

×