Chuyển đến nội dung
Diễn đàn CADViet
united

Mtext bị đứt đoạn sau khi Explode

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

Thỉnh thoảng em bị tình trạng sau khi Explode Mtext ra thì kết quả nhận được là các Dtext rời nhau, mặc dù Mtext chỉ có 1 dòng.

Nó bị đứt ở các chữ 'đ', 'ư'...

Nhờ các anh xem giúp ạ.

Em cảm ơn nhiều!

2.png

ex.dwg

1.png

  • Vote giảm 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

Nó vốn là bị đứt đoạn rồi mà, nhìn trên bảng Properties thấy thay đổi font thành Arial sau chữ Đ.

Ở trường hợp em đang dùng style --Arial-- với font "Arial CYR" và thay font "Arial" giữa chừng, sau đó quay lại "Arial CYR"

Vì vậy , trường hợp mới bị thì đổi font trong style thành arial và gõ lại bình thường. Nếu đã bị quá nhiều cần viết 1 lệnh để huỷ các format trả về font mặc định.

 

 

  • Like 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
21 giờ trước, cuongtk2 đã nói:

Nó vốn là bị đứt đoạn rồi mà, nhìn trên bảng Properties thấy thay đổi font thành Arial sau chữ Đ.

Ở trường hợp em đang dùng style --Arial-- với font "Arial CYR" và thay font "Arial" giữa chừng, sau đó quay lại "Arial CYR"

Vì vậy , trường hợp mới bị thì đổi font trong style thành arial và gõ lại bình thường. Nếu đã bị quá nhiều cần viết 1 lệnh để huỷ các format trả về font mặc định.

 

 

Em tạo style bằng:

    (command "-style" "-ARIAL" "Arial" "0" "1" "0" "" "")

Kết quả thu được là stype -ARIAL với Font Name "Arial CYR"

Anh cho em hỏi làm sao để thu được Font Name "Arial"?

Em cảm ơn anh!

  • Vote giảm 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
3 giờ trước, cuongtk2 đã nói:

Dùng lệnh style để mở hộp thoại text styles

Dạ, nó nằm trong 1 số lisp của em nên em cần code ạ.

Phiền anh chỉ bảo thêm ạ.

  • Vote giảm 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

Sử dụng hàm Quick UnFormat của chú Lee nè.

