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

Thay thế tên block bằng bản vẽ block

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

Thử cáy này:

 

; Thay the ten block trong table bang chinh block do. By HA
(defun C:HA(/ ent1 ent pt txt cmd)
 (defun GetNewEnts (ename / new)
  (while (setq ename (entnext ename))
   (if (entget ename) (setq new (cons ename new))))
 new)
 (command "undo" "be") (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0)
 (setq ent1 (entlast))
 (setq ent (car (entsel "\nChon Table: ")))
 (command "explode" ent)
 (foreach ent (GetNewEnts ent1)
  (if
   (and
    (setq pt (cdr (assoc 10 (entget ent))))
    (setq txt (cdr (assoc 1 (entget ent))))
    (tblobjname "block" txt))
   (progn
    (command "erase" ent "")   
    (command "insert" txt pt 0.0005 0.0005 ""))))
 (command "undo" "e") (setvar "cmdecho" cmd) 
 (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

Oh yeah. cảm on bạn. Mình đã nghĩ là llisscad chăc không làm được.Sau khi scale bảng 0.1, mình đã làm được.

Mình muốn hỏi thêm là vì sao phải nhân 0.1. Mình thử các tỉ lệ khác nhau thì đều không được, chỉ đúng với trường hợp nhân với 0.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

Table bạn lấy từ Datalink thì k nên Explode ra. Tranh thủ chờ Arsenal chưa đá mình quick code cho bạn. K bắt lỗi nhé. Số cột mình để là biến, đề phòng cấu trúc bảng của bạn thay đổi. Gluck

(defun c:t2b(/ GetObjectID  *adoc*  *ul* *bl* c1 rs n r ss)
; Replace Text to Block preview in table
; Ketxu 30-5-2015
(defun GetObjectID (ul obj)
	(if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
	(vlax-invoke-method ul 'GetObjectIdString obj :vlax-false )
	(vla-get-Objectid obj))
)
(setq *adoc*(vla-get-ActiveDocument (vlax-get-acad-object))
      *ul* 	(vla-get-Utility *adoc*)
	  *bl* 	(vla-get-blocks *adoc*)	  
	  ss	(ssget (list (cons 0 "ACAD_TABLE")))
	  ss 	(vla-get-ActiveSelectionSet *adoc*)	  
)
(or c (setq c 3))
(setq c	(cond ((getint (strcat "\nColumn to replace <" (itoa c) "> :")))(c)) c1 (1- c))
(vlax-map-collection *bl* '(lambda(x / n)
	(if (and
		(= (vla-get-isXref x) :VLAX-FALSE)
		(= (vla-get-islayout x) :VLAX-FALSE)
		(not (wcmatch (setq n (vla-get-name x)) "*`**,*|*"))
	)
	(setq rs (cons n rs))
	)
))
(vlax-for tb ss
	(setq r -1)
	(while (< (setq r (1+ r)) (vla-get-Rows tb))
		(cond
			((and	(setq bn (vla-gettext tb r c1))
					(member bn rs))
			(vla-Setcellstate tb r c1 0)
			(vla-SetBlockTableRecordId tb r c1 (GetObjectID *ul* (vla-item *bl* bn)) :vlax-true)
		)
	)	
)
)
(if ss (vla-delete ss))
)
  • 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

Ps : mà việc bạn làm (nếu k nhầm là thống kê block) hình như lisp blkqty cũ của bác gia_bach làm tốt mà. Có preview 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

Nếu bạn thống kê thì  tham khảo Lisp thong kê của a Gia_Bach này nhé^^

Thống kê xuất ra bảng + chèn block luôn..Đẹp như mơ ^^

http://www.cadviet.com/forum/topic/69520-nho-giup-do-lisp-dem-block-blkqty/

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

Đúng là 1 mình đang thống kê block theo lệnh dx trong cad và liên kết với excel để đổi tên ký hiệu block thành tên vật tư hoàn chỉnh. Tuy nhiên cad không xuất ra được bản vẽ ký hiệu block. Nhưng quả thật dùng lênh này cad đòi hỏi thao tác quá nhiều cũng không tiện lắm. Lisp của bác gia bạch quả thật rất hay. Nhưng lisp này thống kê tên ký hiệu block mà không thay thế được tên đầy đủ của block. Mình sẽ tìm hiểu thêm vấn đề này theo chủ đề lisp của bác gia bạch

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

Dataextraction dùng quen sẽ thấy tiện, lại có thể lưu lại thành file. Tên đầy đủ bạn nên để vào mục Description vủa Block, hoặc một Attribute Invisible, như vậy trích xuất thông tin sẽ đơn giản hơn nhiều, kể cả lệnh hay lisp. Gluck

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

×