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

#961 huyhoa255

huyhoa255

    biết zoom

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

Đã gửi 25 March 2010 - 02:32 PM

Chào các bác ! ,các bác có thể viết cho em 1 cái lisp để edit như thế này ko a ? e có 1 bản vẽ cốt thép bị lỗi như sau : 1 loại thép số hiệu 10 phi 32a200 , nhưng cũng với thép số hiệu là 10 nhưng có chỗ là phi20a200 hoặc phi 32a150 . Bây giờ e muốn sửa tất cả thép số hiệu 10 là phi32a200 , mong bác cứu e với !

http://www.cadviet.c...u_ra_thap_1.rar
các bác góp cho e vài ý kiến với ! e tìm mỏi hết cả mắt rồi mà ko được .
  • 0

#962 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 March 2010 - 02:32 PM

em load lisp thì báo bị lỗi, bác kiểm tra lại rồi post lại lên hộ em nha! thanks bác!

Chào bạn Sucuph,
Mình đã kiểm tra và phát hiện ra cái lỗi ở dòng code này:
(setq Npt (getint"\n Chon so bat dau danh thu tu cac diem " so="" thu="" tu=""> : " ))
Đây có lẽ là lỗi của trang upload của diễn đàn. Thực chất cái dòng code này là:
(setq Npt (getint"\n Chon so bat dau danh thu tu cac diem < Khong danh so thu tu > : " ))
Vậy mà chả hiểu sao khi paste vào codebox nó lại ra như vậy. Bạn hãy kích vào nút reply bài viết trên của mình xem lại dòng code này sẽ rõ.
Bạn có thể mở file lisp đã download về và sửa lại bằng tay cái dòng code này cho dung như trên. Sau đó thử lại xem nhé.
Hoặc là bạn load lại file lisp này theo địa chỉ:
http://www.cadviet.c...iles/2/lb22.lsp


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.

#963 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 March 2010 - 02:44 PM

http://www.cadviet.c...u_ra_thap_1.rar
các bác góp cho e vài ý kiến với ! e tìm mỏi hết cả mắt rồi mà ko được .

Chào bạn Huyhoa255,
File bạn upload chịu chết không mở được, bạn hãy upload lại file dưới dạng cad2004 xem nhé.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#964 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 March 2010 - 02:53 PM

Bạn "PhamthanhBinh" viết lisp này rất hay rùi. Thực chất đây có lẽ là bài cắm cọc GPMB hoặc cắm Mốc lộ giới của tuyến đường.
Việc chuyển số liệu sang file excel theo mình nghĩ đơn giảm hơn chỉ cần ghi ra file dang .CSV là ổn rồi, như thế mình sẽ không phải khai báo file excel trước. Xuất ngay sang Excel cũng tốt nhưng hơi phức tạp một chút.
Xin nhờ các bạn giúp bổ sung thêm bài toán một chút nũa cho bài toán được hoàn chỉnh:
- Cho điểm đầu của polyline một giá trị (Lý trình đầu) bằng cách hỏi lý trình ở dòng lệnh
- Xác định lý trình tương ứng của các cọc giải phóng mặt bằng và ghi bổ sung thêm một lý trình sau cột stt.
Ví dụ:
- Cho điểm đầu tiên của polyline giá trị 100
- Lý trình của cọc đầu tiên là 123.75 (=100+23.75)
File minh họa: http://www.cadviet.c...es/2/vidu_3.dwg
Cảm ơn các bạn về bài toán!

Chào bạn Aliosa,
Xin lỗi vì chậm trả lời bạn.
Yêu cầu bạn đặt ra không phải quá khó nhưng nó khác với yêu cầu của bạn Ngolevietduc87. Bạn Ngolevietduc87 yêu cầu xuất cái tọa độ của điểm chèn block nằm ngoài pline, còn bạn là xuất tọa độ điểm nằm trên pline theo các lý trình đã định trước.
Do vậy bạn nên post một bản vẽ gốc và cái kết quả bạn muốn có lên , mình sẽ viết thử xem. Hiện tại việc xuất dữ liệu ra file *.txt, *.csv và *.xls mình cũng đã vỡ vạc được ít nhiều và có thể ứng dụng tàm tạm. Bạn tham khảo cái lisp mình viết cho bạn Sucuph sẽ rõ.
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.

#965 huyhoa255

huyhoa255

    biết zoom

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

Đã gửi 25 March 2010 - 06:34 PM

Chào bạn Huyhoa255,
File bạn upload chịu chết không mở được, bạn hãy upload lại file dưới dạng cad2004 xem nhé.

file của mình http://www.cadviet.c...u_ra_thap_2.rar
Phamthanhbinh giúp mình với nhé ! Thanks bạn.
  • 0

#966 ngocchung1608

ngocchung1608

    biết pan

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

Đã gửi 25 March 2010 - 09:38 PM

Mình mới bắt đầu dùng CAD nên còn nhiều bỡ ngỡ, mong các huynh đệ chỉ giáo.
Mình có các đường thẳng như sau:
Hình đã gửi
Với chỉ 1 lệnh, mình muốn chia các đoạn thẳng màu trắng thành 2 phần bởi đường màu xanh.
Hình đã gửi
Nếu cad đã có lệnh thì xin hãy chỉ giúp, mình đã lục mọi help khá kỹ rồi mà không thấy. Nếu chưa có thì xin hãy viết lisp giúp mình.
Xin chân thành cảm ơn các huynh đệ
  • 0

#967 truongthanh

truongthanh

    biết lệnh text

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

Đã gửi 25 March 2010 - 10:02 PM

Mình mới bắt đầu dùng CAD nên còn nhiều bỡ ngỡ, mong các huynh đệ chỉ giáo.
Mình có các đường thẳng như sau:
Hình đã gửi
Với chỉ 1 lệnh, mình muốn chia các đoạn thẳng màu trắng thành 2 phần bởi đường màu xanh.
Hình đã gửi
Nếu cad đã có lệnh thì xin hãy chỉ giúp, mình đã lục mọi help khá kỹ rồi mà không thấy. Nếu chưa có thì xin hãy viết lisp giúp mình.
Xin chân thành cảm ơn các huynh đệ

bạn search trên diễn đàn với từ khóa BREAK sẽ tìm được lisp bạn muốn!
nếu ko bạn thử LISP này xem!LISP này mình cũng down trên diễn đàn đó!mà ko nhớ của bác nào nữa!sorry tác giả nhé!
LỆnh là br1 và br2
http://www.cadviet.c...pfiles/2/br.rar
  • 1

#968 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 26 March 2010 - 11:44 AM

file của mình http://www.cadviet.c...u_ra_thap_2.rar
Phamthanhbinh giúp mình với nhé ! Thanks bạn.

Chào bạn Huyhoa255,
Bạn có thể cho biết cái loại thép số hiệu 10 trên bản vẽ của bạn được phân biệt với các loại thép khác như thế nào không. Mình tìm trên bản vẽ của bạn thì chịu chả thấy có bất cứ dấu hiệu gì cho biết các thanh thép thuộc loại thép số hiệu nào cả.
Như vậy việc chọn ra các text cần thay đổi quả thực khá nan giải bạn ạ.
Bạn hãy post bản vẽ thể hiện một vị trí cần sửa trước khi sửa và cái bạn muốn thể hiện sau khi sửa dưới dạng Cad2004 bạn nhé.
Chờ thông tin của bạn.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#969 bosstuyentn

bosstuyentn

    biết vẽ line

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

Đã gửi 26 March 2010 - 12:11 PM

Mình mới bắt đầu dùng CAD nên còn nhiều bỡ ngỡ, mong các huynh đệ chỉ giáo.
Mình có các đường thẳng như sau:
Hình đã gửi
Với chỉ 1 lệnh, mình muốn chia các đoạn thẳng màu trắng thành 2 phần bởi đường màu xanh.
Hình đã gửi
Nếu cad đã có lệnh thì xin hãy chỉ giúp, mình đã lục mọi help khá kỹ rồi mà không thấy. Nếu chưa có thì xin hãy viết lisp giúp mình.
Xin chân thành cảm ơn các huynh đệ

Mình sưu tập được lisp này ko nhớ tác giả nữa. Lệnh này cho phép bạn chia đoạn thẳng hay đuờng thẳng làm 2 phần ở bất kỳ điểm nào. Lệnh là BF nhé

http://www.cadviet.c...dut_mranhtk.rar
  • 1
Tiền không phải là tất cả nhưng ko có tiền chả làm được cái gì hết...

WinPower -Thiết bị ngành điện, trạm điện, an ninh, PCCC
Hình đã gửi

#970 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 March 2010 - 03:46 PM

Chào em svba.
Gửi em Lisp vẽ đường phân giác

(defun c:vpg(/ oldos prdiem ssa p ent prd prc pd pc eL dhuong hs
diem listdiem listdp xmin xmax ymin ymax)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 3)
(setvar "cmdecho" 0)
(setvar "edgemode" 1)
(setq ssa (ssadd) i 0 listdiem (list) listdp (list))
(while (setq p (getpoint "\n Chon trung diem doan bo goc :") )
(while (or (null (nentselp p))
(not (wcmatch (cdr(assoc 0 (entget(car (nentselp p))))) "*LINE,ARC"))
)
(setq p (getpoint "\n Chon trung diem doan bo goc :")))
(setq ent (car(nentselp p)))
(setq prdiem (vlax-curve-getParamAtPoint ent p))
(setq prd (- prdiem 0.5) prc (+ prdiem 0.5))
(if (or (= prdiem 0) (= prdiem (vlax-curve-getEndParam ent)) )
(progn
(setq prd 0.5)
(setq prc (- (vlax-curve-getEndParam ent) 0.5))
) )
;;;;;;
(setq pd (vlax-curve-getPointAtParam ent prd)
pc (vlax-curve-getPointAtParam ent prc) )
(setvar "osmode" 0)
(command "Xline" "B" p pd pc "") (setq eL (entlast))
(setq dhuong (cdr(assoc 11 (entget (entlast)))))
(setq hs (distance pd pc))
(setq diem (list (+ (car p) (* (car dhuong) hs))
(+ (cadr p) (* (cadr dhuong) hs)) 0))
(command "line" p diem "")
(setq ssa (ssadd (entlast) ssa))
(entdel eL)
(setq listdiem (append listdiem (list diem)))
(setq listdp (append listdp (list p)))
(setvar "osmode" 3)
);while
(setq xmin (- (caar(vl-sort listdp '(lambda (x1 x2)
(< (car x1) (car x2)) ) ))
hs))
(setq xmax (+ (caar(vl-sort listdp '(lambda (x1 x2)
(> (car x1) (car x2)) ) ))
hs))
(setq ymin (- (cadar(vl-sort listdp '(lambda (x1 x2)
(< (cadr x1) (cadr x2)) ) ))
hs))
(setq ymax (+ (cadar(vl-sort listdp '(lambda (x1 x2)
(> (cadr x1) (cadr x2)) ) ))
hs))
(vla-zoomwindow (vlax-get-acad-object)
(vlax-3d-point (list xmin ymin 0))
(vlax-3d-point (list xmax ymax 0)) )
(command "extend" ssa "" "F")
(foreach x listdiem (command x))
(command "" "")
(setvar "osmode" oldos)
(setvar "modemacro" "Chuc ban lam viec hieu qua - Tue_NV-0955193619")
)

  • 2

