Đến nội dung


Hình ảnh
- - - - -

[Hỏi] về lisp tạo Mtext.


  • Please log in to reply
6 replies to this topic

#1 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 November 2011 - 03:32 PM

Có một vấn đề về lisp ghi Mtext ra bản vẽ như sau:
Đây là cái lisp mình mò mẫm viết ra dựa trên cái lisp của bác SSG dùng cho text:


(defun wtxtMC ( txt p h) ;;;Write Mtext Middle Center, specify text, point, height
(entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 7 (getvar "textstyle")) (cons 8 "0") (cons 100 "AcDbMText")(cons 1 txt) (cons 10 p) (cons 11 (list 1.0 0.0 0.0)) (cons 40 h) (cons 41 h) (cons 71 5)
(cons 72 1) (cons 73 2) (cons 44 1) (cons 50 0)))

)
Tuy nhiên khi dùng thì vướng phải một điều oái oăm là nếu trong đoạn Mtext cần viết có khoảng trắng thì lập tức Mtext bị nhảy dòng.
Nếu Mtext là một dòng ký tư liên tục thì Ok không bị lỗi chi cả.
Mình đã loay hoay đọc kỹ lại thằng entmake mà chưa hiểu lý do vì sao cả.
Vậy kính nhờ các bác có kinh nghiệm về thằng Mtext này chỉ giúp để có thể khắc phục lỗi này. nếu không thì hơi cay mũi và chắc phải bỏ không dùng phương án tạo Mtext bằng hàm enmake nữa .
Xin chân thành thọ giáo.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 04 November 2011 - 03:51 PM

Có một vấn đề về lisp ghi Mtext ra bản vẽ như sau:
Đây là cái lisp mình mò mẫm viết ra dựa trên cái lisp của bác SSG dùng cho text:



(defun wtxtMC ( txt p h) ;;;Write Mtext Middle Center, specify text, point, height
(entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 7 (getvar "textstyle")) (cons 8 "0") (cons 100 "AcDbMText")(cons 1 txt) (cons 10 p) (cons 11 (list 1.0 0.0 0.0)) (cons 40 h) (cons 41 h) (cons 71 5)
(cons 72 1) (cons 73 2) (cons 44 1) (cons 50 0)))

)
Tuy nhiên khi dùng thì vướng phải một điều oái oăm là nếu trong đoạn Mtext cần viết có khoảng trắng thì lập tức Mtext bị nhảy dòng.
Nếu Mtext là một dòng ký tư liên tục thì Ok không bị lỗi chi cả.
Mình đã loay hoay đọc kỹ lại thằng entmake mà chưa hiểu lý do vì sao cả.
Vậy kính nhờ các bác có kinh nghiệm về thằng Mtext này chỉ giúp để có thể khắc phục lỗi này. nếu không thì hơi cay mũi và chắc phải bỏ không dùng phương án tạo Mtext bằng hàm enmake nữa .
Xin chân thành thọ giáo.

Bác chạy thử :


(defun wtxtMC ( txt p h) ;;;Write Mtext Middle Center, specify text, point, height
(entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 7 (getvar "textstyle")) (cons 8 "0")
(cons 100 "AcDbMText")(cons 1 txt) (cons 10 p) (cons 11 (list 1.0 0.0 0.0))
(cons 40 h) (cons 41 (* (strlen txt) h)) (cons 71 5)
(cons 72 1) (cons 73 2) (cons 44 1) (cons 50 0)))

)
Cái này nó nằm ở mã Dxf 41. Em lấy nó bằng chiều cao Text nhân với số kí tự Text
  • 2

#3 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1431 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 04 November 2011 - 03:51 PM

Chào bác Bình.
Tôi cũng chưa rõ nguyên nhân cụ thể, nhưng truớc mắt bác bỏ dòng (cons 41 h) là hết oái oăm ngay ấy mà.

(defun wtxtMC ( txt p h) ;;;Write Mtext Middle Center, specify text, point, height
(entmake
(list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 7 (getvar "textstyle"))
(cons 8 "0") (cons 100 "AcDbMText")(cons 1 txt) (cons 10 p) (cons 11 (list 1.0 0.0 0.0)) (cons 40 h)
;(cons 41 h)
(cons 71 5) (cons 72 1) (cons 73 2) (cons 44 1) (cons 50 0))))


Bác chạy thử :
.........
Cái này nó nằm ở mã Dxf 41

A!, là do bác set chiều rộng nhỏ hơn k/thước của Text nên nó xuống dòng là đúng rồi. (không phải do khoảng trắng trong text đâu).

Bài viết đã được chỉnh sửa nội dung bởi gia_bach: 04 November 2011 - 03:57 PM

  • 1

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 November 2011 - 03:58 PM

Bác chạy thử :



(defun wtxtMC ( txt p h) ;;;Write Mtext Middle Center, specify text, point, height
(entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 7 (getvar "textstyle")) (cons 8 "0")
(cons 100 "AcDbMText")(cons 1 txt) (cons 10 p) (cons 11 (list 1.0 0.0 0.0))
(cons 40 h) (cons 41 (* (strlen txt) h)) (cons 71 5)
(cons 72 1) (cons 73 2) (cons 44 1) (cons 50 0)))

)
Cái này nó nằm ở mã Dxf 41. Em lấy nó bằng chiều cao Text nhân với số kí tự Text

Hề hề hề,
Vậy là mình hiểu ra rồi. cái mã 41 nó quy định chiều rộng mặc định của text nên khi text bị dài hơn nó sẽ tự cắt xuống dòng nếu gặp khoảng trắng tức là chuyển sang từ mới.
Hề hề hề, thank bác Tue_NV và bác Giabach thật nhiều nhé.
  • 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 luckylucke_2009

