Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#1861 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 17 April 2009 - 01:15 PM

Chào bạn SVBA1608,
Có đấy bạn, lệnh Erase trong Cad cho phép bạn chọn đối tượng bằng cửa sổ rồi Enter cái phạch là nó đi hết chả nể bố con thằng nào bạn ạ.
Bạn thử xem có đúng ý bạn không nhé.


Bác phamthanhbinh ới ời! Bác toàn có những câu trả lời khiến cho người ta không cười không được. Cảm ơn bác đã chỉ. Nhưng ý em muốn nói là vừa xoá vừa trim cơ. Tức là nếu có một đối tượng vừa nằm trong, vừa nằm ngoài vùng được chọn thì chỉ xoá phần nằm trong, còn phần đối tượng nằm ngoài vẫn giữ nguyên.
Thực ra em cũng tìm ra câu trả lời rồi. Em xoá thủ công 1 ít, còn lại dùng Mylisp của bác tnmtpc để dọn dẹp nốt.
"Autolisp thật là tuyệt vời!". Cảm ơn tnmtpc, cảm ơn diễn đàn Cadviet! :cheers:
  • 0
http://khuyen.space

#1862 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 17 April 2009 - 01:48 PM

Bác phamthanhbinh ới ời! Bác toàn có những câu trả lời khiến cho người ta không cười không được. Cảm ơn bác đã chỉ. Nhưng ý em muốn nói là vừa xoá vừa trim cơ. Tức là nếu có một đối tượng vừa nằm trong, vừa nằm ngoài vùng được chọn thì chỉ xoá phần nằm trong, còn phần đối tượng nằm ngoài vẫn giữ nguyên.
Thực ra em cũng tìm ra câu trả lời rồi. Em xoá thủ công 1 ít, còn lại dùng Mylisp của bác tnmtpc để dọn dẹp nốt.
"Autolisp thật là tuyệt vời!". Cảm ơn tnmtpc, cảm ơn diễn đàn Cadviet! :cheers:


Theo "đuôi học mót" theo bác Bình cứ gọi là cười mỏi ...răng

Bác xem bài viết này thử xem

Cắt cúp đối tượng,
http://www.cadviet.c...p?showtopic=615

Cắt cúp đối tượng, Theo một vùng
http://www.cadviet.c...up_doi_tuong/4/
  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#1863 thanchau_vn

thanchau_vn

    Chưa sử dụng CAD

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

Đã gửi 17 April 2009 - 02:05 PM

Mình đang cần lệnh tính chiều dài của 1 pline cộng thêm 1 số bất kỳ nữa ai có thể giúp mình viết thế nào với ! quan trọng lắm nếu không có thì ngồi cả tuần cũng ko xong! thank các bác trước nhé! diễn đàn nay hay quá!
  • 0

#1864 thanchau_vn

thanchau_vn

    Chưa sử dụng CAD

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

Đã gửi 17 April 2009 - 02:08 PM

Em cũng đang cần 1 lips tính diện tích giới hạn bởi các layer nữa ! các giúp em cả hai lips trên suất ra text luôn với nhé! chắc em phải học cách viết lips thôi!
  • 0

#1865 thanchau_vn

thanchau_vn

    Chưa sử dụng CAD

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

Đã gửi 17 April 2009 - 02:20 PM

(defun C:LL ( / sss s oslast he_so pt1 pt2 en elst)
(setq he_so (/ 1000.0 Ty_le))
(print)
(setq oslast (getvar "OSMODE"))
(setvar "osmode" 33)
(setq s 0.0
i 1)
(princ (strcat "* Doan" (rtos i 2 0) "\n"))
(setq pt1 (getpoint "From : "))
(if (= pt1 nil) (setq pt2 nil) (setq pt2 (getpoint "To : " PT1)))
(while (/= pt2 nil)
(while (/= pt2 nil)
(setq s (+ s (distance pt1 pt2)))
(setq pt1 pt2)
(setq pt2 (getpoint "To : " PT1))
)
(setq i (1+ i))
(princ (strcat "* Doan" (rtos i 2 0) "\n"))
(setq pt1 (getpoint "From : "))
(if (= pt1 nil) (setq pt2 nil) (setq pt2 (getpoint "To : " PT1)))
)
;
(setq sss (/ s he_so))
(print sss)
(setq en (car (entsel "Thay cho so : ")))
(setq elst (entget en))
(setq elst (subst (cons 1 (rtos sss 2 2)) (assoc 1 elst) elst))
(entmod elst)
(setvar "OSMODE" oslast)
)
  • 0