#971 ngocchung1608

ngocchung1608

    biết pan

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

Đã gửi 26 March 2010 - 06:53 PM

bạn search trên diễn đàn với từ khóa BREAK sẽ tìm được lisp bạn muốn!
nếu ko bạn thử LISP này xem!LISP này mình cũng down trên diễn đàn đó!mà ko nhớ của bác nào nữa!sorry tác giả nhé!
LỆnh là br1 và br2
http://www.cadviet.c...pfiles/2/br.rar

Xin chân thành cảm ơn bạn truongthanh lệnh br2 chính là thứ mình đang cần. Mình là dân cơ khí nên rất cần nó để chuyển phần bị che khuất sang nét đứt.
Tiện thể bạn cho mình hỏi cách xem nội dung lisp br.fas của bạn. Lisp *.lsp thì có thể xem bằng note còn *.fas thì xem bằng cách nào, mình cũng đang muốn học lisp? Thank bạn
  • 0

#972 Tri

Tri

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 24 (tàm tạm)

Đã gửi 26 March 2010 - 07:25 PM

Xin chân thành cảm ơn bạn truongthanh lệnh br2 chính là thứ mình đang cần. Mình là dân cơ khí nên rất cần nó để chuyển phần bị che khuất sang nét đứt.
Tiện thể bạn cho mình hỏi cách xem nội dung lisp br.fas của bạn. Lisp *.lsp thì có thể xem bằng note còn *.fas thì xem bằng cách nào, mình cũng đang muốn học lisp? Thank bạn

