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

[yêu cầu] Lips cắt nhanh hàng đường thẳng

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

Em có ý tưởng như vậy nhưng chưa tìm được lips nào cả. Mong các bác giúp em. Bây giờ em có rất nhiều đường line hoặc pl dài ngắn khác nhau và nó có góc nghiêng khác nhau, em muốn mọi người giúp em viết 1 lips có thể chọn và đưa tất cả các đường l hay pl này và nhập cho nó 1 giá trị và tất cả l hay pl sẽ về cùng một chiều dài cố định (1 đầu l hay pl sẽ cố định) . Thanks các bác nhiều ạ.

 

b1. chọn tất cả l hay pl

b2. nhập chiều dài mong muốn

b3. tất cả line và pl  dài ngắn khác nhau sẽ về cùng chiều dài (bước này chính là kết hợp giữa thêm và bớt chiều dài)

 

Em chân thành cảm ơn tất cả mọi người.

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

Khi đổi chiều dài line hay pline thì vị trí đầu cuối phải đổi, bạn muốn đổi vị trí cả hai đầu hay chỉ một đầu?

  • Vote tăng 1

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

Khi đổi chiều dài line hay pline thì vị trí đầu cuối phải đổi, bạn muốn đổi vị trí cả hai đầu hay chỉ một đầu?

Em chỉ cần thay đổi vị trí một đầu thôi ạ, 1 đầu cố định. Rất mong bác và mọi người giúp đỡ.

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

Vậy dùng thử cái này.

 

(defun C:tmp(/ lu1 ss ph os loai tt10 tt11)
   (vl-load-com)
   (command "undo" "be")
   (if (or (not lu) (/= (type lu) 'REAL)) (setq lu 1))
   (prompt "\nChon Line/PolyLine: ")
   (setq ss (ssget '((0 . "*LINE")))
lu1 (getreal (strcat "\nChieu dai moi <" (rtos lu) "> :"))
ph (getpoint "Phia se di chuyen:")
os (getvar 'osmode))
   (setvar 'osmode 0)
   (if lu1 (setq lu lu1))
  
   (foreach v (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (setq loai (cdr (assoc 0 (entget v))))
     (if (or (= loai "LINE") (vl-string-search "POLYLINE" loai))
       (progn
 (setq obj (vlax-ename->vla-object v)
tt10 (vlax-curve-getStartPoint obj)
tt11 (vlax-curve-getEndPoint obj))
 (if (< (distance ph tt10) (distance ph tt11))
   (setq dc tt10)
   (setq dc tt11))
 (command "lengthen" "Total" lu (list v dc) "")) 
     )
   )
   (command "undo" "e")
   (setvar 'osmode os)
   (princ)
)
  • Vote tăng 1

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

 

Vậy dùng thử cái này.

 

(defun C:tmp(/ lu1 ss ph os loai tt10 tt11)
   (vl-load-com)
   (command "undo" "be")
   (if (or (not lu) (/= (type lu) 'REAL)) (setq lu 1))
   (prompt "\nChon Line/PolyLine: ")
   (setq ss (ssget '((0 . "*LINE")))
lu1 (getreal (strcat "\nChieu dai moi <" (rtos lu) "> :"))
ph (getpoint "Phia se di chuyen:")
os (getvar 'osmode))
   (setvar 'osmode 0)
   (if lu1 (setq lu lu1))
  
   (foreach v (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (setq loai (cdr (assoc 0 (entget v))))
     (if (or (= loai "LINE") (vl-string-search "POLYLINE" loai))
       (progn
 (setq obj (vlax-ename->vla-object v)
tt10 (vlax-curve-getStartPoint obj)
tt11 (vlax-curve-getEndPoint obj))
 (if (< (distance ph tt10) (distance ph tt11))
   (setq dc tt10)
   (setq dc tt11))
 (command "lengthen" "Total" lu (list v dc) "")) 
     )
   )
   (command "undo" "e")
   (setvar 'osmode os)
   (princ)
)

Quá tuyệt vời bác ạ. Hơn cả sự mong đợi. Em cảm ơn bác nhiều.

PS: em thấy đoạn code  " phía sẽ di chuyển" hơi khó hiểu em tự sửa lại thành "pick vào phần muốn cắt" sẽ dễ hiểu hơn. Bác tuyệt vời quá.

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

 

Vậy dùng thử cái này.

 


Em tham lam nhờ bác giúp luôn em vụ này với ạ.

 

http://www.cadviet.com/forum/topic/31600-ve-vuong-goc-voi-1-pline-bat-ki/

 

lips của bác Gia_Bach

 

(defun c:Vg (/ curve pt ang vs) (if (and (setq curve (car (entsel "\nChon Curve : "))) (setq pt (getpoint "\n Chon diem tren Curve : "))) (progn (setq VS (* 0.1 (getvar "Viewsize"))) (setq pt (vlax-curve-getClosestPointTo curve (trans pt 1 0)) ang (angle '(0 0) (Vlax-curve-getfirstderiv curve (vlax-curve-getParamAtPoint curve pt))) ) (entmake (list '(0 . "LINE")(cons 10 pt)(cons 11 (polar pt (+ ang (/ pi 2) ) vs))(cons 62 3) )) (entmake (list '(0 . "LINE")(cons 10 pt)(cons 11 (polar pt (- ang (/ pi 2) ) vs))(cons 62 4) )) )) (princ) )

 

Xin lỗi mọi người em lại đào mộ topic này lên. Nhưng thực tế líp trên của bác Gia_bach quá hay, tiện lợi. Em mong bác bổ sung thêm 1 ứng dụng nữa thì quá tuyệt ạ, bác cho chọn thêm chiều dài của đuờng vuông góc cần vẽ, còn nó nằm về cả 2 bên cũng không sao chỉ cần del nó đi cũng ko vấn đề gì. Em cảm ơn mọi người

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

Của bạn đây.

 

(defun c:Vg (/ curve pt dai ang)
  (if (setq curve (car (entsel "\nChon Curve : "))
   pt (getpoint "\nChon diem tren Curve : ")
   dai (getreal "\nChieu dai line: ")) 
 
    (progn (setq pt  (vlax-curve-getClosestPointTo curve (trans pt 1 0))
ang (angle '(0 0) (Vlax-curve-getfirstderiv curve (vlax-curve-getParamAtPoint curve pt))))
  (entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (polar pt (+ ang (/ pi 2)) dai))  (cons 62 3)))
  (entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (polar pt (- ang (/ pi 2)) dai))  (cons 62 4)))
    )
  )
  (princ)
)
  • Vote tăng 1

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

Của bạn đây.

 

(defun c:Vg (/ curve pt dai ang)
  (if (setq curve (car (entsel "\nChon Curve : "))
   pt (getpoint "\nChon diem tren Curve : ")
   dai (getreal "\nChieu dai line: ")) 
 
    (progn (setq pt  (vlax-curve-getClosestPointTo curve (trans pt 1 0))
ang (angle '(0 0) (Vlax-curve-getfirstderiv curve (vlax-curve-getParamAtPoint curve pt))))
  (entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (polar pt (+ ang (/ pi 2)) dai))  (cons 62 3)))
  (entmake (list '(0 . "LINE") (cons 10 pt) (cons 11 (polar pt (- ang (/ pi 2)) dai))  (cons 62 4)))
    )
  )
  (princ)
)

Em Không biết nói j để cảm ơn bác cho hết lời nữa. Quá tuyệt bác ạ. Cảm ơn bác thật nhiều. Chúc bác sức khỏe và thành công.

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  

×