#1866 thanchau_vn

thanchau_vn

    Chưa sử dụng CAD

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

Đã gửi 17 April 2009 - 02:24 PM

EM ĐANG SỬA ĐỂ NÓ HIỂU LẤY CHIIỀU DÀI 1 ĐƯỜNG PLINE CỘNG VỚI SỐ BẤT KỲ NHƯNG LIPS CHIẺ HIÊU ĐƯỜNG THẲNG THÔI PHẢI SỬA SAO CÁC BẠN???????
  • 0

#1867 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 17 April 2009 - 02:33 PM

Mình đang cần lệnh tính chiều dài của 1 pline cộng thêm 1 số bất kỳ nữa ai có thể giúp mình viết thế nào với ! quan trọng lắm nếu không có thì ngồi cả tuần cũng ko xong! thank các bác trước nhé! diễn đàn nay hay quá!

Đây bạn :
;;;--------------------------------------------------------------------
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / ss L e so so1)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
)
(if (not so) (setq so 1000))

(setq so1 (getreal (strcat "\nNhap so can cong <" (rtos so) "> :")))

(if (not so1) (setq so1 so) (setq so so1))


(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(setq soo (+ so1 L))
(alert (strcat "Total length = " (rtos soo)))
)
;;;--------------------------------------------------------------------

Em cũng đang cần 1 lips tính diện tích giới hạn bởi các layer nữa ! các giúp em cả hai lips trên suất ra text luôn với nhé! chắc em phải học cách viết lips thôi!

Bạn nói rõ hơn ý của bạn nhé. Chưa hiểu ý. Hãy post file .dwg lên đây và nói rõ ý của bạn.
Mọi người sẽ giúp bạn
  • 1

#1868 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 17 April 2009 - 05:56 PM

Đây bạn :

;;;--------------------------------------------------------------------
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / ss L e so so1)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
)
(if (not so) (setq so 1000))

(setq so1 (getreal (strcat "\nNhap so can cong <" (rtos so) "> :")))

(if (not so1) (setq so1 so) (setq so so1))
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(setq soo (+ so1 L))
(alert (strcat "Total length = " (rtos soo)))
)
;;;--------------------------------------------------------------------

Bác Tue_NV hãy bổ xung Lisp trên để cho phép khỏi phải nhập (số vừa cộng thêm) nếu lặp lại cho các đối tượng khác. Thank you.
  • 0

#1869 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 April 2009 - 08:14 AM

Bác Tue_NV hãy bổ xung Lisp trên để cho phép khỏi phải nhập (số vừa cộng thêm) nếu lặp lại cho các đối tượng khác. Thank you.

Ý của bạn là sao? Chưa hiểu ý. Bạn hãy nói rõ ý của bạn nhé.
Trong Lisp đã bổ sung giá trị số cộng thêm (đặt trong dấu móc <>) Nếu chấp nhận giá trị cộng thêm trước đó thì user chỉ cần Nhấn Enter, còn user muốn nhập giá trị cộng thêm mới thì nhập vào và giá trị này lưu lại cho mỗi lần sử dụng về sau.
  • 0

#1870 ph168xd

ph168xd

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 779 Bài viết
Điểm đánh giá: 309 (khá)

Đã gửi 18 April 2009 - 11:32 AM

Nhiều bài viết qua nên cũng ko biết đã ai viết lish này chưa nữa.Mong các bác thông cảm nếu hỏi 2 lần
Mình đang cần lish chỉnh tỷ lệ của khung viewport.
VD.
Trong layout Khi muốn nhập tỷ lệ cho khung viewporrt thì thường mất công vào bảng
ctrl+1 để điều chỉnh tỷ lệ
Giờ mình cần lish ....Cần tỷ lệ của khung viewport là custom scale =3
thì nhập lệnh tắt-> chọn khung view -> ok
Lúc đó khung đã đc chọn sẽ có tỷ lệ phóng lên 3 lần
Anh em ai có mong giúp.thanks
  • 0

