Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
nguyenngoc02n

Lisp Viết Text/mtext Trên Pline

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

Gửi các bạn chuyên về lisp.

Mình đang mò mẫm viết một lisp với nội dung là sau khi vẽ line hoặc pline chạy lisp --> Đưa text/ Mtext số liệu (Chiều dài pline/line) trên mỗi line/pline

Anh em tư vấn hoặc viết code hộ mình với nhé.

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 khai triển dựa vào lệnh tính chiều dài của từng line, pline line. Viết text chiều dài ra đầu của đoạn pLine đó. : )

  • 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

Bạn khai triển dựa vào lệnh tính chiều dài của từng line, pline line. Viết text chiều dài ra đầu của đoạn pLine đó. : )

Lisp để viết text ra đầu đoạn pline bạn có không? Thây vì viết đầu đoạn mình viết giống như một text đề lên ngay tâm của line hay pline sẽ thể hiện rỏ ràng hơn.

List để tính tổng chiều dài mình đã có rồi.

Chúc bạn một ngày vui vẽ

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

Mình đang ko online bằng máy tính:

Nên trợ giúp bạn thuật toán theo ý tưởng của mình thôi. <Các anh chị có kinh nghiệm hơn sẽ có thuật toán hay hơn >

 

- dùng hàm ( vlax-curve-getpointatparam Pol 0) . Giá trị trả về toạ độ point đầu đoạn pline.

- code viết text chắc bạn viết dc rồi :). Nếu ko rõ bạn xem mấy lisp viết text tính tổng chiều dài ấy.

Dùng vòng lặp repeat nữa là ổ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

[Thuật toán]
   BƯỚC 1: GÕ LỆNH CHỌN TẬP HỢP CÁC ĐỐI TƯỢNG (có thể kết hợp chỉ chọn PLINE,LINE) dùng qua hàm

(ssget '(( 0 . "LINE,LWPolyline")))

   BƯỚC 2: LỌC QUA TOÀN BỘ ĐỐI TƯỢNG LÀM CÁC CÔNG VIỆC SAU:
        - Lấy chiều dài của đối tượng đang sử lý (có ename được setq là "dt") gán giá trị này cho biến "L"
        - Lấy 1 điểm trên (gần) Pline, Line làm điểm chèn TEXT ký hiệu điểm này là p
        - Entmakex TEXT (hoặc Mtext) giá trị L tại điểm chèn p đã có ở trên
   BƯỚC 4: KẾT THÚC LỆNH
[ VÍ DỤ]
http://www.cadviet.com/forum/topic/47335-da-xong-lisp-xuat-chieu-dai-line-ra-text-co-san-va-co-tien-to-hau-to/
[ Ví dụ 2]
 

(defun c:test()
  (defun vText(str p k / xp yp)
    (entmakex
      (list
'(0 . "TEXT")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 1 str);string
(cons 7 (getvar "textstyle"));style
(cons 8 (getvar "clayer"));layer
(cons 62 256);color
(cons 10 p);insertion point
(cons 11 p);alignment point
(cons 40 k);text height - change by suit
(cons 41 1.0);text width
(cons 50 0.0);1.5708 - vertical, 0.0 - horizontal
(cons 51 0.0);oblique angle
'(71 . 0);alignment
'(72 . 0);alignment
'(73 . 0);alignment
)
      )    
    )
  (vl-load-com)
  (foreach dt (acet-ss-to-list (setq ss (ssget '(( 0 . "*LINE")))))
    (setq p (cdr(assoc 10 (entget dt))))
    (setq L (vla-get-length (vlax-ename->vla-object dt)))
    (vText (rtos L 2 4) p 25))
  (princ))


 

Toàn bộ (defun vtext .... để xác định hàm con với 3 tham số đầu vào [nội dung string ; điểm chèn p; chiều cao chữ k] sẽ hoạt động in ra màn hình một Dtext với nội dung như string, tại điểm chèn p; với chiều cao chữ k

Phần hoạt động chính chỉ đơn giản như sau:

 

  - foreach --... lọc qua một lượt toàn bộ đối tượng.

  - (setq p (cdr(assoc 10 (entget dt)))) xác định điểm p trên đối tượng

  - (setq L (vla-get-length (vlax-ename->vla-object dt))) xác định chiều dài từng đối tượng.

  - vtext (rtos L 2 4) p 25    in ra màn hinh Dtext nội dung "L", tại điểm p, chiều cao 25

kết thúc

Chỉnh sửa theo quansla

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

[Thuật toán]

   BƯỚC 1: GÕ LỆNH CHỌN TẬP HỢP CÁC ĐỐI TƯỢNG (có thể kết hợp chỉ chọn PLINE,LINE) dùng qua hàm

(ssget '(( 0 . "LINE,LWPolyline")))

   BƯỚC 2: LỌC QUA TOÀN BỘ ĐỐI TƯỢNG LÀM CÁC CÔNG VIỆC SAU:

        - Lấy chiều dài của đối tượng đang sử lý (có ename được setq là "dt") gán giá trị này cho biến "L"

        - Lấy 1 điểm trên (gần) Pline, Line làm điểm chèn TEXT ký hiệu điểm này là p

        - Entmakex TEXT (hoặc Mtext) giá trị L tại điểm chèn p đã có ở trên

   BƯỚC 4: KẾT THÚC LỆNH

[ VÍ DỤ]

http://www.cadviet.com/forum/topic/47335-da-xong-lisp-xuat-chieu-dai-line-ra-text-co-san-va-co-tien-to-hau-to/

[ Ví dụ 2]

 

(defun c:test()
  (defun vText(str p k / xp yp)
    (entmakex
      (list
'(0 . "TEXT")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 1 str);string
(cons 7 (getvar "textstyle"));style
(cons 8 (getvar "clayer"));layer
(cons 62 256);color
(cons 10 p);insertion point
(cons 11 p);alignment point
(cons 40 k);text height - change by suit
(cons 41 1.0);text width
(cons 50 0.0);1.5708 - vertical, 0.0 - horizontal
(cons 51 0.0);oblique angle
'(71 . 0);alignment
'(72 . 0);alignment
'(73 . 0);alignment
)
      )    
    )
  (vl-load-com)
  (foreach dt (acet-ss-to-list (setq ss (ssget '(( 0 . "*LINE")))))
    (setq p (cdr(assoc 10 (entget dt))))
    (setq L (vla-get-length (vlax-ename->vla-object dt)))
    (vText (rtos L 2 4) p 25))
  (princ))

 

Toàn bộ (defun vtext .... để xác định hàm con với 3 tham số đầu vào [nội dung string ; điểm chèn p; chiều cao chữ k] sẽ hoạt động in ra màn hình một Dtext với nội dung như string, tại điểm chèn p; với chiều cao chữ k

Phần hoạt động chính chỉ đơn giản như sau:

 

  - foreach --... lọc qua một lượt toàn bộ đối tượng.

  - (setq p (cdr(assoc 10 (entget dt)))) xác định điểm p trên đối tượng

  - (setq L (vla-get-length (vlax-ename->vla-object dt))) xác định chiều dài từng đối tượng.

  - vtext (rtos L 2 4) p 25    in ra màn hinh Dtext nội dung "L", tại điểm p, chiều cao 25

kết thúc

Hay quá cám ơn bạn nhiều

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


×