Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đă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ị

elleHCSC    98

;;;-------------------------------------------------------------------------------
(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
ssg    1.088
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  

×