#1871 m.rduong

m.rduong

    biết zoom

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

Đã gửi 18 April 2009 - 11:43 AM

Hi all !
Mình đang cần lisp check snap cho text
Cụ thể như sau : + Text để ở chế độ Middle center bắt snap vào Line center
Nếu vị trí nào chưa snap lisp sẽ báo lỗi bằng Point
Ảnh minh hoạ :http://www.cadviet.com/upfiles/textsnap_1.jpg
File demo :http://www.cadviet.com/upfiles/textsnap_1.jpg

Hi all !
Mình đang cần lisp check snap cho text nho cac ban giup
Cụ thể như sau : + Text để ở chế độ Middle center bắt snap vào Line center
Nếu vị trí nào chưa snap lisp sẽ báo lỗi bằng Point
Ảnh minh hoạ :Hình đã gửi
File demo :http://www.cadviet.com/upfiles/textsnap_1.jpg
  • 0

#1872 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 April 2009 - 01:57 PM

Hi all !
Mình đang cần lisp check snap cho text nho cac ban giup
Cụ thể như sau : + Text để ở chế độ Middle center bắt snap vào Line center
Nếu vị trí nào chưa snap lisp sẽ báo lỗi bằng Point
Ảnh minh hoạ :Hình đã gửi
File demo :http://www.cadviet.com/upfiles/textsnap_1.jpg

Bạn dùng thử đoạn Code này xem sao nhé :

