Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
duyhung

Cho mình hỏi về lisp này với !

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

Lisp chuyển tất cả các đối tượng trong bản vẽ 1 màu là lisp colorx.

Điều mình thắc mắc là khi nó chuyển thì tất cả các text có chữ tiếng việt đều bị lỗi phông.

http://www.cadviet.com/forum/index.php?showtopic=27683

Có khắc phục được lỗi này không vậy các 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

Mình chưa thấy trong code có đoạn nào làm ảnh hưởng đến Text TV.Code của người khác nên đọc hơi rối ^^ Hay bạn thử qua bên này dùng thử cái này, rồi có gì mình fix tiếp theo ý bạn ^^

Clean

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 chưa thấy trong code có đoạn nào làm ảnh hưởng đến Text TV.Code của người khác nên đọc hơi rối ^^ Hay bạn thử qua bên này dùng thử cái này, rồi có gì mình fix tiếp theo ý bạn ^^

Clean

Thanks bạn ketxu 2 lisp kết hợp gần như hoàn hảo

Mỗi tội còn vấn đề trong block thì vẫn chưa chuyển sang màu 8. text trong block att và các hatch trong block cũng chưa chuyể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

Chào buổi sáng cả nhà.

Đây là file kết quả mà đã dùng 2 lisp trên nhưng vẫn còn 2 đối tượng là block có hatch và text trong block att là chưa chuyển sang màu 8.

Vấn đề block hình như mình tìm ra được nhưng block att thì chưa, :)

Mọi người test thử nhé

http://www.cadviet.com/upfiles/3/test_9.dwg

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

Chào bạn duyhung.Mình vừa đi làm về ^^. Dạo này đi làm k onl đc ^^.

Mình fix bên dưới, bạn test thử xem sao. Code k ưng ý lắm, n mà xơi đc ^^

 

;free lisp from cadviet.com @ ketxu
;updated 7/3 : attblock
(defun c:clear()
(vl-load-com)
(command "undo" "be")
(setq nla  "Architech")
(if (not (tblsearch "layer" nla))(command "layer" "n" nla "c" "8" nla "lt" "continuous" nla ""))
(setvar "clayer" nla)
(command "change" (ssget "X") "" "p" "la" nla "c" "8" "")
(if (ssget "x" '((0 . "INSERT")(66 . 1)))
 (progn
	(setq adoc (vla-get-activedocument (vlax-get-acad-object))
		  ss (vla-get-activeselectionset adoc)
	)
    (vlax-for block (vla-get-blocks adoc)	
		(if (not (wcmatch (strcase (vla-get-name block) t) "*_space*")) 
			(vlax-for   ent block 
				(progn			
				(vla-put-color ent "8")
				(vla-put-layer ent "Architech")
				)    
			) 
		) 
	)
	(vlax-for attblock ss
		(setq atts (vlax-invoke attblock 'getattributes))
		(foreach att atts
			(vla-put-color att 8)
			(vla-put-layer att "Architech")
		)
	)   
  );end progn
 );end if
(acet-sysvar-set (list "dimclrt" 256 "dimclre" 256 "dimclrd" 256 "cmdecho" 0 "INSUNITS" 4 "INSUNITSDEFSOURCE" 4 "INSUNITSDEFTARGET" 4)) 
(command "dim1" "update" (ssget "X" '((0 . "Leader"))) "")	
(vla-regen adoc acactiveviewport) 
(command "-purge" "a" "" "N")
(command "undo" "e") 
(princ))

  • 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

Cảm ơn bạn ketxu lisp dùng ổn rồi! Hj đọc lisp của bạn mà chưa rõ được mô tê j cả chỉ biết dùng thôi.

À tiện đây cho mình hỏi muốn lấy giá trị số trong text or mtext thì phải viết ntn? Mình viết 1 chút lisp cho mình như này:

 

(defun c:cali ()

(setvar "CMDECHO" 0)

(setq csdl (list 1 2 3 4 6 10 16 20 25 32 40 50 63 80 100 125 160 200 250 300 400 500 630 800 1000 1250))

(setq s (getreal "\nCho cong suat cua lo dien (kw): "))

(setq cosfi (getreal "\nCho cosfi cua lo dien (kw): "))

(setq i (/ s (* 1.732 0.38 cosfi)))

(setq a i)

(setq j 0)

(setq ds nil)

(while (setq x (nth j csdl))

(if

(and (> (- x a) 0) (< (- x a) 20))

(setq ds (append (list x)))

)

(setq j (1+ j))

)

(princ "\n Dong dien tinh toan cua lo: ")

(princ (fix i))

(princ "A")

(princ "\n AT tinh toan cua lo: ")

(setq kq (car ds))

(princ kq)

(princ "A")

(princ)

)

 

Mình muốn thay vì nhập công suất ta có thể lấy giá trị của text có sẵn để đưa vào tính toán (là các con số), bạn có thể gỡ bí này cho mình được khô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

Nội dung của text chứa trong mã dxf 1 của nó. Bạn có thể lấy nó ra bằng dòng :

(cdr (assoc Id (entget Obj)))

Trong đó Id là mã dxf ( ở đây là 1), Obj là ename của đối tượng Text (ở đây bạn muốn kich chọn, tức dùng (car(entsel)) ). Kết quả lấy đc ở dạng string, bạn dùng atof để chuyển nó về real nhé.Như vậy, bạn có thể sửa lại lisp của bạn như sau :

 

(defun c:cali ()

(setvar "CMDECHO" 0)

(setq s (atof (cdr (assoc 1 (entget(car(entsel "\n Chon cong suat : " ))))))

cosfi (getreal "\nCho cosfi cua lo dien (kw): ")

i (/ s (* 1.732 0.38 cosfi))

a i

j 0

ds nil

csdl (list 1 2 3 4 6 10 16 20 25 32 40 50 63 80 100 125 160 200 250 300 400 500 630 800 1000 1250)

)

(while (setq x (nth j csdl))

(if

(and (> (- x a) 0) (< (- x a) 20))

(setq ds (append (list x)))

)

(setq j (1+ j))

)

(princ "\n Dong dien tinh toan cua lo: ")

(princ (fix i))

(princ "A")

(princ "\n AT tinh toan cua lo: ")

(setq kq (car ds))

(princ kq)

(princ "A")

(princ)

)

P/S : bạn thử kiểm tra lại vòng lặp của bạn, mình thấy hình như nó chưa làm được đúng việc bạn muốn hay sao đó ^^. Chúc bạn thành cô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

Cảm ơn bạn ketxu, mình đã chọn được đối tượng text rồi. Cái vòng lặp này mình cũng đang rối tại vì làm việc với string này tạo list mình chưa quen, mà giải thuật của mình cũng chưa ổn lắm.Hj để mình mò tiếp vậy có j thắc mắc sẽ thọ giáo bạn sau.

Thanks and G9 ^^!

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

lệnh clead thì font không bị lỗi. nhưng lại chuyển hết về layer architec, và block không đổi màu ( việc này làm cho việc tắt lớp rất khó)

 

lệnh colorx thì chuẩn nhưng lỗi font. bạn vẫn chưa fix được lỗi font của colorx. bạn có thể fix giúp mình dc không.

 

hay là bạn hoàn chỉnh lệnh clear. đổi màu block và giữa nguyên layer để tiện tắt lớp thank a lot.

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
Đăng nhập để thực hiện theo  

×