Mình không thể xem được file *.fas vì nó được mã hoá.
Mình thấy có Topic Học AutoLisp dành cho người bắt đầu hay lắm, bạn có thể vô đó đọc
Học AutoLisp, Thật là đơn giản

  • 1

#973 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 26 March 2010 - 10:36 PM

Nhờ các Bác viết cho 1 LISP dùng để ghép các bản vẽ đơn, có cùng 1 khổ giấy A3, được vẽ trong Model space thành MỘT bản vẽ chung, chứa đựng tất cả các b/v đơn đó.
Các bản vẽ đơn này đã được save trong 1 folder. Cách thực hiện sẽ như sau:
1. Open 1 bản vẽ trống.
2. Đánh tên lệnh.
3. Chọn folder chứa các b/v đơn.
4. Lisp sẽ tự động ghép thành 1 b/v chung (thứ tự như b/v dưới đây có tên Multiple Drawings)
Dùng Lisp Mplot của bác Nguyen Hoanh để in thì rất tiện lợi cho multiple drawings.
PP chỉ dùng lệnh COPYBASE để ghép theo kiểu thủ công từng b/v một. Nhưng vì có số lượng lớn b/v nên cần các Bác viết giúp 1 Lisp như trình bày trên.
Xin cám ơn nhiều
(PP tạo các b/v đơn và một b/v chung để các Bác test)
http://www.cadviet.c...le_drawings.zip
  • 0

