Đến nội dung


Hình ảnh

Insert nhiều file DWG một lúc!


  • Please log in to reply
14 replies to this topic

#1 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 28 March 2010 - 09:31 AM

Mình có vấn đề này mà không thể làm được, mong các bạn giúp đỡ.
Mình có 50 bản vẽ (dwg), bây giờ mình muốn insert vào thành một file (không dùng xr), mình cứ phải Insert từng file một. Có lúc còn bị nhầm chứ (tên file không giống nhau mà). Vậy làm thế nào để một lần có thể Insert hết 50 bản vẽ đó vào không?
Mong nhận được sự giúp đỡ!
  • 0

#2 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 28 March 2010 - 11:39 AM

Mình có vấn đề này mà không thể làm được, mong các bạn giúp đỡ.
Mình có 50 bản vẽ (dwg), bây giờ mình muốn insert vào thành một file (không dùng xr), mình cứ phải Insert từng file một. Có lúc còn bị nhầm chứ (tên file không giống nhau mà). Vậy làm thế nào để một lần có thể Insert hết 50 bản vẽ đó vào không?
Mong nhận được sự giúp đỡ!

Chào bạn minhphuong_humg,
Bạn co thể sử dụng lisp imf.lsp của bác nguyenhoanh ở đây nhé:
http://www.cadviet.c...amp;#entry90892
Trước khi chạy lisp, bạn hãy tạo một thư mục mới và nhét tất cả các file bản vẽ cần insert vào thư mục này. Khi chạy lisp, lúc lisp hỏi bạn, hãy chọn một file bất kỳ trong thư mục này bạn nhé.
Chúc thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 29 March 2010 - 08:31 AM

Chào bạn minhphuong_humg,
Bạn co thể sử dụng lisp imf.lsp của bác nguyenhoanh ở đây nhé:
http://www.cadviet.c...amp;#entry90892
Trước khi chạy lisp, bạn hãy tạo một thư mục mới và nhét tất cả các file bản vẽ cần insert vào thư mục này. Khi chạy lisp, lúc lisp hỏi bạn, hãy chọn một file bất kỳ trong thư mục này bạn nhé.
Chúc thành công.

Mình đã download lisp đó về dùng thì nó báo lỗi "Unknown command "IMF". Press F1 for help." Mong nhận được sự giúp đỡ!
  • 0

#4 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 29 March 2010 - 08:51 AM

Mình đã download lisp đó về dùng thì nó báo lỗi "Unknown command "IMF". Press F1 for help." Mong nhận được sự giúp đỡ!

Chào bạn minhphuong_humg,
Theo cái lỗi nó báo chứng tỏ có rằng:
1/- Bạn hãy kiểm tra lại file download về nhé. Có thể bạn đã nhầm tên file.
2/- Bạn chưa load cái file này vào CAD

File này đã được nhiều người download về để sử dụng. Do vậy khả năng file lisp sai hay có lỗi là không thể bạn ạ. Hãy làm lại từng bước cẩn thận xem sao.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 01 April 2010 - 01:55 PM

Chào bạn minhphuong_humg,
Bạn co thể sử dụng lisp imf.lsp của bác nguyenhoanh ở đây nhé:
http://www.cadviet.c...amp;#entry90892
Trước khi chạy lisp, bạn hãy tạo một thư mục mới và nhét tất cả các file bản vẽ cần insert vào thư mục này. Khi chạy lisp, lúc lisp hỏi bạn, hãy chọn một file bất kỳ trong thư mục này bạn nhé.
Chúc thành công.

Mình đã làm và chèn vào cùng một bản vẽ mới. Nhưng có điều là mảnh 1 không "dính" với mảnh 2, mà 50 bản vẽ ấy dàn thành một hàng ngang. Trong khi mình Insert từng file thì nó lại dính liền với nhau? Xin hướng dẫn mình cách để có thể dính với nhau! Xin cảm ơn!
  • 0

#6 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 01 April 2010 - 03:36 PM

