Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

Lisp Viết Text/mtext Trên Pline


  • Please log in to reply
5 replies to this topic

#1 nguyenngoc02n

nguyenngoc02n

    biết pan

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

Đã gửi 07 December 2016 - 10:06 AM

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


  • 0

#2 Danh Cong

Danh Cong

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 362 Bài viết
Điểm đánh giá: 73 (tàm tạm)

Đã gửi 07 December 2016 - 10:18 AM

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 đó. : )
  • 1

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#3 nguyenngoc02n

nguyenngoc02n

    biết pan

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

Đã gửi 07 December 2016 - 10:43 AM

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ẽ


  • 0

#4 Danh Cong

Danh Cong

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 362 Bài viết
Điểm đánh giá: 73 (tàm tạm)

Đã gửi 07 December 2016 - 11:09 AM

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

             ***  Vô lo - Vô nghĩ - Vô sầu hận  ***

***  Chẳng thương - Chẳng giận - Chẳng đau lòng  ***


#5 quansla

quansla

    biết lệnh xclip

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

Đã gửi 07 December 2016 - 11:31 AM

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


Bài viết đã được chỉnh sửa nội dung bởi quansla: 07 December 2016 - 01:52 PM

  • 0

#6 nguyenngoc02n

nguyenngoc02n

    biết pan

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

Đã gửi 07 December 2016 - 02:30 PM

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


  • 0