#974 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 26 March 2010 - 11:37 PM

Nhờ các Bác viết cho 1 LISP dùng để ghép các bản vẽ đơn, có cùng 1 khổ giấy A3, được vẽ trong Model space thành MỘT bản vẽ chung, chứa đựng tất cả các b/v đơn đó.
Các bản vẽ đơn này đã được save trong 1 folder. Cách thực hiện sẽ như sau:
1. Open 1 bản vẽ trống.
2. Đánh tên lệnh.
3. Chọn folder chứa các b/v đơn.
4. Lisp sẽ tự động ghép thành 1 b/v chung (thứ tự như b/v dưới đây có tên Multiple Drawings)
Dùng Lisp Mplot của bác Nguyen Hoanh để in thì rất tiện lợi cho multiple drawings.
PP chỉ dùng lệnh COPYBASE để ghép theo kiểu thủ công từng b/v một. Nhưng vì có số lượng lớn b/v nên cần các Bác viết giúp 1 Lisp như trình bày trên.
Xin cám ơn nhiều
(PP tạo các b/v đơn và một b/v chung để các Bác test)
http://www.cadviet.c...le_drawings.zip

Phiphi dùng lisp IMF (insert multi files) dưới đây

(defun c:imf()
(setq pathname (vl-filename-directory (getfiled "Hay chon file dwg bat ky thuoc thu muc" "" "dwg" 0))
filelist (vl-sort (vl-directory-files pathname "*.dwg") '<)
p (getpoint "\nDiem chen: ")
xht (car p)
yht (cadr p)
)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(foreach filename filelist
(command "-insert" (strcat pathname "/" filename) (list xht yht) 1.0 1.0 0.0)
(vla-getboundingbox (vlax-ename->vla-object (entlast)) 'p1 'p2)
(setq
p1 (vlax-safearray->list p1)
p2 (vlax-safearray->list p2)
xht (+ xht (abs (car (mapcar '- p2 p1))))
blname (cdr (assoc 2 (entget (entlast))))
)
(command ".explode" (entlast) "")
(command "-purge" "Block" blname "N")
)
(setvar "osmode" oldos)
(princ)
)

  • 2

#975 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 27 March 2010 - 07:22 AM

Xin chân thành cảm ơn bạn truongthanh lệnh br2 chính là thứ mình đang cần. Mình là dân cơ khí nên rất cần nó để chuyển phần bị che khuất sang nét đứt.
Tiện thể bạn cho mình hỏi cách xem nội dung lisp br.fas của bạn. Lisp *.lsp thì có thể xem bằng note còn *.fas thì xem bằng cách nào, mình cũng đang muốn học lisp? Thank bạn

Cắt các đối tượng : lines, lwplines, plines, splines, ellipse, circles & arcs tại các giao điểm.
Link : http://www.cadviet.c...showtopic=10514
  • 2

#976 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 27 March 2010 - 02:58 PM

Phiphi dùng lisp IMF (insert multi files) dưới đây
...

Xin bác Nguyen Hoanh sửa thêm 1 chút để các bản vẽ sắp xếp đúng theo thứ tự của các filenames.
Dùng LISP trên thì kết quả sau khi ghép các b/v thì chỉ cho ra theo thứ tự 1,10, 11....19, 2, 20, 21,..., 23, 3, 4, 5....
Mặc định điểm chèn là 0,0.
Cám ơn nhiều.
  • 0

#977 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 March 2010 - 03:22 PM

Xin bác Nguyen Hoanh sửa thêm 1 chút để các bản vẽ sắp xếp đúng theo thứ tự của các filenames.
Dùng LISP trên thì kết quả sau khi ghép các b/v thì chỉ cho ra theo thứ tự 1,10, 11....19, 2, 20, 21,..., 23, 3, 4, 5....
Cám ơn nhiều.

Cái này khá phức tạp.

Nếu có thể, bạn rename file 1 -> 01, 2->02,..9->09 thì lisp sẽ chạy đúng.

Sở dĩ có chuyện này là vì lisp chỉ xem tên file là chuỗi (text) chứ không xem như số (number).
  • 0

#978 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 March 2010 - 03:38 PM

Cái này khá phức tạp.

Nếu có thể, bạn rename file 1 -> 01, 2->02,..9->09 thì lisp sẽ chạy đúng.

Sở dĩ có chuyện này là vì lisp chỉ xem tên file là chuỗi (text) chứ không xem như số (number).

Vừa post xong thì nghĩ lại, thấy cũng không phức tạp lắm.

Phiphi thử lisp cải tiến dưới đây

(defun c:imf ()
(defun sosanh (a b )
(defun ne (s)
(atoi (vl-list->string
(vl-remove-if
'(lambda (x) (or (< x 48) (> x 57)))
(vl-string->list s)
)
)
)
)
(< (ne a) (ne b ))
)
(setq pathname (vl-filename-directory
(getfiled "Hay chon file dwg bat ky thuoc thu muc"
""
"dwg"
0
)
)
filelist (vl-sort (vl-directory-files pathname "*.dwg") 'sosanh)
p (getpoint "\nDiem chen: ")
xht (car p)
yht (cadr p)
)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(foreach filename filelist
(command "-insert"
(strcat pathname "/" filename)
(list xht yht)
1.0
1.0
0.0
)
(vla-getboundingbox
(vlax-ename->vla-object (entlast))
'p1
'p2
)
(setq
p1 (vlax-safearray->list p1)
p2 (vlax-safearray->list p2)
xht (+ xht (abs (car (mapcar '- p2 p1))))
blname (cdr (assoc 2 (entget (entlast))))
)
(command ".explode" (entlast) "")
(command "-purge" "Block" blname "N")
)
(setvar "osmode" oldos)
(princ)
)

  • 2

#979 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 27 March 2010 - 03:39 PM

Lisp trên của Nguyen Hoanh dùng để ghép các b/v thành một b/v chung.
Vậy nếu trường hợp ngược lại là muốn tách các b/v trong 1 b/v chung thành những b/v đơn thì LISP có thể thực hiện được không bác Nguyen Hoanh?
PP có 1 Lisp dưới đây của Jimmy Bergmark, nhưng chỉ tách các b/v trong các layout (Paper Space) thành các b/v đơn.
+Lệnh là LayoutsToDwg
;;;    LayoutsToDwgs.lsp
;;; Created 2000-03-27

;;; By Jimmy Bergmark
;;; Copyright © 1997-2006 JTB World, All Rights Reserved
;;; Website: www.jtbworld.com
;;; E-mail: info@jtbworld.com
;;;
;;; 2003-12-12 Sets UCS to world in model space to avoid problem with wblock
;;;

;;; For AutoCAD 2000, 2000i, 2002, 2004
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Creates drawings of all layouts.
;;; Only one layout at a time is saved, the rest are deleted.
;;; This is handy when you want to save to pre A2k versions.
;;; The new drawings are saved to the current drawings path
;;; and overwrites existing drawings.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:LayoutsToDwgs (/ fn path msg msg2 fileprefix)
(defun DelAllLayouts (Keeper / TabName)
(vlax-for Layout
(vla-get-Layouts
(vla-get-activedocument (vlax-get-acad-object))
)
(if
(and
(/= (setq TabName (strcase (vla-get-name layout))) "MODEL")
(/= TabName (strcase Keeper))
)
(vla-delete layout)
)
)
)

(vl-load-com)
(setq msg "")
(setq msg2 "")
(command "._undo" "_BE")
(setq fileprefix (getstring "Enter filename prefix: "))
(foreach lay (layoutlist)
(if (/= lay "Model")
(progn
(command "_.undo" "_M")
(DelAllLayouts lay)
(setvar "tilemode" 1)
(command "ucs" "w")
(setvar "tilemode" 0)
(setq path (getvar "DWGPREFIX"))
(setq fn (strcat path fileprefix lay ".dwg"))
(if (findfile fn)
(progn
(command ".-wblock" fn "_Y")
(if (equal 1 (logand 1 (getvar "cmdactive")))
(progn
(setq msg (strcat msg "\n" fn))
(command "*")
)
(setq msg2 (strcat msg2 "\n" fn))
)
)
(progn
(command ".-wblock" fn "*")
(setq msg (strcat msg "\n" fn))
)
)
(command "_.undo" "_B")
)
)
)
(if (/= msg "")
(progn
(prompt "\nFollowing drawings were created:")
(prompt msg)
)
)
(if (/= msg2 "")
(progn
(prompt "\nFollowing drawings were NOT created:")
(prompt msg2)
)
)
(command "._undo" "_E")
(textscr)
(princ)
)

  • 0

#980 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 27 March 2010 - 03:48 PM

Lisp trên của Nguyen Hoanh dùng để ghép các b/v thành một b/v chung.
Vậy nếu trường hợp ngược lại là muốn tách các b/v trong 1 b/v chung thành những b/v đơn thì LISP có thể thực hiện được không bác Nguyen Hoanh?
PP có 1 Lisp dưới đây của Jimmy Bergmark, nhưng chỉ tách các b/v trong các layout (Paper Space) thành các b/v đơn.
+Lệnh là LayoutsToDwg

Tất nhiên là được, nhưng muốn hỏi Phiphi thêm một số thông tin:
- tên file được đặt theo nguyên tắc nào?
- Các khung tên được sắp xếp ra sao? (trên một hàng hay theo ma trận nhiều hàng)
  • 1