luckylucke_2009

    biết zoom

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

Đã gửi 07 January 2013 - 02:37 PM

Xin cho hỏi có thể tạo Mtext: W123 với yêu cầu như sau: W123 hoặc W123.
Xin cám ơn!
  • 0

#6 quansla

quansla

    biết lệnh xclip

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

Đã gửi 08 January 2013 - 02:25 PM

...Hix tưởng làm được, bắt tay vào thử lại không được, srr bạn, nhờ các mem khác giúp đỡ vậy

Bài viết đã được chỉnh sửa nội dung bởi quansla: 08 January 2013 - 02:29 PM

  • 0

#7 luckylucke_2009

luckylucke_2009

    biết zoom

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

Đã gửi 25 January 2013 - 10:20 AM

...Hix tưởng làm được, bắt tay vào thử lại không được, srr bạn, nhờ các mem khác giúp đỡ vậy


Tôi đã tạo Mtext có upper và lower được rồi. Nhưng font chữ vẫn chưa ổn lắm.
Nhờ các bác hoàn thiện thêm!

;;;;!!!!Ham tao Mtext co canh le + Lower and Upper (suu tam va chinh sua tu cadviet.com;;;;;;;;;;;;;;
(defun mtextjus_ul (STRING1 STRING2 JUSTIFY STYLE LAYER POINT HEIGHT ANG COLOR / MT1)
(setq MT1 (list (cons 0 "MTEXT")
(cons 100 "AcDbEntity")
(cons 7 (if STYLE STYLE (getvar "Textstyle")))
(cons 8 (if LAYER LAYER (getvar "Clayer")))
(cons 100 "AcDbMText")
(cons 10 POINT)
(cons 11 POINT)
(cons 40 HEIGHT)
(cons 41 (* (+ (strlen STRING1) (strlen STRING2)) HEIGHT))
(cons 44 5)
(cons 50 (if ANG ANG 0))
(cons 62 (if COLOR COLOR 256))
(cons 71 5)
(cons 72 5))
JUSTIFY (strcase JUSTIFY))

(cond ((= JUSTIFY "AL_ML") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxql;" STRING1 "{\\H0.7x;\\S^" STRING2 ";}"))
(cons 71 4) (cons 72 5) (cons 73 2)))));after lower 70% + middle left MTEXT
((= JUSTIFY "AL_MR") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqr;" STRING1 "{\\H0.7x;\\S^" STRING2 ";}"))
(cons 71 6) (cons 72 5) (cons 73 2)))));after lower 70% + middle right MTEXT
((= JUSTIFY "AL_MC") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqc;" STRING1 "{\\H0.7x;\\S^" STRING2 ";}"))
(cons 71 5) (cons 72 5) (cons 73 2)))));after lower 70% + middle center MTEXT
;
((= JUSTIFY "AU_ML") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxql;" STRING1 "{\\H0.7x;\\S" STRING2 "^;}"))
(cons 71 4) (cons 72 5) (cons 73 2)))));after upper 70% + middle left MTEXT
((= JUSTIFY "AU_MR") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqr;" STRING1 "{\\H0.7x;\\S" STRING2 "^;}"))
(cons 71 6) (cons 72 5) (cons 73 2)))));after upper 70% + middle right MTEXT
((= JUSTIFY "AU_MC") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqc;" STRING1 "{\\H0.7x;\\S" STRING2 "^;}"))
(cons 71 5) (cons 72 5) (cons 73 2)))));after upper 70% + middle center MTEXT
;
((= JUSTIFY "BL_ML") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxql;{\\H0.7x;\\S^" STRING2 ";\\H1.4286x;" STRING1 "}"))
(cons 71 4) (cons 72 5) (cons 73 2)))));before lower 70% + middle left MTEXT
((= JUSTIFY "BL_MR") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqr;{\\H0.7x;\\S^" STRING2 ";\\H1.4286x;" STRING1 "}"))
(cons 71 6) (cons 72 5) (cons 73 2)))));before lower 70% + middle right MTEXT
((= JUSTIFY "BL_MC") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqc;{\\H0.7x;\\S^" STRING2 ";\\H1.4286x;" STRING1 "}"))
(cons 71 5) (cons 72 5) (cons 73 2)))));before lower 70% + middle center MTEXT
;
((= JUSTIFY "BU_ML") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxql;{\\H0.7x;\\S" STRING2 "^;\\H1.4286x;" STRING1 "}"))
(cons 71 4) (cons 72 5) (cons 73 2)))));before upper 70% + middle left MTEXT
((= JUSTIFY "BU_MR") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqr;{\\H0.7x;\\S" STRING2 "^;\\H1.4286x;" STRING1 "}"))
(cons 71 6) (cons 72 5) (cons 73 2)))));before upper 70% + middle right MTEXT
((= JUSTIFY "BU_MC") (setq MT1 (append MT1 (list (cons 1 (strcat "\\A1;\\pxqc;{\\H0.7x;\\S" STRING2 "^;\\H1.4286x;" STRING1 "}"))
(cons 71 5) (cons 72 5) (cons 73 2)))));before upper 70% + middle center MTEXT
);end cond
(entmakex MT1)
);end defun
;;;;;MAIN;;;;;;;
(defun C:hhh (/ p0 G00 G90)
(setq G00 0.0
G90 (* pi 0.5))
;
(setq p0 (getpoint "\nChon dien chen MTEXT: "))
;
(mtextjus_ul "ABC" "1234" "BU_MR" "TViet" "ChenMText" p0 3.0 G00 2)
(princ)
);end defun

  • 0