Đến nội dung


Hình ảnh
- - - - -

Bắt text vào polyline


  • Please log in to reply
6 replies to this topic

#1 startwithlisp

startwithlisp

    Chưa sử dụng CAD

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

Đã gửi 19 April 2009 - 03:41 PM

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.
  • 0

#2 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 19 April 2009 - 04:02 PM

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.
  • 0

#3 startwithlisp

startwithlisp

    Chưa sử dụng CAD

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

Đã gửi 19 April 2009 - 04:47 PM

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



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

http://www.cadviet.c...s/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.
  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 20 April 2009 - 10:22 AM

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

http://www.cadviet.c...s/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.c...o...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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 startwithlisp

startwithlisp

    Chưa sử dụng CAD

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

Đã gửi 21 April 2009 - 02:09 AM

Chào bạn startwithlisp,
Bạn hãy đọc kỹ các bài ở đây:
http://www.cadviet.c...o...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 đỡ.
  • 0

#6 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 22 April 2009 - 07:07 PM

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



  • 1

#7 startwithlisp

startwithlisp

    Chưa sử dụng CAD

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

Đã gửi 22 April 2009 - 07:58 PM

Thanks q288. Mình đang check thử. Có vấn đề gì mình sẽ email lại.
  • 0