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

Bắt text vào polyline

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

Các bác viết giúp em một tiện ích thế này

 

em có 3 layer

 

layer1, layer2, va layer3

 

 

layer1 là các polyline trên bản vẽ

layer2 là các text đã được bắt nearlest vào các polyline và xoay theo hướng polyline

layer3 la cac text đã được bắt endpoint vào đầu polyline

 

1. chỉ bật layer1 va layer2. em muốn point vào chỗ layer2 chưa được bắt snap nearleat chính xác vào layer1

2. chỉ bật layer1 và layer3. em muốn point vào chỗ layer3 chưa được bắt snap endpoint vào layer1

 

em đang mầy mò về lisp. vộc trên cadviet 2 tuần rồi mà chưa ăn thua gì cả

mong các bác giúp em. em thấy bác hoành và bác ssg rất pro. nhờ cậy các bác.

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ác bác viết giúp em một tiện ích thế này

 

em có 3 layer

 

layer1, layer2, va layer3

layer1 là các polyline trên bản vẽ

layer2 là các text đã được bắt nearlest vào các polyline và xoay theo hướng polyline

layer3 la cac text đã được bắt endpoint vào đầu polyline

 

1. chỉ bật layer1 va layer2. em muốn point vào chỗ layer2 chưa được bắt snap nearleat chính xác vào layer1

2. chỉ bật layer1 và layer3. em muốn point vào chỗ layer3 chưa được bắt snap endpoint vào layer1

 

em đang mầy mò về lisp. vộc trên cadviet 2 tuần rồi mà chưa ăn thua gì cả

mong các bác giúp em. em thấy bác hoành và bác ssg rất pro. nhờ cậy các bác.

Bạn hãy post 1 file dwg lên diễn đàn.

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
Bạn hãy post 1 file dwg lên diễn đàn.

 

 

file cần check như thế này.

 

http://www.cadviet.com/upfiles/checksnap.dwg

cảm ơn bác Hoành đã reply.

Em muốn point vào các điểm mà

+layer1 chưa bắt snap đúng vào layer4

+layer3 chưa bắt snap vào layer2

 

Thanks bác.

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
file cần check như thế này.

 

http://www.cadviet.com/upfiles/checksnap.dwg

cảm ơn bác Hoành đã reply.

Em muốn point vào các điểm mà

+layer1 chưa bắt snap đúng vào layer4

+layer3 chưa bắt snap vào layer2

 

Thanks bác.

Chào bạn startwithlisp,

Bạn hãy đọc kỹ các bài ở đây:

http://www.cadviet.com/forum/index.php?sho...205&st=1860

Sau khi hiểu rõ, bạn có thể xài thử cái lisp của bác Tue_NV và cho biết rõ chỗ nào OK, chỗ nào chưa OK, post file kết quả sau khi chạy lisp lên mọi người sẽ chỉnh sửa giùm bạn.

Trong lisp của bác Tue_NV có thể sẽ chưa hoàn toàn như ý bạn do điểm đặt text có thể khác nhau. Đừng lo cứ chạy lisp đi bạn nhé. Cái lisp đó có nội dung gần với yêu cầu của bạn và việc chỉnh sửa nó theo ý bạn không quá khó. Miễn là bạn phải nói đúng cái chỗ cần sửa và cái bạn muốn thôi.

Chúc bạn vui.

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
Chào bạn startwithlisp,

Bạn hãy đọc kỹ các bài ở đây:

http://www.cadviet.com/forum/index.php?sho...205&st=1860

Sau khi hiểu rõ, bạn có thể xài thử cái lisp của bác Tue_NV và cho biết rõ chỗ nào OK, chỗ nào chưa OK, post file kết quả sau khi chạy lisp lên mọi người sẽ chỉnh sửa giùm bạn.

Trong lisp của bác Tue_NV có thể sẽ chưa hoàn toàn như ý bạn do điểm đặt text có thể khác nhau. Đừng lo cứ chạy lisp đi bạn nhé. Cái lisp đó có nội dung gần với yêu cầu của bạn và việc chỉnh sửa nó theo ý bạn không quá khó. Miễn là bạn phải nói đúng cái chỗ cần sửa và cái bạn muốn thôi.

Chúc bạn vui.

 

Thanks bạn phamthanhbinh

mình đã đọc phần chỉ dẫn, tuy nhiên mình muốn

đánh dấu point vào cả bản vẽ có được không?

mong được 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
Thanks bạn phamthanhbinh

mình đã đọc phần chỉ dẫn, tuy nhiên mình muốn

đánh dấu point vào cả bản vẽ có được không?

mong được giúp đỡ.

 

Mình có viết ct này cho yêu cầu của bạn, hy vọng sẹ chạy tốt. Tên lệnh chk.

Khi điểm chèn của text ko nẳm trên pline hoặc độ nghiêng text chênh với độ nghiêng pline quá 10 độ thì sẽ báo lỗi bằng poỉnt.

 

(vl-load-com)

(defun r2d(x)
 (if (< x 0) (setq x (+ (* 2 pi) x)))
 (setq x (fix (* x (/ 180 pi))))
 (if (> x 180) (setq x (- x 180)))
 x
)

(defun TxtEnd(vt vpl vtx / v1 p1 p2)
 (setq v1 (vlax-ename->vla-object vpl)
p1  (vlax-curve-getStartPoint v1)
p2  (vlax-curve-getEndPoint v1))

 (and (or (equal vt p1 0.0001) (equal vt p2 0.0001))
      (or (equal (r2d (angle p1 p2)) (+ (r2d (cdr (assoc 50 (entget vtx)))) 90) 10)
   (equal (r2d (angle p1 p2)) (- (r2d (cdr (assoc 50 (entget vtx)))) 90) 10)))
)


(defun TxtIn(p vpl vtx / v1 p1 n ps pe)
 (setq v1 (vlax-ename->vla-object vpl)
p1 (vlax-curve-getClosestPointTo v1 p)
n  (fix (vlax-curve-getParamAtPoint v1 p1))
ps (vlax-curve-getPointAtParam v1 n)
pe (vlax-curve-getPointAtParam v1 (1+ n)))
 (if (and ps pe)
   (and (equal (angle ps p) (angle p pe) 0.0001)
        (equal (r2d (angle ps pe)) (r2d (cdr (assoc 50 (entget vtx)))) 10))
   t)
)

(defun main(ss d / en el vt sst k v m)
 (while (and ss (> (sslength ss) 0))
   (setq en (ssname ss 0)
  el (entget en)
  vt (if (/= (cdr (assoc 72 el)) 0)
         (cdr (assoc 11 el))
         (cdr (assoc 10 el)))
  sst (ssget "c" (polar vt (* -0.25 pi) 0.1)
	         (polar vt (* 0.75 pi) 0.1))
  k 0)

   (while (and sst (> (sslength sst) 0))
     (setq v (ssname sst 0))
     (if (= (cdr (assoc 0 (entget v))) "LWPOLYLINE")
(setq k 1
      m (if (= 1 d)
	  (TxtIn vt v en)
	  (TxtEnd vt v en))))
     (ssdel v sst))

   (if (or (= k 0) (null m))
     (command "point" vt))

   (ssdel en ss)
 )
)

;;; Main function
(defun c:chk()
 (setvar "PDMODE" 34)
 (setvar "PDSIZE" 3)
 (setq os (getvar "OSMODE"))
 (setvar "OSMODE" 0)
 (command "ucs" "w")
 (command "zoom" "e")

;;;xet layer1, layer4  
 (setvar "CLAYER" "layer1")
 (command "-layer" "off" "*" "y" "on" "layer1" "on" "layer4" "")
 (setq ss (ssget "X" '((0 . "TEXT") (8 . "layer1"))))  
 (main ss 0)

;;; xet layer2,layer3
 (setvar "CLAYER" "layer3")
 (setvar "CECOLOR" "2")  
 (command "-layer" "off" "*" "y" "on" "layer3" "on" "layer2" "")

 (setq ss0 (ssget "X" '((0 . "LWPOLYLINE") (8 . "layer2"))))  
 (command "change" ss0 "" "p" "LT" "bylayer" "")

 (setq ss (ssget "X" '((0 . "TEXT") (8 . "layer3"))))  
 (main ss 1)
 (command "change" ss0 "" "p" "LT" "MUI_TEN_HUONG_LINE" "")  
 (command "-layer" "on" "*" "" )
 (setvar "OSMODE" os)
)


  • 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

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  

×