Mình đã làm và chèn vào cùng một bản vẽ mới. Nhưng có điều là mảnh 1 không "dính" với mảnh 2, mà 50 bản vẽ ấy dàn thành một hàng ngang. Trong khi mình Insert từng file thì nó lại dính liền với nhau? Xin hướng dẫn mình cách để có thể dính với nhau! Xin cảm ơn!

Chào bạn minhphuong_humg,
Sở dĩ vậy là do các bản vẽ gốc của bạn có chừa các khoảng trắng và có các khung bao bản vẽ kèm với khung tên. Nếu bạn muốn cho các bản vẽ dình liền nhau thì bạn cần bỏ đi các khung bao này chỉ để lại hình vẽ và scale nó lên với tỉ lệ tương ứng với khổ bản vẽ. Nhớ là phải kiểm tra tỷ lệ của các bản vẽ sao cho khi insert xong thì nó dính liền được với nhau.
Nếu là bạn định ghép các mảnh bản đồ với nhau thì việc này đòi hỏi bạn phải đánh số thứ tự của các bản vẽ cho hợp lý mới được.
Lisp trên là insert các bản vẽ thành một hàng ngang, còn nếu bạn muốn insert thành một bảng với số cột cho trước thì bạn có thể sử dụng lisp sau với điều kiện các bản vẽ phải có cùng kích thước như nhau.

