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.
Jin Yong

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

Tue_NV    3.841

à đúng rồi, tại em cứ gõ như tiếng việt nên sau dấu : là phải cách cho nên mới sai. nhưng mà em dùng lệnh

Command: ai_editcustfile

Custom File to edit:

File could not be found.

nó vẫn chạy mà sao dùng:

Command: tue

nil (vẫn báo mà không hiện gì cả)

Lisp báo nil mà không hiện gì cả chứng tỏ là file Tue_NV.xls không nằm trong ổ C:\\

  • 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
tien2005    97

Làm sao để xác định góc nghiêng đường ghi kích thước của DIM?

Mình dùng code để chọn các dim Aligned (dim đứng, ngang xiên)

(ssget (list(cons 0 "DIMENSION")(cons -4 "<OR")(cons 70 32)(cons 70 33)(cons 70 64)(cons 70 65)(cons 70 128)(cons 70 129)(cons -4 "OR>"))

 

- Do chúng ta sẽ nhận được các bản vẽ từ nhiều nguồn khác nhau. Chằng may đường Dim (một hoặc nhiều Dim) nào đó có dxf14 trùng với dxf10 thì làm sao xác định được góc nghiêng đường ghi kích thước?

- nếu dùng (entget(car(nentsel))) cho DIM thì sẽ tính được góc nghiêng này qua dxf10 dxf11. Trong trường hợp này có cách nào để dùng nentsel cho các đối tượng trong tập chọn ssget không?

 

Ai biết xin chỉ giúp. Thanks

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 báo nil mà không hiện gì cả chứng tỏ là file Tue_NV.xls không nằm trong ổ C:\\

à tại em để trong thư viện của CAD trong ổ C mà em lại không sửa đường dẫn file. cảm ơn anh, em đã làm đượ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
Doan Van Ha    2.680

Góc nghiêng (tính bằng radian) của đường dim thứ i trong tập chọn ss:

(angle (cdr (assoc 11 (entget (ssname ss i)))) (cdr (assoc 10 (entget (ssname ss 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
ketxu    2.653

Dimaligned bạn lấy góc nghiêng qua dxf13 14, nó có trùng hay không cũng đâu có vấn đề gì ?

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
tien2005    97

Dimaligned bạn lấy góc nghiêng qua dxf13 14, nó có trùng hay không cũng đâu có vấn đề gì ?

Nếu dxf13 dxf14 đã bị sửa thì tính góc nghiêng này không đúng

 

Bình thường thì xét theo góc nghiêng của dxf14 dxf10, nhưng dxf13 và dxf14 có thể thay đổi không đều so với đường ghi kích thước (do người dùng tác động,...Mình đã gặp bản vẽ dim có đường gióng 2 bên không bằng nhau)

Nếu dxf14 trùng với dxf10 thì cách trên không xác định được góc nghiêng. Do đường ghi kích thước luôn luôn có (trừ khi nó bằng 0) nên mình muốn xét góc nghiêng qua đường ghi kích thước là tổng quát hơn

Như trên mình đã nêu: nếu dùng (entget(car(nentsel))) cho DIM thì sẽ tính được góc nghiêng này qua dxf10 dxf11. Trong trường hợp này có cách nào để dùng nentsel cho các đối tượng trong tập chọn ssget không?. Hoặc có thể tính góc nghiêng thông qua các Entity names cảu DIM trong tập chọn ssget?

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
duy782006    1.377

Cách làm với từng đối tượng trong tập chọn bác Hà đã nói bên trê rồi đó thô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
tien2005    97

Cách làm với từng đối tượng trong tập chọn bác Hà đã nói bên trê rồi đó thôi.

 

Mình cũng đã trả lời rồi Bạn, dxf11 thường không nằm trên đường ghi kich thước nên tính ra góc nghiêng sẽ không đúng

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
Doan Van Ha    2.680

Mình cũng đã trả lời rồi Bạn, dxf11 thường không nằm trên đường ghi kich thước nên tính ra góc nghiêng sẽ không đúng

Bạn test cái này xem sao:

(defun C:HA( / ss i pd pc goc lstgoc)
(setq ss (ssget '((0 . "DIMENSION"))))
(setq i (- (sslength ss) 1))
(repeat (sslength ss)
 (setq pd (cdr (assoc 10 (entget (entnext (entnext (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget (ssname ss i) (list "*")))))))))))))
 (setq pc (cdr (assoc 10 (entget (entnext (entnext (entnext (cdr (assoc -2 (tblsearch "BLOCK" (cdr (assoc 2 (entget (ssname ss i) (list "*"))))))))))))))
 (cond
  ((or (= (getvar "dimtad") 0) (= (getvar "dimtad") 1))
(setq goc (angle pd pc)))
  (T (setq goc (- (angle pd pc) (/ pi 2)))))
 (setq lstgoc (cons goc lstgoc))
 (setq i (1- i)))
lstgoc)

  • 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
gia_bach    1.442

Làm sao để xác định góc nghiêng đường ghi kích thước của DIM?

Mình dùng code để chọn các dim Aligned (dim đứng, ngang xiên)

...................

 

 

Dimaligned bạn lấy góc nghiêng qua dxf13 14, nó có trùng hay không cũng đâu có vấn đề gì ?

 

 

Nếu dxf13 dxf14 đã bị sửa thì tính góc nghiêng này không đúng

...

Nếu dxf13 dxf14 đã bị sửa -> đường dim trở thành Rotate dimension -> lấy dxf 50.

(ssget '((0 . "DIMENSION") (-4 . "<OR")(70 . 0)(70 . 32)(70 . 160) (-4 . "OR>") ))

  • 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
tien2005    97

@Doan Van Ha: Thanhks, đã giải quyết được vấn đề, không nghĩ rằng nó nằm trong block của dim

@gia_bach: theo dxf50 cũng không ổn, các dim nghiêng đều có dxf 50 = 0

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
gia_bach    1.442

@Doan Van Ha: Thanhks, đã giải quyết được vấn đề, không nghĩ rằng nó nằm trong block của dim

@gia_bach: theo dxf50 cũng không ổn, các dim nghiêng đều có dxf 50 = 0

Bạn hiểu sai ý tôi rồi !

 

Với các dim nghiêng AlignedDimension dùng cách của Ketxu : dxf13-14.

tôi chỉ viết là : với các Rotate dimension -> lấy dxf 50

dòng (ssget '((0 . "DIMENSION") (-4 . "<OR")(70 . 0)(70 . 32)(70 . 160) (-4 . "OR>") )) làm sao chọn được dim nghiêng có dxf50=0 ?

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
Doan Van Ha    2.680

Bác nào biết thì chỉ giùm với: dùng lisp làm sao để chọn được 1 list các folder?

Ghi chú: chọn trực tiếp folder chứ không thông qua việc chọn file để lấy tên folder.

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
ketxu    2.653

Bác nào biết thì chỉ giùm với: dùng lisp làm sao để chọn được 1 list các folder?

Ghi chú: chọn trực tiếp folder chứ không thông qua việc chọn file để lấy tên folder.

(acet-ui-pickdir) nếu bác dùng Express

(dos_getdir) nếu dùng Dos_lib

hoặc bác tìm cách sử dụng browse for folder từ VBA rồi chuyển qua VL. như ví dụ của LM ở Link

  • 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
Doan Van Ha    2.680

Hình như không thể tick để chọn nhiều folder từ dialoge_folder mà mỗi lần chỉ chọn được 1 folder thôi Ket à?

Bác đang muốn khi dialoge_folder hiện ra thì có thể tick để chọn được cùng lúc nhiều folder, sau đó trả về list các folder được chọ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
ketxu    2.653

Vậy thì bác đành phải viết 1 DCL giả lập Browse, đối số là thư mục gốc (nếu nil thì đặt bằng C:\), dùng action cho list_box với reason kích đúp là liệt kê toàn bộ Folder bên trong (vl-directory-files với đối số Dir = -1), list box có Multi_select = true

(cháu chưa test nhưng nghĩ là sẽ làm được ^^)

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

Copy file này paste vào file kia bình thường thôi.

A cho e hoi là 2 lisp của em: mỗi lisp đều có một lệnh, giờ e làm như A thì Lisp gọp lại không hiểu được lệnh!

Mong được sự giúp đỡ

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
Doan Van Ha    2.680

Khi copy và paste xong, hoặc:

- Bạn save (chứ không phải saves).

- Bạn saves: khi đó hãy nhớ chọn "Saves as type" là "All file" + "Encoding" là "ANSI" + Tên file ví dụ là "Lisp_chung.lsp".

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
matusalem    1

Khi copy và paste xong, hoặc:

- Bạn save (chứ không phải saves).

- Bạn saves: khi đó hãy nhớ chọn "Saves as type" là "All file" + "Encoding" là "ANSI" + Tên file ví dụ là "Lisp_chung.lsp".

 

Chao A!

em làm lại theo như A hướng dẫn nhưng không được

1. khi e copy code của 1 Lisp rồi ghép vào code của Lisp khác thì khi lưu lại thành Lisp mới. Lisp mới chỉ hiểu được 1 lệnh của 1 trong 2 Lisp củ (tùy vào mình gõ lệnh của Lisp 1 hay Lisp 2 thì Lisp mới hiểu lệnh của Lisp đó)

2. Khi mình ghép Lisp lại, làm sao đặt lệnh cho Lisp mới

Nhờ A chỉ bảo Ah!

Nếu có thể A mail cho e rõ hơn vào địa chỉ: Thanhphuc.bd@gmail.com nha A!

Mong nhận được hồi âm của A

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    3.841

 

Chao A!

em làm lại theo như A hướng dẫn nhưng không được

1. khi e copy code của 1 Lisp rồi ghép vào code của Lisp khác thì khi lưu lại thành Lisp mới. Lisp mới chỉ hiểu được 1 lệnh của 1 trong 2 Lisp củ (tùy vào mình gõ lệnh của Lisp 1 hay Lisp 2 thì Lisp mới hiểu lệnh của Lisp đó)

2. Khi mình ghép Lisp lại, làm sao đặt lệnh cho Lisp mới

Nhờ A chỉ bảo Ah!

Nếu có thể A mail cho e rõ hơn vào địa chỉ: Thanhphuc.bd@gmail.com nha A!

Mong nhận được hồi âm của A

Mình nghĩ cách copy và ghép của bạn có vấn đề

Phiền bạn upload file Lisp mà bạn đã copy và ghép lên đây 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
Doan Van Ha    2.680

Đây là lisp ghép lại. Mọi thứ vẫn ổn chứ không như bạn nói.

(defun *error* (msg)
 (princ "error: ")
 (princ msg)
 (princ)
)
(command "layer" "m" "Ranh_toado" "c" 6 "" "")
(defun Wdis (p1 p2 / dis ang point point1)
 (setq dis (distance p1 p2))
 (setq ang (angle p1 p2))
 (if (and (> ang (/ Pi 2)) (< ang (* Pi 1.5)) )
(progn
 	(setq ang (+ Ang Pi))
 	(setq Point (polar p2 ang (/ dis 2.0)))
 	(setq Point1 (polar point (+ (/ pi 2) ang) (* 0.25 (/ TileBdHT 500))))

)
(progn
(setq Point (polar p1 ang (/ dis 2.0)))
(setq Point1 (polar point (+ (/ pi 2) ang) (* 0.25 (/ TileBdHT 500))))
)
 )
 (command "Text" "S" "vaptimn0" "c" point1 (/ TileBdHT 500) (* (/ ang Pi) 180) (rtos dis 2 2) )
)
(defun ssgetLayer( La1 La2 / ss)
 (setq ss (ssget "X" (list
                    	(cons -4  "<OR") 
                      	(cons -4  "<AND") 
                        	(cons 8 La1) 
                        	(cons 0  "LWPOLYLINE")
                      	(cons -4  "AND>") 
                      	(cons -4  "<AND") 
                        	(cons 8 La1) 
                        	(cons 0  "LINE")
                      	(cons -4  "AND>") 
                      	(cons -4  "<AND") 
                        	(cons 8 La2) 
                        	(cons 0  "LWPOLYLINE")
                      	(cons -4  "AND>") 
                      	(cons -4  "<AND") 
                        	(cons 8 La2) 
                        	(cons 0  "LINE")
                      	(cons -4  "AND>") 
                    	(cons -4  "OR>") 
                  	)
 ))
 ss
)
(defun pointpl (name m k / namem i bien t1 p1 diem)
(setq namem name)
(setq i 1)
(while (<= i k)
(progn
	(setq bien (assoc m namem))
	(setq t1 (member bien namem))
	(setq p1 (car t1))
	(setq namem (cdr t1))
	(setq diem (cdr p1))
	(setq i (+ 1 i))
)
)
diem
)
(defun c:Toado( / i k luuxy st p xoa)
(setvar "cmdecho" 0)
(setq st (ssgetLayer "Ranh_toado" "Ranh_38") )
(if (/= st  nil)
(progn
(if (null (tblsearch "style" "vaptimn0"))
	(command "_style" "vaptimn0" "Vavon.ttf" "" "" "" "" ""))
(if (null (tblsearch "style" "vhelveb"))
	(command "_style" "vhelveb" "vhelveb.ttf" "" "" "" "" ""))
(if (null (tblsearch "layer" "sohieu_diem"))
	(command "_layer" "n" "sohieu_diem" ""))
(command "_layer" "c" "2" "sohieu_diem" "")
(if (null (tblsearch "layer" "canh"))
	(command "_layer" "n" "canh" ""))
(command "_layer" "c" "3" "canh" "")
(if (null (tblsearch "layer" "bang_toado"))
	(command "_layer" "n" "bang_toado" ""))
(command "_layer" "c" "7" "bang_toado" "")
(command "_layer" "c" "6" "Ranh_38" "")
(command "_layer" "c" "6" "Ranh_toado" "")
(if (null (tblsearch "layer" "Polygon"))
	(command "_layer" "n" "Polygon" ""))
(command "_layer" "c" "8" "Polygon" "")
(setq r1 (getvar "USERR1"))
(setq TileBdHT (getreal (strcat "\nMau So Ti Le Cua BDHT" "(" (rtos r1 2 0) "):")))
(if (= TileBdHT nil)
	(setq TileBdHT r1))
(setvar "USERR1" TileBdHT)

(setvar "blipmode" 0)
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(setq p (getpoint "\n Pick"))
(command "_layer" "s" "Polygon" "")
(if (/= p nil)
	(command "-Boundary" "a" "b" "n" st "" "" p "" )
)
(setq luuxy (entget (entlast)))
(setq p (getpoint "\n Diem dat bang toa do :"))
;	(entdel (entlast))
(setq k (cdr (assoc 90 luuxy)))
(if (/= p nil)
	(progn
		(setq p01 p)
		(setq p02 (mapcar '+ p '(10.0  0.0 0.0)))
		(setq p03 (mapcar '+ p '(22.5 -2.5 0.0)))
		(setq p04 (mapcar '+ p '(35.0  0.0 0.0)))
		(setq p05 (mapcar '+ p '(45.0  0.0 0.0)))
		(setq p06 (mapcar '+ p '(0.0 -5.0 0.0)))
		(setq p07 (mapcar '+ p '(10.0 -2.5 0.0)))
		(setq p08 (mapcar '+ p '(35.0 -2.5 0.0)))
		(setq p09 (mapcar '+ p '(45.0 -5.0 0.0)))
		(if (<= k 10)		   
			(progn
				(setq p10 (mapcar '+ p '(0.0 -40.0 0.0)))
				(setq p11 (mapcar '+ p '(10.0 -40.0 0.0)))
				(setq p12 (mapcar '+ p '(22.5 -40.0 0.0)))
				(setq p13 (mapcar '+ p '(35.0 -40.0 0.0)))
				(setq p14 (mapcar '+ p '(45.0 -40.0 0.0)))
			)
			(progn
				(setq ty (* -1 (+ 10.0 (* k 3))))
				(setq t0 (list 0.0 ty 0.0))
				(setq t1 (list 10.0 ty 0.0))
				(setq t2 (list 22.5 ty 0.0))
				(setq t3 (list 35.0 ty 0.0))
				(setq t4 (list 45.0 ty 0.0))
				(setq p10 (mapcar '+ p t0))
				(setq p11 (mapcar '+ p t1))
				(setq p12 (mapcar '+ p t2))
				(setq p13 (mapcar '+ p t3))
				(setq p14 (mapcar '+ p t4))
			)
		)
		(command "layer" "s" "bang_toado" "")
		(command "Line" p01 p05 "")
		(command "Line" p01 p10 "")
		(command "Line" p02 p11 "")
		(command "Line" p03 p12 "")
		(command "Line" p04 p13 "")
		(command "Line" p05 p14 "")
		(command "Line" p07 p08 "")
		(command "Line" p06 p09 "")
		(command "Line" p10 p14 "")
(command "Text" "S" "vhelveb" "j" "M" (mapcar '+ p '(22.5 2.0 0.0)) 1.25 0 "BAÛNG KEÂ TOÏA ÑOÄ VN2000")
(command "Text" "S" "vhelveb" "j" "M" (mapcar '+ p '(5.0 -1.5 0.0)) 1.15 0 "Soá hieäu")
(command "Text" "S" "vhelveb" "j" "M" (mapcar '+ p '(5.0 -3.5 0.0)) 1.15 0 "ñieåm")
(command "Text" "S" "vhelveb" "j" "M" (mapcar '+ p '(22.5 -1.25 0.0)) 1.15 0 "Toïa ñoä")
(command "Text" "S" "vhelveb" "j" "M" (mapcar '+ p '(16.25 -3.75 0.0)) 1.15 0 "X(m)")
(command "Text" "S" "vhelveb" "j" "M" (mapcar '+ p '(28.75 -3.75 0.0)) 1.25 0 "Y(m)")
(command "Text" "S" "vhelveb" "j" "M" (mapcar '+ p '(40.0 -2.5 0.0)) 1.25 0 "Caïnh")
	)
)
(setq i 1)
(while (<= i k)
	(progn
		(setq toado (pointpl luuxy 10 i))
		(setq x (rtos (car toado) 2 3))
		(setq y (rtos (cadr toado) 2 3))
		(command "layer" "s" "sohieu_diem" "")
		(setq doi (list (* 0.2 (/ TileBdHT 500)) (* 0.2 (/ TileBdHT 500)) 0.0))
		(command "Text" "S" "vaptimn0" (mapcar '+ toado doi) (/ TileBdHT 500) 0 i)
		(command "donut" "0.0" (* 0.25 (/ TileBdHT 500)) toado "")		   
		(setq tsh (list 5.0 (- (* -3 i) 4.5) 0.0))
		(setq txx (list 16.25 (- (* -3 i) 4.5) 0.0))
		(setq tyy (list 28.75 (- (* -3 i) 4.5) 0.0))
		(setq tgc (list 40.0 (- (* -3 i) 3.0) 0.0))
		(setq psh (mapcar '+ p tsh))
		(setq pxx (mapcar '+ p txx))
		(setq pyy (mapcar '+ p tyy))
		(setq pgc (mapcar '+ p tgc))
		(if (= i 1)
			(progn
				(setq toado1 toado)
				(setq x1 (rtos (car toado1) 2 3))
				(setq y1 (rtos (cadr toado1) 2 3))
			)
		)
		(if (>= i 2)
(progn
(setq canh (distance toado0 toado))
(command "layer" "s" "bang_toado" "")
(command "Text" "S" "vaptimn0" "j" "M" pgc 1.2 0 (rtos canh 2 2) )
(command "layer" "s" "canh" "")
(wdis toado0 toado)
)
		)
		(command "layer" "s" "bang_toado" "")
		(command "Text" "S" "vaptimn0" "j" "M" psh 1.2 0 i)
		(command "Text" "S" "vaptimn0" "j" "M" pxx 1.2 0 y)
		(command "Text" "S" "vaptimn0" "j" "M" pyy 1.2 0 x)
		(setq toado0 toado)
		(setq i (+ i 1))
	)
)
(command "layer" "s" "canh" "")
(wdis toado toado1)
(setq canh (distance toado toado1))
		(setq tsh (list 5.0 (- (* -3 (+ k 1)) 4.5) 0.0))
		(setq txx (list 16.25 (- (* -3 (+ k 1)) 4.5) 0.0))
		(setq tyy (list 28.75 (- (* -3 (+ k 1)) 4.5) 0.0))
		(setq tgc (list 40.0 (- (* -3 (+ k 1)) 3.0) 0.0))
		(setq psh (mapcar '+ p tsh))
		(setq pxx (mapcar '+ p txx))
		(setq pyy (mapcar '+ p tyy))
		(setq pgc (mapcar '+ p tgc))
(command "layer" "s" "bang_toado" "")
(command "Text" "S" "vaptimn0" "j" "M" pgc 1.2 0 (rtos canh 2 2) )
(command "Text" "S" "vaptimn0" "j" "M" psh 1.2 0 "1")
(command "Text" "S" "vaptimn0" "j" "M" pxx 1.2 0 y1)
(command "Text" "S" "vaptimn0" "j" "M" pyy 1.2 0 x1)
(setvar "osmode" old)
)	;(end progn)
)	;(end if)
(if (= st nil)
(progn
	(setvar "cmdecho" 1)
	(princ "Khong co layer Ranh_toado")
)
)
(command "_layer" "s" "0" "")

)
(defun c:capnhat()
(setq is (ssgetLayer "Polygon" "Polygon") )
(setq namecn (getfiled "FILE CAP NHAT" "" "DWG" 3))
(command "Wblock" namecn "" '(0 0) is "")
(command "oops")
(command "save")
;	(setq namegoc (getfiled "FILE BAN DO GOC" "" "DWG" 3))
(setq TenQuan (strcat " " (getString T "\nTen Quan : ")))
(setq TenPhuong (strcat " " (getString T "\nTen Phuong : ")))
(setq TenTo (strcat " " (getString T "\nTo So : ")))
(setq namegoc (strcat "q" TenQuan "-" TenPhuong "-" TenTo ".dwg"))
(command "open" namegoc)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:hl( / k k1 k2 st X Xt Xd Y Yt Yd p1 p2 p3 old oold)
 (if (null (tblsearch "style" "arial"))
 (command "_style" "arial" "arial.ttf" "" "" "" "" "" ""))
 (setq old (getvar "textstyle"))
 (setq oold (getvar "osmode"))
 (setvar "osmode" 513)
 (setq r (getvar "USERR1"))
 (setq TileBd (getint (strcat "\nMau So Ti Le Cua Ban Ve" "(" (rtos r 2 0) "):")))
 (if (= TileBd nil)
(setq TileBd r))
 (setvar "USERR1" TileBd)
 (initget "Y")
 (setq opt (getkword "\nBan do co xoay khung khong? <N>: "))
 (setq p1 (getpoint "\nDiem dau (goc khung): "))
 (setq z1 (getpoint "\nDiem cuoi(goc khung): "))

 (setq x1 (car p1))
 (setq y1 (cadr p1))
 (setq x2 (car z1))
 (setq y2 (cadr z1))
 (setq na (abs(- x2 x1)))
 (setq do (abs(- y2 y1)))
 (setq onale (/ na (/ TileBD 10)))
 (setq odole (/ do (/ TileBD 10)))
 (setq ona (fix onale))
 (setq odo (fix odole))

 (setq LayerOld (getvar "clayer"))
 (if (null (tblsearch "layer" "hl"))
(command "_layer" "m" "hl" ""))
(command "_layer" "s" "hl" "")
(command "_layer" "c" "5" "hl" "")
 (setvar "osmode" 0)
 (setq k (/ (cadr p1) (/ TileBd 10)))
 (setq b (rtos (cadr p1) 2 0))
 (setq c (rtos (car p1) 2 0))
 (setq k1 (rtos k 2 0))
 (if (< (atoi k1) k)
	(progn
  	(setq k11 (+ (atoi k1) 1))
  	(setq k1 (rtos k11 2 0))
	)
 )
 (setq k2 (* (/ TileBd 10) (atoi k1)))
 (setq p3 (list (car p1) k2 0.0))
 (setq st (strcat (substr b 6 1) (substr b 7 1)))
 (if (= opt nil)
	(progn
 (setq i (+ odo 1))
 (setq ngang (/ onale 10))
 (setq doc (/ odole 10))
 (if (> (- k2 (cadr p1)) (* 0.03 TileBd))
	(setq i odo)
 )
 	)
 )

 (if (/= opt nil)
	(progn
 (setq ngang (/ odole 10))
 (setq doc (/ onale 10))
 (setq i (+ ona 1))
 (if (> (- k2 (cadr p1)) (* 0.02 TileBd))
	(setq i ona)
 )
 	)
 )
 (setq m 1)
 (setq ii i)
 (while (<= m i)
 	(progn
 (setq X (rtos (cadr p3) 2 0))
 (setq Xt (strcat (substr X 1 1) (substr X 2 1) (substr X 3 1) (substr X 4 1)))
 (setq Xd (strcat (substr X 5 1) (substr X 6 1) (substr X 7 1)))
 (setq p31 (list (* -0.01 TileBd) 0 0))
 (setq p41 (list (* 0.005 TileBd) (* 0.001 TileBd) 0))
 (setq p51 (list (* 0.005 TileBd) (* -0.003 TileBd) 0))
 (setq p4 (mapcar '+ p3 p31))
 (setq p5 (mapcar '+ p4 p41))
 (setq p6 (mapcar '+ p4 p51))
 (command "_line" p4 p3 "")
 (if (= opt nil)
	(progn
 (command "_text" "s" "arial" "j" "C" p5 (* 0.002 TileBd) "0" Xt)
 (command "_text" "s" "arial" "j" "C" p6 (* 0.002 TileBd) "0" Xd)
	)
 )
 (if (/= opt nil)
	(progn
 (setq p41 (list (* 0.003 TileBd) 0 0))
 (setq p41 (mapcar '+ p4 p41))
 (command "_text" "s" "arial" "j" "R" p41 (* 0.002 TileBd) "90" (strcat Xt " "))
 (command "_text" "s" "arial"  p41 (* 0.002 TileBd) "90" (strcat " " Xd))
 	)
 )
 (setq p31 (list (* ngang TileBd) 0 0))
 (setq p33 (mapcar '+ p3 p31))
 (setq p44 (mapcar '+ p4 p31))
 (setq p55 (mapcar '+ p5 p31))
 (setq p66 (mapcar '+ p6 p31))
 (command "_line" p44 p33 "")
 (if (= opt nil)
	(progn
 (command "_text" "s" "arial" "j" "C" p55 (* 0.002 TileBd) "0" Xt)
 (command "_text" "s" "arial" "j" "C" p66 (* 0.002 TileBd) "0" Xd)
	)
 )
 (if (/= opt nil)
	(progn
 (setq p331 (list (* -0.001 TileBd) 0 0))
 (setq p331 (mapcar '+ p33 p331))
 (command "_text" "s" "arial" "j" "R" p331 (* 0.002 TileBd) "90" (strcat Xt " "))
 (command "_text" "s" "arial"  p331 (* 0.002 TileBd) "90" (strcat " " Xd))
 	)
 )
 (setq p31 (list 0 (* 0.1 TileBd) 0))
 (setq p3 (mapcar '+ p3 p31))
 (setq m (+ 1 m))
 	)
  )
 (setq j (/ (car p1) (/ TileBd 10)))
 (setq j1 (rtos j 2 0))
 (if (< (atoi j1) j)
	(progn
  	(setq j11 (+ (atoi j1) 1))
  	(setq j1 (rtos j11 2 0))
	)
 )
 (setq j2 (* (* 0.1 TileBd) (atoi j1)))
 (setq q3 (list j2 (cadr p1) 0.0))
 (setq st (strcat (substr c 5 1) (substr c 6 1)))
 (if (= opt nil)
	(progn
 (setq ngang (/ onale 10))
 (setq doc (/ odole 10))
 (setq i (+ ona 1))
 (if (> (- j2 (car p1)) (* 0.02 TileBd))
	(setq i ona)
 )
	)
 )
 (if (/= opt nil)
	(progn
 (setq ngang (/ odole 10))
 (setq doc (/ onale 10))
 (setq i (+ odo 1))
 (if (> (- j2 (car p1)) (* 0.03 TileBd))
	(setq i odo)
 )
	)
 )
 (setq m 1)
 (setq jj i)
 (while (<= m i)
 	(progn
 (setq Y (rtos (car q3) 2 0))
 (setq Yt (strcat (substr Y 1 1) (substr Y 2 1) (substr Y 3 1)))
 (setq Yd (strcat (substr Y 4 1) (substr Y 5 1) (substr Y 6 1)))
 (setq q31 (list 0 (* -0.01 TileBd) 0))
 (setq q41 (list 0 (* 0.0005 TileBd) 0))
 (setq q4 (mapcar '+ q3 q31))
 (setq q5 (mapcar '+ q4 q41))
 (command "_line" q4 q3 "")
 (if (= opt nil)
(progn
 (command "_text" "s" "arial" "j" "R" q5 (* 0.002 TileBd) "0" (strcat Yt " "))
 (command "_text" "s" "arial" q5 (* 0.002 TileBd) "0" (strcat " " Yd))
)
)
 (if (/= opt nil)
 	(progn
 (setq q555 (list (* -0.001 TileBd) (* 0.005 TileBd) 0))
 (setq q666 (list (* 0.003 TileBd) (* 0.005 TileBd) 0))
 (setq q5551 (mapcar '+ q5 q555))
 (setq q6661 (mapcar '+ q5 q666))
 (command "_text" "s" "arial" "j" "C" q5551 (* 0.002 TileBd) "90" Yt)
 (command "_text" "s" "arial" "j" "C" q6661 (* 0.002 TileBd) "90" Yd)
  	)
 )
 (setq q31 (list 0 (* doc TileBd) 0))
 (setq q41 (list 0 (* (+ doc 0.0065) TileBd) 0))
 (setq q33 (mapcar '+ q3 q31))
 (setq q44 (mapcar '+ q4 q31))
 (setq q55 (mapcar '+ q5 q41))
 (command "_line" q44 q33 "")
 (if (= opt nil)
(progn
 (command "_text" "s" "arial" "j" "R" q55 (* 0.002 TileBd) "0" (strcat Yt " "))
 (command "_text" "s" "arial" q55 (* 0.002 TileBd) "0" (strcat " " Yd))
)
)
 (if (/= opt nil)
(progn
 (setq q555 (list (* -0.001 TileBd) (* 0.005 TileBd) 0))
 (setq q666 (list (* 0.003 TileBd) (* 0.005 TileBd) 0))
 (setq q5551 (mapcar '+ q44 q555))
 (setq q6661 (mapcar '+ q44 q666))
 (command "_text" "s" "arial" "j" "C" q5551 (* 0.002 TileBd) "90" Yt)
 (command "_text" "s" "arial" "j" "C" q6661 (* 0.002 TileBd) "90" Yd)
)
 )
 (setq q31 (list (* 0.1 TileBd) 0 0))
 (setq q3 (mapcar '+ q3 q31))
 (setq m (+ 1 m))
 	)
 )
 (setq tl TileBd)
 (setq goc (list j2 k2 0))
 (setq gocd goc)
 (setq n 1)
 (while (<= n ii)
  (progn
	(setq m 1)
 (setq gocn gocd)
	(while (<= m jj)
(progn
 (setq r gocn)
 (setq r1 (list (* -0.0025 tl) 0 0))
 (setq r2 (list (*  0.0025 tl) 0 0))
 (setq r3 (list 0 (* -0.0025 tl) 0))
 (setq r4 (list 0 (*  0.0025 tl) 0))
 (setq r11 (mapcar '+ r r1))
 (setq r22 (mapcar '+ r r2))
 (setq r33 (mapcar '+ r r3))
 (setq r44 (mapcar '+ r r4))
 (command "_line" r11 r22 "")
 (command "_line" r33 r44 "")
 (setq aa (list (* 0.1 tl) 0 0))
 (setq gocn (mapcar '+ gocn aa))
 (setq m (+ 1 m))
)
	)
	(setq bb (list 0 (* 0.1 tl)  0))
	(setq gocd (mapcar '+ gocd bb))
	(setq n (+ 1 n))
  )
 )
 (setvar "clayer" LayerOld)
 (setvar "osmode" oold)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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
Doan Van Ha    2.680

Tôi trích xuất values của block attributes, viết bằng tiếng Việt Unicode, nhưng:

- Khi xuất ra trên cad thì nó vẫn ra tiếng Việt như đã ghi trong values (VD: "MẶT BẰNG").

- Còn khi xuất ra file (xls, csv) thì nó chuyển thành unicode hexa (VD: "M\U+1EB6T B\U+1EB0NG"). Ai biết cách để nó vẫn giữ nguyên tiếng Việt mà không đổi qua hecxa xin chỉ giùm. Thanks!

P/S: hình như bác Gia_bach rành cái này. Mà vừa test thử "Exblk.vlx" (phiên bản mới nhất) của bác cũng bị như vậ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

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


×