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

[Đã xong] - Tự động bật - tắt chế độ gõ tiếng việt trong CAD

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

Để viết cho attribute @ThuyLinh cần tìm hiểu thêm về các kiểu đối số của hàm command. Đố làm được đấy!

Cái phần dùng cho BlockAtt và Attribute mình đã làm xong rồi (Cái này chỉ cần thay entsel = nentsel). Cái của mình dùng trên cad đời thấp không có biến EDITTEXT nên còn nhiều hạn chế do vậy mình không up lên.

  • Vote tăng 4

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

Để viết cho attribute @ThuyLinh cần tìm hiểu thêm về các kiểu đối số của hàm command. Đố làm được đấy!

Không phải thách nhà giàu húp tương!

 

Về đối số của hàm command khi select đối tượng: Có it nhất 3 kiểu (type) đối số, có thể có những lênh chỉ chấp nhận 1 trong 3 kiểu được liệt kê dưới đây nhưng thường thì hầu hết chấp nhận cả 3.

- Kiểu Pickset: là tập chon được tạo ra bởi hàm ssget, ssadd hoặc việc select đối tượng từ trước khi gõ lệnh.

- Kiểu Ename: là ename của đối tượng, kiểu này dùng trong các command chỉ yêu cầu chon 1 đối tượng duy nhất.

- Kiểu List: Kiểu này it người biết (mình cũng mới biết theo gợi ý trên của thaistreets), là danh sách gồm 1 ename và 1 list 3D point giống kết quả trả về của hàm entsel (<ename> point). Việc sử dung kiểu đối số này cho hàm command sẽ khiến command hiểu đối số thực cho nó chính là đối tượng cọn của <ename> được tìm thấy tại điểm point. lệnh Eattedit cần sử dung kiểu đối số này. Các lệnh sử dung kiểu đối số là Ename cũng có thể sử dung kiểu đối số này mà không gặp vấn đề gì. 1 phát hiện khá thú vị!

 

@Phamngoctukts: bạn cứ post lên đi, nhiều người cần nó mà bạn. nếu còn hạn chế thì mọi người cùng thảo luận khắc phục sẽ ra phương án tối ưu.

  • Vote tăng 2

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

@TL : entsel = entity select. Command nào chấp nhận việc pick chọn đối tượng thì sẽ chấp nhận entsel. Đặc biệt ứng dụng trong các lisp break, lengthen, trim extend fillet ... (những lệnh mà phía pick lên đối tượng ảnh hưởng đến kết quả), nên nhiều khi thay vì ename thì dùng (list ename p), cái này có kha khá trên 4room rồi

 

P/s a Thái và TLinh : có nhiều người theo dõi topic

  • 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

Việc hỗ trợ attribute thì mình cũng đã có hướng viết rồi, khi nào rảnh sẽ thử xem đến đâu.

Hiện tại mình đang bí phương pháp giải quyết text trong block. loại text này không có cách nào sửa trừ khi sử dụng lệnh blockedit.

Một vấn đề nữa mình cũng đang phân vân. Mình nhớ hồi trước sử dụng cad đời thấp thì việc edit hatch cũng được gọi bởi lệnh ED. Không hiểu vì sao các bản cad sau này lại bỏ nó đi. mình định đưa nó trở lại và nếu có thể thì việc sửa 1 số loại đối tượng khác cũng đưa chung vào ED luôn 1 thể. các bạn nghĩ thế nào về việc này?

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

Hiện tại mình đang bí phương pháp giải quyết text trong block. loại text này không có cách nào sửa trừ khi sử dụng lệnh blockedit.

Nếu bạn sử dụng nentsel và một dcl nhập liệu thì hoàn toàn có thể sửa được text trong block (cái này trên diễn đàn cũng có rồi).

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

Cách của mình dùng lâu nay thấy vẩn ổn ầm ầm.

1.Ko sử dụng bản vẽ của người khác (tạp nham các thứ kể cả text)

2.Dùng 1 bảng mã ổn định trong bản vẽ.

3.Dùng kiểu gỏ vni và mặc định gỏ tiếng Việt trong bộ gỏ.

 

Đây là ý khoe cách làm việc của mình mọi người thấy hay ko cần khen, thấy dở ko cần chê, thấy gai mắt ko cần chửi!

- Dựa theo trên đây nhoc thấy sao ko viết lệnh đơn giản thui nhỉ ^^, gán phím tắt cho bảng mã, 1 uincode, 2 TCVN3, 3 VNi-windowns, vậy đơn giản hơn ko hì :D, mình hay dùng bảng mã nào thì mình pit đổi phím tắt kỉu này tiện chút đỡ phải nhấn kết hợp 3 phim thui, như nhoc trong bản vẽ dùng vni-, ra ngoài lênh mạng dùng unicode ^^, trừ trường hợp đụng bảng vẽ người khác hơi rối xíu ^^

- Mí cái code phức tạp nhoc nghĩ có thể đầu tư cho dự án lớn khác ^^

Ps: tỉu bối spam tí ^^, cái ver 2.0 của chị TL nhoc dùng tới giờ chưa có phàn nàn gì vì nhoc ít sữa block và blockatt :)

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

Version 2.1: Tự động bật/Tắt chế độ gõ tiếng việt, tự động chuyển đổi bảng mã của Unikey khi chỉnh sửa hoặc tạo Text, Mtext, Dimension

- Sửa lệnh Ed để nhận diện các text cần sửa tiếp theo. (Cảm ơn bạn Tien2005 đã hỗ trợ thuật toán ^^)

- Update hỗ trợ thêm thao tác kick đúp để chỉnh sửa text.