(defun c:imf()
(vl-load-com)
(command "undo" "be")
(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)
i 1
k (getint "\n Nhap so cot: ")
)
(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)
m (rem i k)
xht (if (/= m 0) (+ xht (abs (car (mapcar '- p2 p1))))(- xht (* (1- k) (abs (car (mapcar '- p2 p1))))))
yht (if (= m 0) (- yht (abs (cadr (mapcar '- p2 p1)))) yht)
blname (cdr (assoc 2 (entget (entlast))))
)
(command ".explode" (entlast) "")
(command "-purge" "Block" blname "N")
(setq i (1+ i))
)
(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)


Chúc bạn thành công.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 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 04 April 2010 - 10:39 AM

Chào bạn minhphuong_humg,
Sở dĩ vậy là do các bản vẽ gốc của bạn có chừa các khoảng trắng và có các khung bao bản vẽ kèm với khung tên. Nếu bạn muốn cho các bản vẽ dình liền nhau thì bạn cần bỏ đi các khung bao này chỉ để lại hình vẽ và scale nó lên với tỉ lệ tương ứng với khổ bản vẽ. Nhớ là phải kiểm tra tỷ lệ của các bản vẽ sao cho khi insert xong thì nó dính liền được với nhau.
Nếu là bạn định ghép các mảnh bản đồ với nhau thì việc này đòi hỏi bạn phải đánh số thứ tự của các bản vẽ cho hợp lý mới được.
Lisp trên là insert các bản vẽ thành một hàng ngang, còn nếu bạn muốn insert thành một bảng với số cột cho trước thì bạn có thể sử dụng lisp sau với điều kiện các bản vẽ phải có cùng kích thước như nhau.
...
Chúc bạn thành công.

Chào bác phamthanhbinh.
Để sử dụng MPLOT của bác Nguyen Hoanh với Print select methol là chọn RECTANGLE khi in hàng loạt các bv đã được insert vào 1 bv. PP nhờ bác giúp bổ xung vào lisp trên với đoạn code là tự động insert các Rectange đúng với size 420X297 (A3) hoặc 841x594 (A1), layer của các Rectangle này sẽ là Defpoints. Toạ độ insert chính là toạ độ của các khung tên - thường là 0,0.
Cám ơn bác với lisp trên đã cho phép insert nhiều bv theo dạng ma trận mà PP có đề cập trong topic http://www.cadviet.c...o...203&st=1000
  • 0

#8 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 04 April 2010 - 02:26 PM

Chào bác phamthanhbinh.
Để sử dụng MPLOT.lsp của bác Nguyen Hoanh với Print select methol là chọn RECTANGLE khi in hàng loạt các bv đã được insert vào 1 bv. PP nhờ bác giúp bổ xung vào lisp trên với đoạn code là tự động insert các Rectange đúng với size 420X297 (A3) hoặc 841x594 (A1), layer của các Rectangle này sẽ là Defpoints. Toạ độ insert chính là toạ độ của các khung tên - thường là 0,0.
Cám ơn bác với lisp trên đã cho phép insert nhiều bv theo dạng ma trận mà PP có đề cập trong topic http://www.cadviet.c...o...203&st=1000

Ý Phiphi có phải là tạo 1 rectangle bo xung quanh block khung tên? với 2 điểm đối diện là bounding box của block khung tên?
  • 0

#9 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 04 April 2010 - 05:29 PM

Ý Phiphi có phải là tạo 1 rectangle bo xung quanh block khung tên? với 2 điểm đối diện là bounding box của block khung tên?

Đúng vậy bác Nguyen Hoanh, PP đã gặp nhiều trở ngại khi dùng MPLOT với việc chọn Block (của khung tên)
Thí dụ bản vẽ dưới đây:
Command:MPL
Pick Block:
Select objects: Specify opposite corner: 20 found
Select objects:
bad argument type: lentityp nil
Nhưng nếu vẽ thêm các Rectange cho mổi khung tên thì MPLOT in được ngay.
Kính nhờ Bác Hoanh check giúp.
http://www.cadviet.c...le_drawings.dwg
  • 0

#10 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 04 April 2010 - 07:08 PM

Đúng vậy bác Nguyen Hoanh, PP đã gặp nhiều trở ngại khi dùng MPLOT.lsp với việc chọn Block (của khung tên)
Thí dụ bản vẽ dưới đây:
Command:MPL
Pick Block:
Select objects: Specify opposite corner: 20 found
Select objects:
bad argument type: lentityp nil
Nhưng nếu vẽ thêm các Rectange cho mổi khung tên thì MPLOT in được ngay.
Kính nhờ Bác Hoanh check giúp.
http://www.cadviet.c...le_drawings.dwg

lisp B2R (block to rectangle) dưới đây sẽ giúp Phiphi:
(defun c:b2r ()
(setq ss (ssget '((0 . "INSERT"))))
(while (setq e (ssname ss 0))
(setq ss (ssdel e ss)
tmp (vla-getboundingbox (vlax-ename->vla-object e) 'p1 'p3)
p1 (vlax-safearray->list p1)
p3 (vlax-safearray->list p3)
p1 (list (car p1) (cadr p1))
p3 (list (car p3) (cadr p3))
p2 (list (car p1) (cadr p3))
p4 (list (car p3) (cadr p1))
tmp (list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 10 p1)
(cons 10 p2)
(cons 10 p3)
(cons 10 p4)
)
)
(entmake tmp)
)
)

  • 1

#11 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 05 April 2010 - 02:08 AM

lisp B2R (block to rectangle) dưới đây sẽ giúp Phiphi:

(defun c:b2r ()
(setq ss (ssget '((0 . "INSERT"))))
(while (setq e (ssname ss 0))
(setq ss (ssdel e ss)
tmp (vla-getboundingbox (vlax-ename->vla-object e) 'p1 'p3)
p1 (vlax-safearray->list p1)
p3 (vlax-safearray->list p3)
p1 (list (car p1) (cadr p1))
p3 (list (car p3) (cadr p3))
p2 (list (car p1) (cadr p3))
p4 (list (car p3) (cadr p1))
tmp (list
(cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 4)
(cons 70 1)
(cons 10 p1)
(cons 10 p2)
(cons 10 p3)
(cons 10 p4)
)
)
(entmake tmp)
)
)

Chào bác Nguyen Hoanh.
Bác có thể nhập đoạn code trên chung với MPLOT được không.
Như vậy User chỉ cần select các bản vẽ cần in ra hàng loạt mà khỏi phải chọn block khung tên hoặc Rectangle.
Chỉ cần đoạn code trên insert các Rectangle cho việc in xong rồi sẽ tự động xoá đi.
Bản vẽ Multiple drawings mà PP up trên không thể chọn block khung tên để in hàng loạt được.
Bác có phát hiện vì sao không vậy? Các khung tên trên là của AutoDesk tạo để dùng cho các templates trong p/m AutoCAD.
  • 0

#12 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 07 April 2010 - 04:50 PM

Không phải em cố tình không hiểu 2 bác Phiphi và bác Nguyen Hoanh đâu. Nhưng thực ra là em ko hiểu gì thật, ý em đã nói rõ từ đầu là em muốn ghép 50 mảnh bản đồ địa chính ấy lại với nhau bằng lệnh Insert, một cách tự động nghĩa là một lúc có thể em chọn 50 mảnh ấy một lúc. Chứ cứ chèn từng mảnh một, có những lúc tên file không giống nhau em cứ lung tung cả lên các anh ạ. Vậy giờ em phải làm thế nào để có thể tự động được khâu Insert đó. Rất mong 2 bác và các bạn giúp đỡ.
  • 0

#13 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

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

Đã gửi 07 April 2010 - 06:21 PM

Chào bạn minhphuong_humg,
Sở dĩ vậy là do các bản vẽ gốc của bạn có chừa các khoảng trắng và có các khung bao bản vẽ kèm với khung tên. Nếu bạn muốn cho các bản vẽ dình liền nhau thì bạn cần bỏ đi các khung bao này chỉ để lại hình vẽ và scale nó lên với tỉ lệ tương ứng với khổ bản vẽ. Nhớ là phải kiểm tra tỷ lệ của các bản vẽ sao cho khi insert xong thì nó dính liền được với nhau.
Nếu là bạn định ghép các mảnh bản đồ với nhau thì việc này đòi hỏi bạn phải đánh số thứ tự của các bản vẽ cho hợp lý mới được.
Lisp trên là insert các bản vẽ thành một hàng ngang, còn nếu bạn muốn insert thành một bảng với số cột cho trước thì bạn có thể sử dụng lisp sau với điều kiện các bản vẽ phải có cùng kích thước như nhau.
...
Chúc bạn thành công.

Mình nghỉ lisp trên kg thực hiện đúng đc ý bạn minhphuong_humg đâu. Nếu bản đồ làm đúng qui trình, nó luôn giữ đúng vị trí tọa độ của nó khi đo đạc tính toán, vấn đề tỷ lệ chỉ là để in ra thôi. Do đó, khi Insert vào luôn cho điểm Insert là 0,0,0. tỷ lệ x=y=z=1 là đc.
  • 0

#14 minhphuong_humg

minhphuong_humg

    biết lệnh offset

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

Đã gửi 08 April 2010 - 08:34 AM

Mình nghỉ lisp trên kg thực hiện đúng đc ý bạn minhphuong_humg đâu. Nếu bản đồ làm đúng qui trình, nó luôn giữ đúng vị trí tọa độ của nó khi đo đạc tính toán, vấn đề tỷ lệ chỉ là để in ra thôi. Do đó, khi Insert vào luôn cho điểm Insert là 0,0,0. tỷ lệ x=y=z=1 là đc.

Vậy nói tóm lại là không có cách nào Insert một lúc 50 file mà cho chúng dính vào nhau được ưh? Vậy cũng hơi nản nhỉ? Vậy mình lại vừa ngồi vừa ghi ra giấy rồi Insert từng tờ một vậy! Nếu bạn nào có cách hay khác xin hướng dẫn nhé!
Xin cảm ơn!
  • 0

#15 kedensau88

kedensau88

    biết vẽ circle

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

Đã gửi 24 April 2012 - 11:28 PM

Các anh ơi,em có file thế này
http://www.mediafire...86d7fh80898g8ey
Nếu em dùng lệnh "IMF" để insert nhiều bản vẽ vào chung 1 bản vẽ thì các bản vẽ sau khi insert vào sẽ bị nằm chồng chéo lên nhau,không tách riêng ra từng phần riêng biệt.
Các anh kiểm tra lại và sửa lại dùm em với.
Cảm ơn các anh nhiều !!!
  • 0