Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

Viết lisp theo yêu cầu [phần 2]


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#3481 V77

V77

    Chưa sử dụng CAD

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

Đã gửi 21 May 2011 - 05:20 PM

Em xin nhờ các bác trên diễn dàn chỉnh lại lisp udt này thêm phần "chọn điểm ghi cao độ" với,em đang cần ghi lại diện tích để ban A kiểm tra cho tiện,nhưng cứ phải copy text trước rồi lại edit text hơi lâu.
Em cũng mày mò thử chỉnh mà khôngđưcợc,em xin cảm ơn ạh.
My link

(defun c:udt(/ ss tong ham tmp tt hstl oldim toe frome cur dt)
(prompt "\n Kich thuoc cua chuong trinh tinh theo don vi mm ")
(if (not hstlo) (setq hstlo 0.001))
(setq hstl (getreal (strcat "\n Nhap ti le chuyen doi don vi <" (rtos hstlo 2 3) "> :")))
(if (not hstl) (setq hstl hstlo) (setq hstlo hstl))
(if (not tpo) (setq tpo 2))
(setq tp (getint (strcat "\n Nhap So chu so thap phan <" (itoa tpo) "> :")))
(if (not tp) (setq tp tpo) (setq tpo tp))
(setq oldim (getvar "Dimzin"))
(setvar "Dimzin" 0)
(prompt "\n Chon doi tuong de tinh dien tich hay Enter de tinh dien tich theo Pick diem ")
(setq
ss (ssget '((-4 . "<OR")(0 . "LWPOLYLINE")(0 . "REGION")(0 . "CIRCLE")(0 . "ARC")(-4 . "OR>")))
tong 0.0
ham (lambda (x) (command ".area" "o" x) (setq tong (+ tong (getvar "area"))))
tmp (mapcar 'ham (ss2ent ss))
)

(if (not ss) (progn
(setq tong 0.0 ss (ssadd))
(while (setq p (getpoint "\n Pick vao vung tinh dien tich :"))
(setq frome (entlast))
(command ".boundary" p "")
(setq toe (entlast))

(setq cur frome)
(while (not (eq cur toe))
(setq
cur (entnext cur)
ss (ssadd cur ss))
(command "area" "S" "O" ss "" "")
(setq dt (getvar "area"))
(setq tong (+ tong dt))
)
(command "area" "A" "O" "L" "" "")
(setq dt (getvar "area"))
(setq tong (+ tong (* dt 2)))
(sssetfirst ss ss)
)
(command "erase" ss "")
))


(setq tt (entget (car (entsel "\nChon text ket qua: ")))
tong (vl-string-right-trim "." (vl-string-right-trim "0" (rtos tong)))
)
(entmod (subst (cons 1 (rtos (* (atof tong) hstl hstl) 2 tp)) (assoc 1 tt) tt))

(setvar "Dimzin" oldim)


(princ)
)
;
(defun ss2ent(ss / sodt index lstent)
(setq
sodt (if ss (sslength ss) 0)
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(princ "\nUpdate Area - free lisp from cadviet.com")
(princ "\nUse UDT command to start!")
(vl-load-com)

  • 0

#3482 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 21 May 2011 - 09:12 PM

Em xin nhờ các bác trên diễn dàn chỉnh lại lisp udt này thêm phần "chọn điểm ghi cao độ" với,em đang cần ghi lại diện tích để ban A kiểm tra cho tiện,nhưng cứ phải copy text trước rồi lại edit text hơi lâu.
Em cũng mày mò thử chỉnh mà khôngđưcợc,em xin cảm ơn ạh.

Hề hề hề,
Không hiểu yêu cầu của bạn là sao cả??? Đây là cái lisp tính tổng diện tích các vùng được chọn cơ mà. Có dính dáng gì tới việc ghi cao độ điểm nhỉ???
Mong bạn giải thich rõ hơn cái yêu cầu của bạn mới được.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3483 cd2k44

cd2k44

    Edu level: li5

  • Members
  • PipPipPipPipPipPipPip
  • 648 Bài viết
Điểm đánh giá: 121 (tàm tạm)

Đã gửi 21 May 2011 - 10:29 PM

Hề hề hề,
Không hiểu yêu cầu của bạn là sao cả??? Đây là cái lisp tính tổng diện tích các vùng được chọn cơ mà. Có dính dáng gì tới việc ghi cao độ điểm nhỉ???
Mong bạn giải thich rõ hơn cái yêu cầu của bạn mới được.

Chắc ý bạn đó là chọn diểm ghi diện tích đó bác
  • 0

#3484 thanhblue

thanhblue

    biết pan

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

Đã gửi 23 May 2011 - 10:13 AM

Chào bạn thanhblue,
Những vấn đề bạn yêu cầu hoàn toàn có thể làm được nhưng nó cần một vài điều kiện như sau:
1/- Các bản vẽ của bạn phải có cấu trúc hoàn toàn giống nhau. Các lines, layers, polylines ... phải được sử dụng cho cùng một mục đích như nhau.
2/- Bạn phải cài bộ express tools.

Vậy bạn có đồng ý không????

Lisp đó đây, bạn hãy xài thử nhé:


;; free lisp from cadviet.com
(defun DXF (code elist)
(cdr (assoc code elist))
)

(princ "\nGo lenh \"CD\" ")
(defun c:CD ( / DZ pt y ptside ang OT sc1 scale tx ty tx1 ty1 atlast oslast pt0 x0 y0 ed h0 lng ln ssln sslst )
(vl-load-com)
(command "undo" "be")
(setvar "cmdecho" 0)
(command "UCS" "w")

(if (not scale) (setq scale 1))
(setq sc1 (getreal (strcat "\n Cao text <"(rtos scale 2 0)">:")))
(if sc1 (setq scale sc1))
(if (= tx nil) (setq tx 1))
(if (= ty nil) (setq ty 1))
;(setq tx1 (getreal (strcat "\nTy le theo phuong X <1/"(rtos tx 2 0)">: 1/"))
;ty1 (getreal (strcat "\nTy le theo phuong Y <1/"(rtos ty 2 0)">: 1/")))
(setq tx1 1
ty1 1
)
(if tx1 (setq tx tx1))
(if ty1 (setq ty ty1))
(setq ATLAST (getvar "Attreq"))
(setq OSLAST (getvar "OSMODE"))
(setq DZ (getvar "DIMZIN"))
(setq OT (getvar "ORTHOMODE"))
(setvar "ORTHOMODE" 0)
(command "osmode" 99)
(setq pt0 (osnap (getpoint "Diem tim TN tu nhien <end of> : ") "end")) (print)
(setq x0 (car pt0) y0 (cadr pt0))
(setq ed (entget (car (entsel "\nChon cao do tim: "))))
(setq H0 (read (DXF 1 ed)))
(command "osmode" 15359)
;;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
(alert "\n Chon cac duong chuan")
(setq sslg (acet-ss-to-list (ssget (list (cons 0 "*LINE") (cons 8 "7")))))
;;;;;;;;lng (car (entsel "\n Hay chon line goc"))
(alert "\n Chon cac duong can xac dinh giao diem")
(setq ssln (ssget (list (cons 0 "*LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")))
sslst (acet-ss-to-list ssln)
)
;;;;;(While (/= pt nil)
(foreach lng sslg
(foreach ln sslst
(setq pt (car (acet-geom-intersectwith lng ln 0)))
(if pt
(Progn
(setq ptside (getpoint "\nPhia chen:" pt)
ang (angle pt ptside))
(setq y (- (cadr pt) y0 (- H0)))
(setq x (- (car pt) x0))
(setvar "DIMZIN" 0)
(cond ((> x 0) (setq x (strcat "" (rtos (* x tx) 2 2))))
((< x 0) (setq x (rtos (abs (* x tx)) 2 2)))
((= x 0) (setq x "0.00")) )
(cond ((> y 0) (setq y (strcat "+" (rtos (* y ty) 2 2))))
((< y 0) (setq y (rtos (* y ty) 2 2)))
((= y 0) (setq y "%%p0.00")))
;(setq x (ustr 0 "Khoang cach: " x T))
;(setq y (ustr 0 "Cao do: " y T))

(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))
(setvar "attreq" 1)
( if (AND (>= ang 0) (< ang (/ pi 2))) (command "INSERT" "LCD1" pt scale scale "0" x y))
( if (AND (>= ang (/ pi 2)) (< ang pi)) (command "INSERT" "LCD2" pt scale scale "0" y x))
( if (AND (>= ang pi) (< ang (+ pi (/ pi 2)))) (command "INSERT" "LCD3" pt scale scale "0" x y))
( if (AND (>= ang (+ pi (/ pi 2))) (< ang (* 2 pi))) (command "INSERT" "LCD4" pt scale scale "0" y x))
(setvar "attreq" ATLAST)
(setvar "DIMZIN" DZ)
;;;;;;;;(setq pt (getpoint "\nDiem chen: "))
);pro
)
);foreach
);;;foreach1
(setvar "OSMODE" OSLAST)
(setvar "ORTHOMODE" OT)
(command "undo" "e")
(princ)
)
;---------------------------------------------------------------------------


Hy vọng bạn hài lòng.

Rất cảm ơn bác Bình đã giứp đỡ, em xài lisp này ok với bản vẽ của mình rồi nhưng tiếc cái là không xài được với những bản khác. Thank bác rất nhiều!!!
  • 0

#3485 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 23 May 2011 - 03:43 PM

Rất cảm ơn bác Bình đã giứp đỡ, em xài lisp này ok với bản vẽ của mình rồi nhưng tiếc cái là không xài được với những bản khác. Thank bác rất nhiều!!!

Hề hề hề,
Rất vui vì đã giúp được bạn tí ti trong công việc.
Nếu bạn chịu khó đọc và làm theo các hướng dẫn sau đây của mình, mình sẽ vui hơn nhiều.
1/- Mở cái lisp mình gửi và đọc kỹ nó.
2/- Hãy chú ý tới những vấn đề sau:
- Khi lisp yêu cầu "Chon cac duong chuan" bạn phải chọn các đường chuẩn mà bạn muốn ghi cao độ lên. Ở đây mình dùng bộ lọc (list (cons 0 "*LINE") (cons 8 "7")) là do trên file bạn gửi, các line hay polyline này đều nằm trên lớp "7". Bây giờ nếu bạn có file khác mà các line này không nằm trên lớp 7 thì bạn sẽ không chọn được nó. Do vậy bạn phải thay đổi chút xíu cái bộ lọc này cho phù hợp với cái bản vẽ bạn có. Giả tỷ các line chuẩn của bạn nằm trên lớp "chuan" và có màu là màu vàng mà không phải là bylayer, bạn có thể dùng bộ chọn sau: (list (cons 0 "*LINE") (cons 8 "chuan")(cons 62 2)).
- Khi lisp yêu cầu "Chon cac duong can xac dinh giao diem" bạn phải chọn các đường line hay polyline mà có giao điểm với các đường chuẩn và bạn muốn ghi lại cao độ của nó. Ở đây mình dùng bộ lọc là: (list (cons 0 "*LINE") (cons 8 "XGRIDFG,XGRID,FG_Temp,XSTA")) Ấy là do trong file bạn gửi các dường này đều nằm trên một trong các lớp "XGRIDFG","XGRID","FG_Temp","XSTA". Do vậy nếu trên bản vẽ của bạn có các line mà bạn muốn xác định giao điểm không nằm trên một trong các lớp này thì bộ chọn của bạn sẽ không đầy đủ và lisp sẽ chạy sai. Bây giờ nếu bạn có bản vẽ mà các line này nằm trên các lớp "2", "3", "5" thì bộ chọn của bạn sẽ là (list (cons 0 "*LINE") (cons 8 "2,3,5"))
- Đoạn code sau:
(if (not (tblsearch "block" "LCD1"))
(progn (command "insert" "D:\\Lisp CAD\\BVTN.dwg" 0 "" "" "")
(command "erase" (entlast) "")))

được dùng để kiểm tra xem block LCD1 đã có trong bản vẽ hay chưa, nếu chưa có thì sẽ nhập block này từ trong file "D:\\Lisp CAD\\BVTN.dwg".
Giả sử bạn không dùng cái block này và bạn muốn xài một cái block có tên là "EM" có sẵn trong file "C:\\Program\\Acad\\Anh.dwg" thì bạn sẽ phải sửa đoạn code trên thành:
(if (not (tblsearch "block" "Em"))
(progn (command "insert" "C:\\Program\\Acad\\Anh.dwg" 0 "" "" "")
(command "erase" (entlast) "")))


Với các chú ý như trên bạn hoàn toàn có thể dùng cái lisp này cho mọi bản vẽ mà bạn có và với cùng mục đích ghi cao độ tại các giao điểm với trắc ngang của bạn.
Chúc bạn vui hơn,....
Hề hề hề
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3486 hanhc

hanhc

    Chưa sử dụng CAD

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

Đã gửi 24 May 2011 - 07:56 AM

Hok bác nào giúp em ạ? :(
  • 0

#3487 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 24 May 2011 - 08:32 AM

Chào các bác!
Hôm nay em có 2 cái lisp nhờ các bác ạ, mong các bác giúp cho.
#Lisp 1: Thay đổi số phân đoạn của 1 polyline (chủ yếu là tăng lên). Thường thì em vẽ thêm 1 pline nữa sau đó dùng lệnh PE nối lại. Rất ư là lâu ạ. -> cái này là nhanh rồi, vì dùng lisp bạn vẫn phải vẽ polyline thứ 2, lisp chỉ giúp bạn nối chúng lại thôi (ko nhanh hơn bao nhiêu so với ko dùng lisp)
#Lisp 2: Em có hình vẽ dưới đây. bài toán của em là, làm thế nào để 1 lệnh xoay hình 1 thành hình 2 được. (Híc) -> Nếu bạn dùng AutoCAD 2010 trở lên bạn nghiên cứu cái Constraint của nó nha, chắc giúp bạn dc đấy, ko cần dùng lisp đâu. Goodluck!
My link

Trả lời bạn trong phần quote
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#3488 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 May 2011 - 11:37 AM

Hok bác nào giúp em ạ? :(

Hề hề hề,
Muốn giúp bạn lắm nhưng giúp cái chi được khi bản vẽ bạn không gửi lên, póst độc có cái hình JPG thì chả ai có thể hiểu nổi các đối tượng đang có của bạn là cái chi mà giúp.
Lần sau nếu bạn thực sự muốn giúp chớ không phải là đánh đố nhau thì bạn hãy post cái bản vẽ bạn có lên và cái bản vẽ kết quả bạn muốn có thì mọi người mới giúp được bạn ạ.
hề hề hề, vài lời góp ý, trúng hay trật bạn chớ giận nhé.
chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3489 V77

V77

    Chưa sử dụng CAD

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

Đã gửi 24 May 2011 - 05:18 PM

Hề hề hề,
Không hiểu yêu cầu của bạn là sao cả??? Đây là cái lisp tính tổng diện tích các vùng được chọn cơ mà. Có dính dáng gì tới việc ghi cao độ điểm nhỉ???
Mong bạn giải thich rõ hơn cái yêu cầu của bạn mới được.

dạ em nhầm ah,thêm phần "chọn điểm ghi diện tích" mới đúng.
Ai giúp em với ah.
Em xin cảm ơn!
  • 0

#3490 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 24 May 2011 - 07:56 PM

E thấy trên diễn đàn đã có lisp biến block att này block att kia,nhưng nay trong bản vẽ của e có nhiều block att khác nhau,e muốn biến block này thành block kia nhưng vẫn giữ giá trị của block.E gửi file đính kèm.Nhờ các bác xem và giúp e.Chân thành cảm ơn trước.
http://www.cadviet.c...drawing1_61.dwg
  • 0

#3491 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 24 May 2011 - 08:58 PM

E thấy trên diễn đàn đã có lisp biến block att này block att kia,nhưng nay trong bản vẽ của e có nhiều block att khác nhau,e muốn biến block này thành block kia nhưng vẫn giữ giá trị của block.E gửi file đính kèm.Nhờ các bác xem và giúp e.Chân thành cảm ơn trước.
http://www.cadviet.c...drawing1_61.dwg

Bạn sử dụng lệnh BLOCKREPLACE (trong phụ trợ Express)
-> Sử dụng lệnh Attsync để đồng bộ Block
  • 1

#3492 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 24 May 2011 - 09:25 PM

Cảm ơn bác mặc dù đã đổi hết nhưng ý e là thí dụ như trong file đính kèm e muốn thuộc tính của block 1 thành thuộc tính của block 2 nhưng chữ BC vẫn giữ nguyên,chỉ thay đổi font chữ,chiều cao,bề rộng...cho giống block 1 thôi.Thanks.
  • 0

#3493 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 24 May 2011 - 09:57 PM

Cảm ơn bác mặc dù đã đổi hết nhưng ý e là thí dụ như trong file đính kèm e muốn thuộc tính của block 1 thành thuộc tính của block 2 nhưng chữ BC vẫn giữ nguyên,chỉ thay đổi font chữ,chiều cao,bề rộng...cho giống block 1 thôi.Thanks.

Bạn sử dụng lệnh Battman được cơ mà
Này nhé : Dùng lệnh Battman xem Style, height, width của Block A
Sau đó Style, height, width vừa xem đó gán cho Block B
-> Nhấn nút Sync -> Nhấn OK

Sorry bạn, nếu nhiều Block có tên khác nhau nhiều thì có thể viết Lisp. Còn nếu ít thì có thể sử dụng cách trên
  • 0

#3494 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 24 May 2011 - 10:30 PM

Cảm ơn bác rất nhiều,làm kiểu này thì được với 1 vài block thì được còn mình thì cần đổi nhiều block khác tên thành 1 block.Mong bác bớt chút thời gian giúp giùm e 1 đoạn lisp.
  • 0

#3495 hanhc

hanhc

    Chưa sử dụng CAD

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

Đã gửi 26 May 2011 - 04:14 PM

Trả lời bạn trong phần quote

Cảm ơn anh nhiều nhé. Em cũng đang dùng cad 2010. Vậy em nghiên cứu xem thế nào, có gì không hiểu sẽ hỏi thêm ạ.
@Phanthanhbinh: Cảm ơn anh đã góp ý, lần đầu em post bài nên chưa kinh nghiệm, em cứ nghĩ file ảnh thì nhẹ hơn file cad nên up file ảnh cho nhanh.
  • 0

#3496 hugo75

hugo75

    biết vẽ polygon

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

Đã gửi 26 May 2011 - 04:59 PM

Cảm ơn bác rất nhiều,làm kiểu này thì được với 1 vài block thì được còn mình thì cần đổi nhiều block khác tên thành 1 block.Mong bác bớt chút thời gian giúp giùm e 1 đoạn lisp.

Không bác nào giúp được e sao?Mong được sự giúp đỡ của các bác.Thanks.
  • 0

#3497 victor85

victor85

    biết lệnh stretch

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

Đã gửi 27 May 2011 - 12:02 PM

Mình đã có lần sài thử bộ ACV trên diễn đàn do bác Nguyen Hoanh biên tập.
Link: http://www.cadviet.c...l_CADViet_10/4/
Mình đã test và thấy rằng có rất nhiều lệnh hữu ích. Đặc biệt thích nhất là cái lệnh matchprop block trong bộ lisp ACV đó.
Tuy nhiên do quá trình dùng sử dụng cad có một số lệnh không phù hợp với thói quen lắm nên cũng không cài hoàn toàn cả bộ ACV. Tuy nhiên mình rất muốn tách riêng được đoạn lisp matchprop block đó để sử dụng thường xuyên. Có bác nào up dùm mình đoạn đó đc ko với. Cho mình xin cảm ơn trước nhé! :)
  • 0

#3498 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 May 2011 - 01:16 PM

Link đã chết + mọi người không nhớ matchprop Block nó như thế nào ?
  • 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


#3499 victor85

victor85

    biết lệnh stretch

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

Đã gửi 27 May 2011 - 01:49 PM

Link đã chết + mọi người không nhớ matchprop Block nó như thế nào ?

Tức là có thể quét một số lượng block A để nó biến thành block B mà điểm insert của B thay vào trùng điểm insert của A cũ. nhưng không thay toàn bộ các block A trong bản vẽ. Giống như lệnh replace block trong thanh công cụ express. Link mình tự up nè: http://www.mediafire...7vbjaoc1hagquao
Các bác bro xem có giúp đc mình ko với??
  • 0

#3500 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 27 May 2011 - 02:41 PM

Tức là có thể quét một số lượng block A để nó biến thành block B mà điểm insert của B thay vào trùng điểm insert của A cũ. nhưng không thay toàn bộ các block A trong bản vẽ. Giống như lệnh replace block trong thanh công cụ express. Link mình tự up nè: http://www.mediafire...7vbjaoc1hagquao
Các bác bro xem có giúp đc mình ko với??

Mình có lisp tác dụng tương tự bạn dùng thử xem:
-MAB: Chọn block mẫu, chọn các block cần thay (tùa lua block cũng được). Thay các block cần thay thành block mẫu. Giữ nguyên điểm chèn còn tỉ lệ và góc quay thì theo block mẫu.
-MABT: Chọn block mẫu, chọn các block cần thay (tùa lua block cũng được). Thay các block cần thay thành block mẫu. Giữ nguyên điểm chèn. tỉ lệ và góc quay.

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

(defun c:mab ()
(command "undo" "be")
(setq donvi (/ (getvar "viewsize") 40))

(setq ddd (entsel "\nChon Block mau"))
(while
(or
(null ddd)
(/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block mau"))
)



(setq DT (car ddd))
(setq DTM (entget DT))
(setq DIEMCHENMAU (cdr (assoc 10 DTM)))

(setq diemvt1 (polar DIEMCHENMAU pi donvi))
(setq diemvt2 (polar DIEMCHENMAU (* 2 pi) donvi))
(setq diemvt3 (polar DIEMCHENMAU (/ pi 2) donvi))
(setq diemvt4 (polar DIEMCHENMAU (- 0 (/ pi 2)) donvi))
(grdraw diemvt1 diemvt2 3)
(grdraw diemvt3 diemvt4 3)


(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DTs (ssname XX L))
(setq DTMs (entget DTs))
(setq DIEMCHEN (cdr (assoc 10 DTMs)))
(command "ERASE" DTs "")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(command ".copy" ddd "" DIEMCHENMAU DIEMCHEN)
(setvar "osmode"luubatdiem)
(setq L (1+ L))
)

(command ".pan" DIEMCHENMAU DIEMCHENMAU)
(command "undo" "end")

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))

;-------------
(defun c:mabt ()
(command "undo" "be")
(setq donvi (/ (getvar "viewsize") 40))

(setq ddd (entsel "\nChon Block mau"))
(while
(or
(null ddd)
(/= "INSERT" (cdr (assoc 0 (entget (car ddd)))))
)
(princ "\nDoi tuong khong phai la Block! Chon lai")
(setq ddd (entsel "\nChon Block mau"))
)

(setq DT (car ddd))
(setq DTM (entget DT))
(setq TENKHOI (cdr (assoc 2 DTM)))
(setq DIEMCHENMAU (cdr (assoc 10 DTM)))

(setq diemvt1 (polar DIEMCHENMAU pi donvi))
(setq diemvt2 (polar DIEMCHENMAU (* 2 pi) donvi))
(setq diemvt3 (polar DIEMCHENMAU (/ pi 2) donvi))
(setq diemvt4 (polar DIEMCHENMAU (- 0 (/ pi 2)) donvi))
(grdraw diemvt1 diemvt2 3)
(grdraw diemvt3 diemvt4 3)


(Princ "\nChon BLOCK muon chinh :")
(setq xx (ssget '((0 . "insert"))))
(setq L 0)
(setq M (sslength XX))
(while (< L M)
(setq DTs (ssname XX L))
(setq DTMs (entget DTs))
(setq TENKHOIM TENKHOI)
(setq DTMs (subst (cons 2 TENKHOIM) (assoc 2 DTMs) DTMs))
(entmod DTMs)


(setq L (1+ L))
)

(command ".pan" DIEMCHENMAU DIEMCHENMAU)
(command "undo" "end")

(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ))

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

  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D