;===============================================================;
; 	A U T O   U N I K E Y   C O N T R O L   R O U T I N E 	;
;===============================================================;
;                                                       		;
;  Version 1.0 - 14/12/2012                             		;
;  	- Support Auto change table code (Unicode, TCVN, VNI)	;
;  	- Support for Text & Mtext objects               		;
;                                                       		;
;  Version 2.0 - 15/12/2012                             		;
;  	- Added Auto toggle (On/Off) Vietnamese keys     		;
;  	- Added support for Dimension objects                	;
;  	- fixed Check-font-code function                 		;
;                                                       		;
;  Version 2.1 - 22/01/2013                             		;
;  	- Added support for Double click to edit *text   		;
;  	- fixed ED command to select continues (thanks Tien2005) ;
;                                                       		;
;===============================================================;
;  	Cadviet.com - Le Thuy Linh 313 - Tri Tue Viet.jsc    	;
;===============================================================;
(vl-load-com)
;;; Go bo Reactor Auto-Unikey cu truoc khi load
(foreach x (cdar (vlr-reactors :vlr-sysvar-reactor))
(if (= (vlr-data x) "Auto-Unikey") (vlr-remove x)))
(foreach x (cdar (vlr-reactors :vlr-mouse-reactor))
(if (= (vlr-data x) "Double-Click") (vlr-remove x)))
;;; Tao Reactor Auto-Unikey
(vlr-mouse-reactor   "Double-Click" '((:vlr-beginDoubleClick . callback-DoubleClick)))
(vlr-sysvar-reactor "Auto-Unikey" '((:vlr-sysvarchanged . callback-Unikey)))
;;; Dinh nghia lai lenh ED de lay ename doi tuong
(defun c:ed (/ textedit font ent)
(and (or (and (setq textedit (ssget "I" '((0 . "*TEXT,DIMENSION"))))
      		(sssetfirst textedit)
      		(setq textedit (ssname textedit 0)))
     	(setq textedit (car (entsel))))
 	(while textedit
  	(setq ent (cdr (assoc 0 (entget textedit))))
  	(cond ((wcmatch ent "*TEXT")
         	(setq font (vla-get-stylename (vlax-ename->vla-object textedit))))
    		((= ent "DIMENSION")
         	(setq font (vla-get-textstyle (vlax-ename->vla-object textedit)))))
  	(command "ddedit" textedit "")
  	(setq textedit (car (entsel)))))
(princ))
;;; Ham callback dieu khien bo go tieng viet
(defun callback-Unikey (reactor sysvar / code Crfont)
(if (= (car sysvar) "TEXTEDITOR") (sendkeys "^+"))
(if (> (getvar "TEXTEDITOR") 0)
 (progn
  (if font (setq Crfont font) (setq Crfont (getvar "textstyle")))
  (setq code (check-font-code Crfont))
  (cond ((= code "TCVN3") (sendkeys "^+{F2}"))
		((= code "UNICODE") (sendkeys "^+{F1}"))
		((= code "VNI") (sendkeys "^+{F3}")))
  (setq font nil))))
;;; Ham callback lay textstyle khi Double Click vao text
(defun callback-DoubleClick (reactor point / sset obj ss)
(setq sset (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))))
(setq ss (vla-add sset "ThuyLinh313"))
(vla-selectatpoint ss (vlax-3d-point (car point)))
(if (> (vlax-get ss 'Count) 0)
 (progn
  (setq obj (vla-item ss 0))
  (if (or (eq (vlax-get obj 'ObjectName) "AcDbText")
  		(eq (vlax-get obj 'ObjectName) "AcDbMText"))
(setq font (vla-get-stylename obj)))
  (sssetfirst nil (ssadd (vlax-vla-object->ename obj)))))
(vla-delete ss))
;;; Ham kiem tra bang ma cua textstyle (su dung true type font)
;;; style: String - ten cua textstlye kiem tra
(defun Check-Font-Code (style / ts font Bold Italic charSet PitchandFamily)
(setq ts (vlax-ename->vla-object (tblobjname "style" style)))
(vla-GetFont ts 'font 'Bold 'Italic 'charSet 'PitchandFamily)
(if (= font "") (setq font (vla-get-fontfile ts)))
(cond ((wcmatch (setq font (strcase font)) "ARIAL*,TAHOMA*,TIMES*,COURIER NEW,CAMBRIA,CONSOLAS") "UNICODE")
((wcmatch font ".VN*") "TCVN3")
((wcmatch font "VNI*") "VNI")))
;;; Ham senkeys
(defun SendKeys (keys / wscript)
(vlax-invoke-method (setq wscript (vlax-create-object "WScript.Shell")) 'sendkeys keys)
(vlax-release-object wscript))

(Chú ý: cần thiết lập chế độ gõ tiếng anh mặc định khi sử dụng cad)

 

Từ ý tưởng của bạn Phamngoctukts thì mình nảy sinh ý định viết ứng dụng này để hỗ trợ với tất cả các loại text trong bản vẽ: attribute, text trong khối block, rtext... Hi vọng sẽ làm được trong các version tiếp theo :D

Cám ơn bạn. Thấy ý tưởng viết lisp này hay nhưng down về sd chưa đc, không hiểu cách dùng.

Mình mở cad tạo 3 đối tượng text, 1 là font ABC, 2 là font VNI, 3 là Unicode. Load CT, đánh lệnh ed thấy trình Unikey kg bật tắt đúng kiểu cần thiết. Đánh kiểu vni hay telex đều kg đc. Làm thế nào mới chạy đúng bạn 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

@TRUNGNGAMY: bộ gõ unikey của Bạn cần để phím tắt chuyển chế độ gõ Anh/Việt là CTRL+ASHIFT, lisp trên của ThuyLinh313 không có sendkeys ALT+Z. Việc double click để sửa text thì chưa hoàn chỉnh

Trước khi dùng lệnh ED của lisp thì chế độ gõ của unikey phải là tiếng Anh

  • 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

.@phamngoctukts: Mình có tính đến phương án này, nhưng ngặt 1 lỗi nếu dùng DCL thì bắt buộc phải gõ Unicode khi chỉnh sửa thì mới hiển thị tiếng việt được.

.......

Bạn có thể dùng PA là Lấy nội dung Text -> tắt Text đó đi và viết chữ bằng Dtext với nội dung mới ngay vị trí điểm chèn text vừa lấy

Sau đó lấy nội dung text vừa viết -> xóa text vừa viết đi và tiến hành update

Cảm ơn bạn đã cho ra đời ứng dụng hay.

 

@All: Tue_NV đã xóa các bài viết spam để không làm loãng chủ đề này.

  • Vote tăng 2

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 ThuyLinh vui lòng hướng dẫn cách sử dụng được không? Mình đã làm theo các bước sau nhưng chẳng thấy điều gì xảy ra cả:

 

1. Khởi động Unikey 4.0 Beta 2, chuyển về tiếng Anh (đang thiết lập gõ telex).

2. Khởi động AutoCAD, load lisp.

3. Gõ lệnh ED, pick vào text

 

Kết quả: Unikey vẫn hiện chữ E ở góc dưới bên phải màn hình, không thể gõ được tiếng Việt.

Mình đang sử dụng Win7 64bit, AutoCAD2007.

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

@Tue_NV: Bạn đề xuất đúng phương án mà mình sẽ thực hiện. Mình đang phải mày mò nghiên cứu code lệnh Ncopy của express để áp dụng vào trường hợp này. ^^

 

@LoveLisp: Ứng dụng này chỉ chạy với cad 2009 trở lên thôi nhé, mình đã nói điều này ở trang 2 rồi. Với cad đời thấp thì bạn tạm sử dụng code của bạn phamngoctukts ở trang 2 trong khi chờ bạn í update code mới.

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

Version 3.0: Hỗ trợ tự động bật tắt chế độ gõ tiếng việt và tự động nhận diện bảng mã thích hợp khi chỉnh sửa các loại đối tượng sau:

1. DText, MText (Riêng 2 loại đối tượng này chương trình có hỗ trợ việc kích đúp để sửa đối tượng)

2. Text trong Dimension

3. DText, Mtext trong Block (Việc chỉnh sửa các loại text này giống hệt với các text thường)

4. Các loại text attribute trong block thuộc tính

5. Tích hợp lệnh HatchEdit vào lệnh ED luôn.

 

Hướng dẫn sử dụng:

- Chương trình chạy với các bản cad 2009 trở lên.

- Hỗ trợ bộ gõ Unikey của tác giả Phạm Kim Long. (Nếu bạn sử dụng bộ gõ khác có hỗ trợ hotkey, bạn có thể điều chỉnh hotkey theo Unikey để tương thích với chương trình này. hoặc nếu bạn có thể viết lisp, hãy sửa chương trình này theo ý của bạn)

- Thích hợp với người gõ tiếng việt theo kiểu Telex. (Nếu bạn gõ theo kiểu VNI thì không cần sử dụng chương trình này, bạn có thể tham khảo phương pháp của Duy782006 ở trang 2)

- đặt hotkey đổi chế độ gõ Anh-Việt là Ctrl+Shift. (nếu bạn đặt là Alt+Z thì làm theo hướng dẫn ở trang 2)

- Với các đối tượng DText, Mtext trong Block, chương trình chỉ hỗ trợ khi cad của bạn đã cài đặt gói Express tool. (Mình ngại viết lại nên lấy luôn 1 hàm của express)

- Tải lisp này vào cad, để chế độ gõ mặc định của Unikey là Tiếng Anh và trải nghiệm thôi ^^

 

Các bạn Test giúp mình xem còn phải chỉnh sửa gì nữa không nhé, đây sẽ là phiên bản final của ứng dụng này. Cảm ơn ý kiến đóng góp của các bạn đã giúp mình hoàn thiện nó!

;================================================================;
;  	A U T O   U N I K E Y   C O N T R O L   R O U T I N E  	;
;================================================================;
;                                                             	;
;  Version 1.0 - 14/12/2012                                   	;
;  	- Support Auto change table code (Unicode, TCVN, VNI)  	;
;  	- Support for Text & Mtext objects                     	;
;                                                             	;
;  Version 2.0 - 15/12/2012                                   	;
;  	- Added Auto toggle (On/Off) Vietnamese keys           	;
;  	- Added support for Dimension objects                  	;
;  	- fixed Check-font-code function                       	;
;                                                             	;
;  Version 2.1 - 22/01/2013                                   	;
;  	- Added support for Double click to edit *text objects 	;
;  	- fixed ED vl-cmdf to select continues (thanks Tien2005)  ;
;                                                             	;
;  Version 3.0 - 29/01/2013                                   	;
;  	- Added support All Attribute objects (thanks Thaistreetz);
;  	- Added support Text & Mtext objects in Insert Block   	;
;                                                             	;
;================================================================;
;  	Cadviet.com - Le Thuy Linh 313 - Tri Tue Viet.jsc      	;
;================================================================;
(vl-load-com)
;;; Go bo Reactor Auto-Unikey cu truoc khi load
(foreach x (cdar (vlr-reactors :vlr-sysvar-reactor))
(if (= (vlr-data x) "Auto-Unikey") (vlr-remove x)))
(foreach x (cdar (vlr-reactors :vlr-mouse-reactor))
(if (= (vlr-data x) "Double-Click") (vlr-remove x)))
;;; Tao Reactor Auto-Unikey
(vlr-mouse-reactor   "Double-Click" '((:vlr-beginDoubleClick . callback-DoubleClick)))
(vlr-sysvar-reactor "Auto-Unikey" '((:vlr-sysvarchanged . callback-Unikey)))
;;; Dinh nghia lai lenh ED de lay ename doi tuong
(defun c:ed (/ textedit n-textedit ent n-ent obj n-obj l-obj font code dk lst *error*)
(and (or (and (setq textedit (ssget "I"))
          	(sssetfirst textedit)
          	(setq obj (ssname textedit 0)))
     	(setq textedit (entsel) obj (car textedit)))
 	(while obj
  	(setq lst (Start-defun nil))
  	(setq ent (cdr (assoc 0 (entget obj))))
  	(cond ((wcmatch ent "*TEXT") ;Text,Mtext,Rtext
         	(setq font (cdr (assoc 7 (entget obj))))
         	(vl-cmdf "ddedit" textedit ""))
        	((= ent "DIMENSION") ;Dimension
         	(setq font (vla-get-textstyle (vlax-ename->vla-object obj)))
         	(vl-cmdf "ddedit" textedit ""))
        	((= ent "HATCH") ;Hatch
         	(initdia)
         	(vl-cmdf "hatchedit" textedit))
        	((= ent "INSERT") ;Block
         	(and (eq (type textedit) 'LIST)
              	(setq n-textedit (nentselp (cadr textedit)))
              	(setq n-obj (car n-textedit))
              	(setq n-ent (entget n-obj))
              	(setq n-obj (vlax-ename->vla-object n-obj))
              	(cond ((= (cdr (assoc 0 n-ent)) "ATTRIB") ; Attribute
                     	(setq code (check-font-code (cdr (assoc 7 n-ent))))
                     	(if (eq (vla-get-mtextattribute n-obj) :vlax-false)
                      	(progn
                       	(setq dk nil dk (sendkeys "^+"))
                       	(cond ((= code "TCVN3") (sendkeys "^+{F2}"))
                             	((= code "UNICODE") (sendkeys "^+{F1}"))
                             	((= code "VNI") (sendkeys "^+{F3}")))))
                     	(vl-cmdf "eattedit" textedit)
                     	(if dk (sendkeys "^+")))
                    	((wcmatch (cdr (assoc 0 n-ent)) "TEXT,MTEXT") ; Text,Mtext in Block
                     	(if (or extract_clone (and (not extract_clone) (load "trexblk.lsp")))
                      	(progn
                       	(extract_clone n-textedit)
                       	(vla-put-visible n-obj :vlax-false)
                       	(entupd obj)
                       	(setq l-obj (entlast) font (cdr (assoc 7 n-ent)))
                       	(vl-cmdf "DDedit" l-obj "")
                       	(vla-put-textstring n-obj (cdr (assoc 1 (entget l-obj))))
                       	(vla-put-visible n-obj :vlax-true)
                       	(entdel l-obj)
                       	(entupd obj))
                      	(princ "Ban chua cai dat goi Express tool cho CAD\n")))))));cond
  	(Done-defun lst)
  	(setq textedit (entsel) obj (car textedit))))
(princ))
;;; Ham callback dieu khien bo go tieng viet
(defun callback-Unikey (reactor sysvar / code Crfont)
(if (= (car sysvar) "TEXTEDITOR") (sendkeys "^+"))
(if (> (getvar "TEXTEDITOR") 0)
 (progn
  (if font (setq Crfont font) (setq Crfont (getvar "textstyle")))
  (setq code (check-font-code Crfont))
  (cond ((= code "TCVN3") (sendkeys "^+{F2}"))
    	((= code "UNICODE") (sendkeys "^+{F1}"))
    	((= code "VNI") (sendkeys "^+{F3}")))
  (setq font nil))))
;;; Ham callback lay textstyle khi Double Click vao text
(defun callback-DoubleClick (reactor point / sset obj ss objtype)
(setq sset (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))))
(setq ss (vla-add sset "ThuyLinh313"))
(vla-selectatpoint ss (vlax-3d-point (car point)))
(if (> (vlax-get ss 'Count) 0)
 (progn
  (setq obj (vla-item ss 0) objtype (vlax-get obj 'ObjectName))
  (if (wcmatch objtype "AcDbText,AcDbMText")
(progn
	(setq font (vla-get-stylename obj))
	(sssetfirst nil (ssadd (vlax-vla-object->ename obj))))
(if (not (eq objtype "AcDbBlockReference"))
	(sssetfirst nil (ssadd (vlax-vla-object->ename obj)))))))
(vla-delete ss))
;;; Ham kiem tra bang ma cua textstyle (su dung true type font)
;;; style: String - ten cua textstlye kiem tra
(defun Check-Font-Code (style / ts font Bold Italic charSet PitchandFamily)
(setq ts (vlax-ename->vla-object (tblobjname "style" style)))
(vla-GetFont ts 'font 'Bold 'Italic 'charSet 'PitchandFamily)
(if (= font "") (setq font (vla-get-fontfile ts)))
(cond ((wcmatch (setq font (strcase font)) "ARIAL*,TAHOMA*,TIMES*,COURIER NEW,CAMBRIA,CONSOLAS") "UNICODE")
((wcmatch font ".VN*") "TCVN3")
((wcmatch font "VNI*") "VNI")))
;;; Ham senkeys
(defun SendKeys (keys / wscript)
(vlax-invoke-method (setq wscript (vlax-create-object "WScript.Shell")) 'sendkeys keys)
(vlax-release-object wscript))
;;; Ham bat loi Esc
(defun Start-defun (lst-var)
(defun *error* (msg)
(redraw)
(vl-cmdf "undo" "end")
(vl-cmdf "undo" "")
(princ));end
(vl-cmdf "undo" "begin")
(mapcar '(lambda(x) (list x (getvar x))) lst-var));end
;;;
(defun Done-defun (lst-var / )
(mapcar '(lambda (x) (setvar (car x) (cadr x))) lst-var)
(vl-cmdf "undo" "end")
(princ));end

  • Like 2
  • Vote tăng 10

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 ThuyLinh có thể chỉnh sửa để code của bạn có thể dùng cho các CAD đời thấp hơn không, như cách mà bạn phamngoctukts đã làm?

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

LoveLisp! Cái nick đã chỉ rõ rằng bạn có thể tự sửa lisp trên được mà. Bạn thử sửa theo hướng mà bạn Phamngoctukts đã làm ở trang 2 xem thế nào.

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

- Ban đầu (ver1.0) thì mình định nghĩa lại "ED" mục đích chỉ để lấy được ename của đối tượng text được chỉnh sửa. sau đó hàm callback sẽ căn cứ vào ename lấy được để kiểm tra bảng mã tương ứng của nó và truyền lệnh đến Unikey. (Phải làm bước này vì trong hàm callback ta không có cách gì để lấy được ename của đối tượng đang sửa)

- Đến ver 3.0 thì "ED" phải giải quyết rất nhiều công việc rồi, Nó có nhiệm vụ phân loại các kiểu đối tượng sửa, với mỗi loại thì nó đưa ra các ứng xử khác nhau cho phù hợp, mục đích cuối cùng là lấy được textstyle của đối tượng bị sửa rồi truyền cho hàm callback.

 

Lưu ý là: Mình muốn dùng reactor để viết code cho gọn và tăng khả năng tự động hóa cho toàn bộ hệ thống lệnh cad và lệnh lisp có liên quan. Các bạn có thể thay thế bằng các hàm lisp thông thường, nhưng trong trường hợp đó sẽ có khá nhiều lệnh phải can thiệp chứ không chỉ gói gọn trong 1 lệnh ED nữa. Ví dụ: các lệnh tạo text hay Mtext, hoặc nếu các lisp của bạn có chức năng tạo các đối tượng text bằng command thì cũng sẽ không tự động tích hợp chức năng này vào được. Hơi trừu tượng, nhưng nếu bạn có 1 hệ thống các lệnh tạo text theo chuẩn riêng của cty thì bạn sẽ thấy được ý nghĩa của việc sử dụng reactor trong trong lisp này.

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

Trong lisp của bạn nếu xóa bỏ function của lệnh ed đi thì lisp vẫn chạy bình thường. Với việc dùng ssgetfirst bạn hoàn toàn có thể gói gọn nó vào trong hàm callback.

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 post code đã sửa nên đi, có thể mình viết chưa tối ưu hoặc có thể ngược lại, bạn chưa hiểu hết ý đồ trong code của mình. Chúng ta cùng thảo luậ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

Version 3.0 vẫn chưa khắc phục được lỗi tự chuyển mã gõ text khi có 3 kiểu text khác nhau! Vì tính hay quên và "mổ cò" nên mong có 1 version dùng ngon là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

P/s a Thái và TLinh : có nhiều người theo dõi topic

@Ketxu: có chuyện gì thế hả ketxu?

@TL: không có cad để test nhưng đọc qua code thì anh chắc chắn là code trên của em không thể áp dụng cho Rtext. Lệnh ddedit không có hỗ trợ rtext đâu. Anh nhớ không nhầm thì autodesk phải viết riêng một lệnh để sửa rtext được tích hợp vào express.

bộ gõ Tiếng Việt của tác giả Kỳ Nam giải quyết rất tốt các chế độ gõ cho từng chương trình, từng cửa sổ con trong các chương trình sao em không dùng mà cứ phải là unikey nhi? Kết hợp với lisp này nữa là giải quyết được rất nhiều vấn đề đấy.

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

cho mình hỏi trong tỷ lệ vẽ cad mình vẽ tye lệ 1/100 nhưng mà nó nhỏ quá nhìn không thấy khi in ra thì nó nhỏ xíu nhìn không đẹp gì hết,

mình vẻ các chi tiết nhỏ nên các đường line ngắn vd như vẽ đoạn thẳng 0,5cm thì mình vẽ theo tỷ lệ 1/10 nhưng cale lên thi kích thước nó bị đổi khác nếu không cale thì không thấy đường

  • 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

- Mình có viết code trên cho Rtext đâu. Ban đầu thì cũng định viết cho đủ nhưng không dùng nên thôi. (mình dùng field chứ không dùng Rtext). Hướng dẫn sử dung mình ghi rõ từng loại đối tượng hỗ trợ rồi mà.

- Mình không thích và không dùng GoTiengViet vì:

(1) Nó quá nặng nề cho 1 chương trình chạy nền.

(2) không cho phép gõ chữ ư bằng w mà buộc phải gõ uw. không dễ mà thay đổi được thói quen này

(3) quá it người dùng GTV, nếu mình viết tiện ích trên cho bộ gõ này thì topic này lập ra không khác gì việc góp rác vào diễn đàn.

Thanks man!

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

LISP hay quá, thanks các bác.

Nhân tiện cho em hỏi, các bác có thể cung cấp cho em các biến môi trường khi đang edit các đối tượng khác được không, ví dụ khi đang edit MTEXT, BLOCK - giống như cái biến TEXTEDITOR trong bài ấy.

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 tìm cái lisp theo dõi sự thay đổi biến hệ thống khi sử dụng cad. Em Linh cũng phải sử dụng lisp đó của mình mới có thể cho ra được cái ứng dụng hay ho này, k thì viết bằng niềm tin :D

  • 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

×