(defun c:btd()
(setvar "Pdmode" 2)
(setvar "Pdsize" 200)
(Command "undo" "BEgin")
(vl-load-com)
(setq curve (car(entsel "\n Chon duong :")))
(while (null curve) (setq curve (car(entsel "\n Chon lai duong :"))))
(prompt "\n Chon Text : ")
(setq ss (ssget '((0 . "TEXT"))))
(Command "justifytext" ss "" "MC")
(setq n (sslength ss)
i 0)

(while (<= i n)
(setq sn (ssname ss i))
(setq ent (entget sn))
(setq po1 (cdr(assoc 11 ent)))
(setq po2 (vlax-curve-getClosestPointTo curve po1))
(setq dis (distance po1 po2))
(if (/= dis 0) (Command "point" po1))
(setq i (1+ i))
)
(setvar "Pdmode" 0)
(Command "undo" "END")
(Princ)
)

Chúc thành công :cheers:
  • 2

#1873 m.rduong

m.rduong

    biết zoom

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

Đã gửi 18 April 2009 - 03:59 PM

Chào bạn Tue_NV

Mình test lisp ! khi chạy nó chỉ ra các điểm Middle Center chứ không tìm lỗi . Ý mình muốn là lisp chỉ bắt lỗi khi có text chưa snap vào line và tạo point ở những chỗ đó . Bạn xem lại giúp mình nhé !
(defun c:btd()
(setvar "Pdmode" 2)
(setvar "Pdsize" 200)
(Command "undo" "BEgin")
(vl-load-com)
(setq curve (car(entsel "\n Chon duong :")))
(while (null curve) (setq curve (car(entsel "\n Chon lai duong :"))))
(prompt "\n Chon Text : ")
(setq ss (ssget '((0 . "TEXT"))))
(Command "justifytext" ss "" "MC")
(setq n (sslength ss)
i 0)

(while (<= i n)
(setq sn (ssname ss i))
(setq ent (entget sn))
(setq po1 (cdr(assoc 11 ent)))
(setq po2 (vlax-curve-getClosestPointTo curve po1))
(setq dis (distance po1 po2))
(if (/= dis 0) (Command "point" po1))
(setq i (1+ i))
)
(setvar "Pdmode" 0)
(Command "undo" "END")
(Princ)
)
  • 0

#1874 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 April 2009 - 05:27 PM

Chào bạn Tue_NV

Mình test lisp ! khi chạy nó chỉ ra các điểm Middle Center chứ không tìm lỗi . Ý mình muốn là lisp chỉ bắt lỗi khi có text chưa snap vào line và tạo point ở những chỗ đó . Bạn xem lại giúp mình nhé !
(defun c:btd()
(setvar "Pdmode" 2)
(setvar "Pdsize" 200)
(Command "undo" "BEgin")
(vl-load-com)
(setq curve (car(entsel "\n Chon duong :")))
(while (null curve) (setq curve (car(entsel "\n Chon lai duong :"))))
(prompt "\n Chon Text : ")
(setq ss (ssget '((0 . "TEXT"))))
(Command "justifytext" ss "" "MC")
(setq n (sslength ss)
i 0)

(while (<= i n)
(setq sn (ssname ss i))
(setq ent (entget sn))
(setq po1 (cdr(assoc 11 ent)))
(setq po2 (vlax-curve-getClosestPointTo curve po1))
(setq dis (distance po1 po2))
(if (/= dis 0) (Command "point" po1))
(setq i (1+ i))
)
(setvar "Pdmode" 0)
(Command "undo" "END")
(Princ)
)

Chào bạn 'm.rduong' . Bạn hãy kiểm tra kỹ lại xem : Đoạn Lisp trên Tue_NV viết dựa trên nguyên tắc là :
Ta dựng :
1. Một curve : đó là 1 SPline, PLine, line, Arc..
2. Ta lấy 1 điểm của text : chính là điểm Middle Center (Gọi là điểm Po1)
3. Tưởng tượng từ Po1 ta dựng 1 đường vuông góc Po1Po2 với Curve. Với Po2 chính là chân đường vuông góc và Po2 thuộc curve
4. Đặt khoảng cách dis=Po1Po2.
Vậy thì Nếu dis=0 => Text với điểm Middle Center đã bắt dính vào Curve => Không vẽ point vào Middle Center
Vậy thì Nếu dis/=0 (hay >0) => Text với điểm Middle Center đã không bắt dính vào Curve => Vẽ point vào Middle Center
Lisp trên chạy OK. Nếu điểm Middle Center của Text không nằm trên Curve (dis>0) => Kiểm tra lỗi (Vẽ point)
Mong rằng bạn hiểu và check lại xem.
Bạn nhớ phải bắt cho trúng điểm Middle Center của Text vào Curve. Nếu có hở 1 xí xi (dis/0) thì CAD cũng gọi là hở và bắt lỗi bằng point ngay.
  • 1

#1875 m.rduong

m.rduong

    biết zoom

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

Đã gửi 18 April 2009 - 09:14 PM

Chào bạn 'm.rduong' . Bạn hãy kiểm tra kỹ lại xem : Đoạn Lisp trên Tue_NV viết dựa trên nguyên tắc là :
Ta dựng :
1. Một curve : đó là 1 SPline, PLine, line, Arc..
2. Ta lấy 1 điểm của text : chính là điểm Middle Center (Gọi là điểm Po1)
3. Tưởng tượng từ Po1 ta dựng 1 đường vuông góc Po1Po2 với Curve. Với Po2 chính là chân đường vuông góc và Po2 thuộc curve
4. Đặt khoảng cách dis=Po1Po2.
Vậy thì Nếu dis=0 => Text với điểm Middle Center đã bắt dính vào Curve => Không vẽ point vào Middle Center
Vậy thì Nếu dis/=0 (hay >0) => Text với điểm Middle Center đã không bắt dính vào Curve => Vẽ point vào Middle Center
Lisp trên chạy OK. Nếu điểm Middle Center của Text không nằm trên Curve (dis>0) => Kiểm tra lỗi (Vẽ point)
Mong rằng bạn hiểu và check lại xem.
Bạn nhớ phải bắt cho trúng điểm Middle Center của Text vào Curve. Nếu có hở 1 xí xi (dis/0) thì CAD cũng gọi là hở và bắt lỗi bằng point ngay.

Uh ! Mình không hiểu tại sao mà khi chạy xong sửa lại các point đó rồi chạy lại nó lại vẫn bắt point vào những điểm đó mặc dù mình đã cố gắng sửa thật chính xác rồi. Có một điều mình muốn hỏi bạn đó là tại sao khi bắt đầu gõ lệnh :
Lisp hỏi :chon duong mà mình không thề select được vào đó mà chỉ bao được các đối tượng là text có phải đó là lý do ?
Xem giùm mình nhé ! Cảm ơn bạn nhiều !
  • 0

#1876 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 April 2009 - 10:16 PM

Uh ! Mình không hiểu tại sao mà khi chạy xong sửa lại các point đó rồi chạy lại nó lại vẫn bắt point vào những điểm đó mặc dù mình đã cố gắng sửa thật chính xác rồi. Có một điều mình muốn hỏi bạn đó là tại sao khi bắt đầu gõ lệnh :
Lisp hỏi :chon duong mà mình không thề select được vào đó mà chỉ bao được các đối tượng là text có phải đó là lý do ?
Xem giùm mình nhé ! Cảm ơn bạn nhiều !

Cũng có thể do chế độ bắt điểm của CAD. Bạn phải dùng chế độ bắt điểm Insert bắt vào Middle Center của Text bát dính vào Curve (dùng chế độ bắt điểm Nearest).
Có lẽ mình đưa vào Lisp một khoảng hở cho phép của biến dis để CAD chấp nhận, không bắt lỗi bằng cách vẽ point vào điểm bắt dính Middle Center của Text trên Curve
Dòng này (if (/= dis 0) (Command "point" po1))
mình sửa lại như sau : (if (> dis 0.2) (Command "point" po1))
Giá trị 0.2mm tức là khoảng hở cho phép có thể chấp nhận được không bắt lỗi bằng cách vẽ point.
Code được sửa lại :
(defun c:btd()
(Command "undo" "BEgin")
(setvar "Pdmode" 2)
(setvar "Pdsize" 200)

(vl-load-com)
(setq curve (car(entsel "\n Chon duong :")))
(while (null curve) (setq curve (car(entsel "\n Chon lai duong :")))
)
(prompt "\n Chon Text : ")
(setq ss (ssget '((0 . "TEXT"))))
(sssetfirst ss ss)
(Command "justifytext" ss "" "MC")
(setq n (sslength ss)
i 0)

(while (<= i n)
(setq sn (ssname ss i))
(setq ent (entget sn))
(setq po1 (cdr(assoc 11 ent)))
(setq po2 (vlax-curve-getClosestPointTo curve po1))
(setq dis (distance po1 po2))
(if (> dis 0.2) (Command "point" po1))
(setq i (1+ i))
)
(setvar "Pdmode" 0)
(Command "undo" "END")
(Princ)
)

Lisp hỏi :chon duong mà mình không thề select được vào đó.
Mình sử dụng hàm entsel : Pick chuột chọn đối tượng. Trong Lisp mình đã đưa vào vòng lặp while, khi nào bạn pick trúng đối tượng Curve thì mới dừng lại. Pick chưa trúng đối tượng thì phải pick lại. Bạn đồng ý chứ .
Nguyên tắc đoạn Lisp trên :

1. Một curve : đó là 1 SPline, PLine, line, Arc..
2. Ta lấy 1 điểm của text : chính là điểm Middle Center (Gọi là điểm Po1)
3. Tưởng tượng từ Po1 ta dựng 1 đường vuông góc Po1Po2 với Curve. Với Po2 chính là chân đường vuông góc và Po2 thuộc curve
4. Đặt khoảng cách dis=Po1Po2.
Vậy thì Nếu dis<0.2 (sai số) => Xem Text với điểm Middle Center đã bắt dính vào Curve => Không vẽ point vào Middle Center
Vậy thì Nếu dis>0.2 (sai số) => Text với điểm Middle Center đã không bắt dính vào Curve => Vẽ point vào Middle Center
  • 1

#1877 m.rduong

m.rduong

    biết zoom

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

Đã gửi 18 April 2009 - 11:09 PM

Cũng có thể do chế độ bắt điểm của CAD. Bạn phải dùng chế độ bắt điểm Insert bắt vào Middle Center của Text bát dính vào Curve (dùng chế độ bắt điểm Nearest).
Có lẽ mình đưa vào Lisp một khoảng hở cho phép của biến dis để CAD chấp nhận, không bắt lỗi bằng cách vẽ point vào điểm bắt dính Middle Center của Text trên Curve
Dòng này (if (/= dis 0) (Command "point" po1))
mình sửa lại như sau : (if (> dis 0.2) (Command "point" po1))
Giá trị 0.2mm tức là khoảng hở cho phép có thể chấp nhận được không bắt lỗi bằng cách vẽ point.
Code được sửa lại :

(defun c:btd()
(Command "undo" "BEgin")
(setvar "Pdmode" 2)
(setvar "Pdsize" 200)

(vl-load-com)
(setq curve (car(entsel "\n Chon duong :")))
(while (null curve) (setq curve (car(entsel "\n Chon lai duong :")))
)
(prompt "\n Chon Text : ")
(setq ss (ssget '((0 . "TEXT"))))
(sssetfirst ss ss)
(Command "justifytext" ss "" "MC")
(setq n (sslength ss)
i 0)

(while (<= i n)
(setq sn (ssname ss i))
(setq ent (entget sn))
(setq po1 (cdr(assoc 11 ent)))
(setq po2 (vlax-curve-getClosestPointTo curve po1))
(setq dis (distance po1 po2))
(if (> dis 0.2) (Command "point" po1))
(setq i (1+ i))
)
(setvar "Pdmode" 0)
(Command "undo" "END")
(Princ)
)

Lisp hỏi :chon duong mà mình không thề select được vào đó.
Mình sử dụng hàm entsel : Pick chuột chọn đối tượng. Trong Lisp mình đã đưa vào vòng lặp while, khi nào bạn pick trúng đối tượng Curve thì mới dừng lại. Pick chưa trúng đối tượng thì phải pick lại. Bạn đồng ý chứ .
Nguyên tắc đoạn Lisp trên :

1. Một curve : đó là 1 SPline, PLine, line, Arc..
2. Ta lấy 1 điểm của text : chính là điểm Middle Center (Gọi là điểm Po1)
3. Tưởng tượng từ Po1 ta dựng 1 đường vuông góc Po1Po2 với Curve. Với Po2 chính là chân đường vuông góc và Po2 thuộc curve
4. Đặt khoảng cách dis=Po1Po2.
Vậy thì Nếu dis<0.2 (sai số) => Xem Text với điểm Middle Center đã bắt dính vào Curve => Không vẽ point vào Middle Center
Vậy thì Nếu dis>0.2 (sai số) => Text với điểm Middle Center đã không bắt dính vào Curve => Vẽ point vào Middle Center


Gửi bạn Tue_NV file này thử xem mình bắt snap đã đúng ý bạn chưa nhé. Bạn test giùm mình nhé ! Thank 's

http://www.cadviet.c...pfiles/test.dxf
  • 0

#1878 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 April 2009 - 08:57 AM

Gửi bạn Tue_NV file này thử xem mình bắt snap đã đúng ý bạn chưa nhé. Bạn test giùm mình nhé ! Thank 's

http://www.cadviet.c...pfiles/test.dxf

Chào bạn 'm.rduong'
Đoạn Lisp trên của mình chỉ chọn 1 đường curve mà thôi. và kiểm tra điểm bắt dính Middle Center của Text trên 1 Curve đó mà thôi. Như vậy bạn kiểm tra con số 10 trên curve đó mà thôi. Bạn lưu ý điều này nhé. Mình đã test kỹ lại rồi. Kích thuớc point size ở bản vẽ bạn hơi bị lớn, chỉnh lại ở dòng (setvar "Pdsize" 200)
thành (setvar "Pdsize" 10) là được
  • 0

#1879 m.rduong

m.rduong

    biết zoom

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

Đã gửi 19 April 2009 - 08:17 PM

Chào bạn 'm.rduong'
Đoạn Lisp trên của mình chỉ chọn 1 đường curve mà thôi. và kiểm tra điểm bắt dính Middle Center của Text trên 1 Curve đó mà thôi. Như vậy bạn kiểm tra con số 10 trên curve đó mà thôi. Bạn lưu ý điều này nhé. Mình đã test kỹ lại rồi. Kích thuớc point size ở bản vẽ bạn hơi bị lớn, chỉnh lại ở dòng (setvar "Pdsize" 200)
thành (setvar "Pdsize" 10) là được

Uh Nhưng bản vẽ của mình thì rất nhiều nhánh đi ra từ một Curve. Bạn có cách nào để lisp kiểm tra được cả bản vẽ không vậy .
  • 0

#1880 rainbow2009

rainbow2009

    Chưa sử dụng CAD

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

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

Cam on cac ban da cung cap nhung tin bo ich do. Nice day! :) :cheers:

pret auto


  • 0