Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 hieuhx68

hieuhx68

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 08 June 2014 - 06:05 PM

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.


  • 0

#2 hieuhx68

hieuhx68

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 June 2014 - 08:07 AM

Nhiều lượt view mà không ai giúp em ạ.


  • 0

#3 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 09 June 2014 - 08:50 AM

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?


  • 1

#4 hieuhx68

hieuhx68

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 June 2014 - 08:54 AM

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 đỡ.


  • 0

#5 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 09 June 2014 - 09:41 AM

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)
)

  • 1

#6 hieuhx68

hieuhx68

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 June 2014 - 09:55 AM

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


  • 0

#7 hieuhx68

hieuhx68

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 June 2014 - 10:03 AM

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


  • 0

#8 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 09 June 2014 - 10:35 AM

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)
)

  • 1

#9 hieuhx68

hieuhx68

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 June 2014 - 10:37 AM

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.

 



  • 0

#10 hieuhx68

hieuhx68

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 09 June 2014 - 10:43 AM

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.


  • 0