(defun c:unformat ( / *error* enx idx rgx sel str )
    (cond
        (   (or (vl-catch-all-error-p (setq rgx (vl-catch-all-apply 'vlax-get-or-create-object '("vbscript.regexp"))))
                (null rgx)
            )
            (princ "\nUnable to interface with RegExp object.")
        )
        (   (setq sel (ssget "_:L" '((0 . "MTEXT"))))
            (repeat (setq idx (sslength sel))
                (setq enx (entget (ssname sel (setq idx (1- idx))))
                      str (assoc 1 enx)
                )
                (entmod (subst (cons 1 (LM:quickunformat rgx (cdr str))) str enx))
            )
        )
    )
    (princ)
)

;; Quick Unformat  -  Lee Mac
;; Returns a string with all MText formatting codes removed.
;; rgx - [vla] Regular Expressions (RegExp) Object
;; str - [str] String to process

(defun LM:quickunformat ( rgx str )
    (if
        (null
            (vl-catch-all-error-p
                (setq str
                    (vl-catch-all-apply
                       '(lambda nil
                            (vlax-put-property rgx 'global     actrue)
                            (vlax-put-property rgx 'multiline  actrue)
                            (vlax-put-property rgx 'ignorecase acfalse) 
                            (foreach pair
                               '(
                                    ("\032"     . "\\\\\\\\")
                                    (" "        . "\\\\P|\\n|\\t")
                                    ("$1"       . "\\\\(\\\\[ACcFfHKkLlOopQTW])|\\\\[ACcFfHKkLlOopQTW][^\\\\;]*;|\\\\[ACcFfKkHLlOopQTW]")
                                    ("$1$2/$3"  . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
                                    ("$1$2"     . "\\\\(\\\\S)|[\\\\](})|}")
                                    ("$1"       . "[\\\\]({)|{")
                                    ("\\$1$2$3" . "(\\\\[ACcFfHKkLlOoPpQSTW])|({)|(})")
                                    ("\\\\"     . "\032")
                                )
                                (vlax-put-property rgx 'pattern (cdr pair))
                                (setq str (vlax-invoke rgx 'replace str (car pair)))
                            )
                        )
                    )
                )
            )
        )
        str
    )
)

(vl-load-com)

 

  • Like 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

Tôi ghét vl vì những thứ từ trên trời rơi xuống . vlax-get-or-create-object '("vbscript.regexp"). Nếu chưa học qua net thì nó quá khó hiểu.

  • Like 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
26 phút trước, cuongtk2 đã nói:

Tôi ghét vl vì những thứ từ trên trời rơi xuống . vlax-get-or-create-object '("vbscript.regexp"). Nếu chưa học qua net thì nó quá khó hiểu.

Em mới nghiên cứu cái đồ này, có một vài class đời cũ. Win11 không có cài .NET 3.5 bất tiện VL. Nên cũng k thích lắm. Hạn chế dùng.

Thật ra ở đây chỉ cần hàm vla-get-TextString là được đâu cần unfornat làm gì mất công. viết lisp chèn 1 cái text vào đúng vị trí mtext, cùng độ cao. Rồi xoá cài mtext đi. Nhanh gọn lẹ.

  • Like 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

1. "vbscript.regexp" để sử dụng thư viện Regular Expression ( biểu thức chính quy, viết tắt Regex). 

Muốn sử dụng nó thì phải biết nó có các chức năng gì, xem tại https://topdev.vn/blog/regex-la-gi/ , 

Vl vì muốn linh hoạt hơn đã mở ra  điểm truy cập (một dạng xuất khẩu lao động) vào một thư viện hay một app khác. Và trong điểm này bạn phải hành xử theo ngôn ngữ, văn hoá, pháp luật nước sở tại (khó ở điểm này vì người lập trình lisp hầu như nhảy dù vào lập trình).

2. Chắc em chưa thử vla-get-TextString, nó biểu hiện format như một trang winword với \p: paragrapht \f: font \b: bold \i: italic \h height \c: color...

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
2 giờ trước, cuongtk2 đã nói:

1. "vbscript.regexp" để sử dụng thư viện Regular Expression ( biểu thức chính quy, viết tắt Regex). 

Muốn sử dụng nó thì phải biết nó có các chức năng gì, xem tại https://topdev.vn/blog/regex-la-gi/ , 

Vl vì muốn linh hoạt hơn đã mở ra  điểm truy cập (một dạng xuất khẩu lao động) vào một thư viện hay một app khác. Và trong điểm này bạn phải hành xử theo ngôn ngữ, văn hoá, pháp luật nước sở tại (khó ở điểm này vì người lập trình lisp hầu như nhảy dù vào lập trình).

 2. Chắc em chưa thử vla-get-TextString, nó biểu hiện format như một trang winword với \p: paragrapht \f: font \b: bold \i: italic \h height \c: color...

Ồ đúng là chưa thử thật :))

Em cũng là nhảy dù vào lập trình lisp. Nghiên cứu mấy cái object .net toàn phải dump ra để xem có những methods nào hỗ trợ, nhọc lắm bác ạ.

 

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

Xin lỗi các anh, em xin được chen ngang!

Theo như nội dung các anh trao đổi ở trên thì em xin hỏi là vấn đề của em (đoạn code để tạo textstyle với FontName là "Arial") đã được giải quyết chưa ạ?

Và em xin hỏi cách giải quyết cụ thể ạ?

Em cảm ơn các anh nhiều!

@cuongtk2 @tannguyen291

 

  • Vote giảm 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
Vào lúc 29/8/2023 tại 14:45, united đã nói:

Em tạo style bằng:

    (command "-style" "-ARIAL" "Arial" "0" "1" "0" "" "")

Kết quả thu được là stype -ARIAL với Font Name "Arial CYR"

Anh cho em hỏi làm sao để thu được Font Name "Arial"?

Em cảm ơn anh!

Thử chạy lisp này:

(CreateTextStyle "-ARIAL" "arial.ttf" 0 0.9)

(defun CreateTextStyle (StyleName Font Height WidthFactor  / doc txtStyles Obj Font_Path TypeFace Bold Italic charSet PitchandFamily)
  (vl-load-com) 
  (setq doc (vla-get-activedocument (vlax-get-acad-object))
        txtStyles (vla-get-textstyles doc)  )
  (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list txtStyles StyleName)))
    (setq Obj (vla-add txtStyles StyleName))
    (setq Obj (vla-Item txtStyles StyleName)))
    
  (if Obj
    (progn
      (if (= (strcase (vl-filename-extension Font)) (strcase ".ttf"))
        (if (not (setq Font_Path (findfile (strcat (getenv "WINDIR") "\\fonts\\" Font))))
	  (setq Font_Path (findfile Font))
        )
      )
      (if Font_Path
	(progn
	  (setq DestinationTypeFace (vl-filename-base Font))
	  (vla-GetFont Obj 'typeFace 'Bold 'Italic 'charSet 'PitchandFamily)
	  (vla-put-fontfile Obj Font_Path)
	  (vla-SetFont Obj DestinationTypeFace Bold Italic charSet PitchandFamily)
	  (vla-put-height Obj Height)
	  (vla-put-width Obj WidthFactor) )
        (progn
          (alert "Couldn't find font path, exiting!")
          ;(exit)
        )
      )      
    )
  )
  Obj
)

 

  • Like 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
5 giờ trước, gia_bach đã nói:

Thử chạy lisp này:

Em hỏi (ngu) chút nữa ạ, đưa đoạn code trên vào lisp như nào ạ?

Em đang dùng lisp này để đổi style cho text:

(defun c:AI ()   (PROMPT"\nSelect texts to change to -ARIAL")
(setq ss (ssget))
(command "-style" "-ARIAL" "Arial" "0" "1" "0" "" "")
(setq c 0)
(if ss (setq e (ssname ss c)))
(while e
(setq e (entget e))
(if (= (cdr (assoc 0 e)) "TEXT")
(progn
(setq txt "-ARIAL")
(setq e (subst (cons 7 txt) (assoc 7 e) e))
(entmod e)
))
(setq c (1+ c))
(setq e (ssname ss c))
)	(Princ))

 

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

Đây là một cách:

(defun c:AI ()
  (PROMPT"\nSelect texts to change to -ARIAL")
  (if (and
	(setq ss (ssget))
	(CreateTextStyle "-ARIAL" "arial.ttf" 0 1) )
    (progn      
      ;(setq ss (ssget))
      ;(command "-style" "-ARIAL" "Arial" "0" "1" "0" "" "")
      (setq c 0)
      (if ss (setq e (ssname ss c)))
      (while e
	(setq e (entget e))
	(if (= (cdr (assoc 0 e)) "TEXT")
	  (progn
	    (setq txt "-ARIAL")
	    (setq e (subst (cons 7 txt) (assoc 7 e) e))
	    (entmod e)
	    ))
	(setq c (1+ c))
	(setq e (ssname ss c))
	)))    
    (Princ))

 

  • Like 1
  • 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

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

×