Đến nội dung


Hình ảnh

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


  • Please log in to reply
10 replies to this topic

#1 vandv

vandv

    Edu level: no10

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 May 2015 - 09:57 AM

Mình có 1 bảng thống kê block có chứa tên block. Có cách nào thay thế hàng loạt tên block được chọn thành ký hiệu block không các cao thủ?

102116_thay_the.pnghttp://www.cadviet.c...16_thay_the.rar


  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 30 May 2015 - 03:39 PM

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))

  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 vandv

vandv

    Edu level: no10

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 May 2015 - 04:08 PM

Dùng lệnh xong không thấy chèn block vào vị trí tên block. Tên block biến đi đâu mất.102116_thay_the1.png


  • 0

#4 vandv

vandv

    Edu level: no10

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 May 2015 - 05:05 PM

Ý mình là thay thế tên block bằng block ký hiệu, giống kiểu find and replay đó (không để lại tên). Mình thử rồi nhưng kết quả như vậy đó. http://www.cadviet.c...thay_the2_1.dwg


  • 0

#5 sgcq

sgcq

    Hội Hai Lúa

  • Members
  • PipPipPipPipPipPipPip
  • 1880 Bài viết
Điểm đánh giá: 692 (tốt)

Đã gửi 30 May 2015 - 05:26 PM

:D :D :D

Chạy, nhưng phải scale table 0.1 trước.

 

110802_screenshot_265.png

:D :D :D


  • 0

12728974_230210507314169_718723558582070 HỘI HAI LÚA

           fanpage: https://www.facebook.com/HoiHaiLua/

 

 

 

 

 

 


#6 vandv

vandv

    Edu level: no10

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 May 2015 - 08:22 PM

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.


  • 0

#7 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 30 May 2015 - 11:36 PM

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))
)

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 May 2015 - 12:10 AM

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 ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#9 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 31 May 2015 - 08:12 AM

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.c...m-block-blkqty/


  • 0

#10 vandv

vandv

    Edu level: no10

  • Members
  • PipPip
  • 70 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 31 May 2015 - 05:24 PM

Đú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


  • 0

#11 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 31 May 2015 - 05:38 PM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC