Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Nguyen Hoanh

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

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

Nguyen Hoanh    4.524
Trong Express tools của AutoCAD có CHSPACE.LSP.

Lisp này (lệnh CHSPACE) dùng để MOVE khung tên và những gì User chọn trong Paper Space sang Model Space với tỷ lệ do User muốn.

Nhờ các Bác viết giúp Lisp với mục đích ngược với CHSPACE.LSP:

+ Đánh tên lệnh trong model, select block khung tên

+ Lisp sẽ move block khung tên trong model space sang Paper space với tỷ lệ của User chọn.

+ Tự động tạo 1 viewport bên trong khung tên.

PP up 2 bản vẽ để test.

Cám ơn nhiều

http://www.cadviet.com/upfiles/2/model_2_layout.zip

http://www.cadviet.com/upfiles/2/chspace.lsp

 

Phiphi nên cho lại ví dụ khác hoặc cho thêm thông tin, vì 2 file bạn upload không tạo nên một điển hình: chương trình lisp không biết lấy pline (clip) của viewport ở đâu bên model.

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
phamthanhbinh    3.123
Cám ơn bạn nhé, nếu có các đường line kẻ thành bảng thì tốt qua, thanks

Chào bạn vtd_xd,

Việc kẻ bảng này không khó lắm. Bạn hãy bổ sung vào lisp trên đoạn code sau :

(setq p1 (list (- (car p) (* 0.1 d)) (- (cadr p) (* 0.5 h))))
(command "rectang" p1 (list (+ (car p1) d) (- (cadr p1) (* 2 h))))
(setq en (entlast))
(command "array" en "" "r" k 4 (- (* 2 h)) d)

 

Thêm vào trước dòng code (command "undo" "e") và sau dòng code (setq k (1+k)))

  • 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
phamthanhbinh    3.123
Chào các bác...

 

em có yêu cầu nho nhỏ mong các bác giúp đỡ. Cái này có vẻ đơn giản, nhưng trong công việc của em lại mất khá nhiều thời gian để thực hiện. Cụ thể như thế này ạ : Trong thiết kế chiếu sáng, đèn cho 1 phòng sẽ đc đặt như sau, khoảng cách từ đèn đến tường bằng 1/2 khoảng cách giữa các đèn. Diện tích phòng được xác định 2 góc chéo hcn, số hàng, số cột của đèn đã xác định được rồi. Vậy các bác có thể giúp em tạo 1 lisp giống như lệnh array, nhưng thay cái offset distance and direction bằng chọn diện tích phòng đó, rồi tự tính toán để đặt các block theo hàng và cột nhập vào.

Các bác xem thêm file gửi kèm giúp em nhé

Many thanks.

http://www.cadviet.com/upfiles/2/array_doi..._theo_phong.dwg

Chào bạn mrmoon273,

Mình viết cái lisp này xong mới biết bác SSG đã viết rồi, tuy vậy mình vẫn gửi để bạn tham khảo. Cả lisp của mình và của bác SSG đều chỉ đúng khi cái insert point của block đèn của bạn trùng với tâm của block. Trong trường hợp cái insert point của bạn lệch tâm thì bạn cần xác định khoảng lệch tâm này và hiệu chỉnh nó lại bằng lệnh move co phù hợp bạn nhé.

Lisp của mình đây:

(defun c:btd ()
(command "undo" "be")
(setq p (getpoint "\n Chon goc trai duoi")
p1 (getpoint "\n Chon goc phai tren")
a (abs (- (car p1) (car p)))
b (abs (- (cadr p1) (cadr p)))
m (getint "\n Nhap so hang den: ")
n (getint "\n Nhap so day den: ")
bd (entsel "\n Chon block den")
pd (cdr (assoc 10 (entget (car bd))))
p0 (list (+ (car p) (/ a 2 n))  (+ (cadr p) (/ b 2 m)))
pd (trans pd 0 1))
(command "copy" bd "" pd  p0 )
(setq en (entlast))
(command "array" en "" "r" m n (/ b m) (/ a n))
(command "undo" "e")
(princ)
)

 

Chúc bạn vui.

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
Phiphi-    175
Phiphi nên cho lại ví dụ khác hoặc cho thêm thông tin, vì 2 file bạn upload không tạo nên một điển hình: chương trình lisp không biết lấy pline (clip) của viewport ở đâu bên model.

Cám ơn bác Nguyen Hoanh.

Vì khung tên của mỗi cty một kiểu nên để đơn giản hoá, bác cứ lấy khổ giấy của layout làm thành 1 viewport hoặc cứ lấy boundary bên trong khung tên.

Thật ra, khi bản vẽ đã trình bày hết trong model thì tất cả các chi tiết cũng đều bố trí bên trong khung tên rồi. Điều chính yếu là Lisp tính toán scale của cái khung tên bên model sao cho fit với khổ giấy A1 hoặc A3 (phổ biến) trong khi chuyển đổi.

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
TRUNGNGAMY    91
Mình đang tìm cách truy xuất dữ liệu của đối tượng trong một block. Giả sử trong block có một hình chữ nhật nằm trong layer "1", một hình chữ nhật khác nằm trong layer "2". Thông qua lisp, làm thế nào biết được tọa độ của hai hình chữ nhật đó trong bản vẽ.

Bạn nào biết vấn đề này xin hướng dẫn, cám ơn nhiều.

Ồ, sao kg có bạn nào góp ý hết nhỉ. chẳng lẽ kg có bạn nào đụng phải vđ này nhỉ. Về vđ này mình cũng đang cố gắng nhưng vì kiến thức vl của mình kém nên kg vận dụng đc (mình chỉ biết autolisp thôi). Tuy nhiên, mình nghỉ vđ này sẽ có thể giải quyết được vì cad từ r2000 trở lên đã cho hiệu chỉnh block (lúc này block đã trở thành một bv, mình có thể sd lisp như đối với bv). Có lẽ vđ này phải có hàm mở đối tượng là block thay vì là bản vẽ mới giải quyết đc. Tuy nhiên, mình kg biết những hàm như thế trên vl. Các cao thủ nào rành về vl có thể hỗ trợ mình đc chăng. Cũng có thể vđ này đã đc giải quyết nhẹ nhàng hơn nhưng mình kg biết, xin chỉ điểm

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
thiep    263
Ồ, sao kg có bạn nào góp ý hết nhỉ. chẳng lẽ kg có bạn nào đụng phải vđ này nhỉ. Về vđ này mình cũng đang cố gắng nhưng vì kiến thức vl của mình kém nên kg vận dụng đc (mình chỉ biết autolisp thôi). Tuy nhiên, mình nghỉ vđ này sẽ có thể giải quyết được vì cad từ r2000 trở lên đã cho hiệu chỉnh block (lúc này block đã trở thành một bv, mình có thể sd lisp như đối với bv). Có lẽ vđ này phải có hàm mở đối tượng là block thay vì là bản vẽ mới giải quyết đc. Tuy nhiên, mình kg biết những hàm như thế trên vl. Các cao thủ nào rành về vl có thể hỗ trợ mình đc chăng. Cũng có thể vđ này đã đc giải quyết nhẹ nhàng hơn nhưng mình kg biết, xin chỉ điểm

Chào TRUNGNGAMY, Lisp sẽ đưa ra 1 list các ename các đối tượng chứa trong block. Bạn tiếp tục khai thác nhé:

(defun c:exp (/ en obj objarr lstent)
 (setq en (car (entsel "\nPick a block:")))
 (setq obj (vlax-ename->vla-object en))
 (setq	objarr (vla-Explode obj)
lstobj (vlax-safearray->list
	  (vlax-variant-value objarr)
	)
 )
 (setq lstent (mapcar 'vlax-vla-object->ename lstobj))
 (princ lstent)
)

  • Vote tăng 3

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
queen2k8    0
Chào TRUNGNGAMY, Lisp sẽ đưa ra 1 list các ename các đối tượng chứa trong block. Bạn tiếp tục khai thác nhé:

(defun c:exp (/ en obj objarr lstent)
 (setq en (car (entsel "\nPick a block:")))
 (setq obj (vlax-ename->vla-object en))
 (setq	objarr (vla-Explode obj)
lstobj (vlax-safearray->list
	  (vlax-variant-value objarr)
	)
 )
 (setq lstent (mapcar 'vlax-vla-object->ename lstobj))
 (princ lstent)
)

Xin chào mọi người.Mình có 1 yêu cầu nhỏ.Mọi người giúp đỡ.Ai có lisp tính diện tích phần hatch rồi ghi ra file text ( có thể ghi bất kỳ chỗ nào mình kích chuột hoặc là chọn text sẵn có cũng được).Trên diễn đàn có file lisp này rồi nhưng link không down được.Ai có hoặc làm được thì up lên giúp mình nhé.Cảm ơn rất nhiều.

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
gia_bach    1.442
Ồ, sao kg có bạn nào góp ý hết nhỉ. chẳng lẽ kg có bạn nào đụng phải vđ này nhỉ. Về vđ này mình cũng đang cố gắng nhưng vì kiến thức vl của mình kém nên kg vận dụng đc (mình chỉ biết autolisp thôi). Tuy nhiên, mình nghỉ vđ này sẽ có thể giải quyết được vì cad từ r2000 trở lên đã cho hiệu chỉnh block (lúc này block đã trở thành một bv, mình có thể sd lisp như đối với bv). Có lẽ vđ này phải có hàm mở đối tượng là block thay vì là bản vẽ mới giải quyết đc. Tuy nhiên, mình kg biết những hàm như thế trên vl. Các cao thủ nào rành về vl có thể hỗ trợ mình đc chăng. Cũng có thể vđ này đã đc giải quyết nhẹ nhàng hơn nhưng mình kg biết, xin chỉ điểm

Bạn tham khảo Lisp sau :

(defun c:blk (/ blk en)
 (setq en (car (entsel "\nPick a block:")))
 (setq Blk (vlax-ename->vla-object en))
 (foreach memb (vlax-invoke Blk 'Explode)
   ;duyet qua cac doi tuong trong Block
   (if (wcmatch (vla-get-ObjectName memb) "*Polyline")
     (progn
(if (eq (vla-get-Layer memb) "1");doi tuong la Pline tren Layer 1
  (princ "Pline tren layer 1"))  ;getdata : lay toa do Pline
(if (eq (vla-get-Layer memb) "2");doi tuong la Pline tren Layer 2
  (princ "Pline tren layer 2"))  ;getdata : lay toa do Pline
))
   (vla-delete memb) )
 (princ))

 

hoặc Lisp TRIM giữa Block và các đối tuợng khác.

http://www.cadviet.com/forum/index.php?sho...ost&p=81690

  • Vote tăng 3

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
connaivang    1
Chào tất cả các bác trên diễn đàn.

Xin được cảm ơn các bác đã giúp đỡ em rất nhiều trong thời gian qua.

Đây là một diễn đàn thật sự rất bổ ích.

Em có một câu hỏi mong được diễn đàn giúp đỡ.

Em giả sử trong một dự án nào đó, chúng ta có rất nhiều bản vẽ CAD. Trong số đó có các bản vẽ lắp, bản vẽ chi tiết, bản vẽ thống kê số lượng chi tiết (cái này có thể là file CAD hoặc file Excel),...

Em không biết được liệu CAD có thể có chức năng link các dữ kiện ở các bản vẽ này với nhau có được không? Nếu dùng Lisp thì liệu có thêm chức năng này được không?

Ở đây, em đã upload lên diễn đàn một ví dụ nho nhỏ cụ thể. Ví dụ của em là có một bản vẽ lắp BV01, hai bản vẽ chi tiết (mỗi bản vẽ có hai chi tiết với số lượng khác nhau) BV02 và BV03, cùng một bản vẽ thống kê số lượng chi tiết Parlist như sau:

http://myfreefilehosting.com/f/e157ee70b7_0.78MB

Những bản vẽ này đều liên quan với nhau về số lượng, vật liệu, kích thước,... Nếu giả sử em thay đổi một trong các thông số như vật liệu hay kích thước ở một trong các bản vẽ BV02 hay BV03 thì làm cách nào để bản vẽ BV01 và bản vẽ Parlist kia cũng cập nhật được sự thay đổi ấy.

Mong các bác tìm hiểu giúp em.

Xin cảm ơn các bác rất nhiều.

 

Không có ai quan tâm giúp đỡ em việc này sao? Giúp em với các bác hảo tâm ơi

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
ndtnv    397
Mình đang tìm cách truy xuất dữ liệu của đối tượng trong một block. Giả sử trong block có một hình chữ nhật nằm trong layer "1", một hình chữ nhật khác nằm trong layer "2". Thông qua lisp, làm thế nào biết được tọa độ của hai hình chữ nhật đó trong bản vẽ.

Bạn nào biết vấn đề này xin hướng dẫn, cám ơn nhiều.

 

Sau đây là đoạn code sample lấy block object

(setq bl (ssname (ssget ":S") 0))
(setq blref (vlax-ename->vla-object bl))
(setq blname (vlax-get-property blref 'Name))
(setq dbl (tblobjname "block" blname))
(setq blobj (vlax-ename->vla-object (cdr (assoc 330 (entget dbl)))))
(setq i 0 n (vlax-get-property blobj 'Count ))

 

sau đó duyệt qua từng item trong blobj để lấy hcn với layer cần thiết (VD "1")

vì bạn không post bản vẽ nên giả sử ObjectName của hcn là "AcDbPolyline"

bạn sửa lại nếu không đúng

 

(setq it (vlax-invoke-method blobj 'item i))
(setq la (vlax-get-property it 'Layer))
(setq on (vlax-get-property it 'ObjectName))
(if (and (= la "1")	(= on "AcDbPolyline"))
 (vlax-invoke-method it 'GetBoundingBox 'p1 'p2)
)

Ta được tọa độ tương đối của 2 điểm BoundingBox của hcn so với điểm insert

của block đã select.

Việc chuyển tọa độ p1, p2 về WCS chỉ là bài toán về hình học và lượng giác.

 

So sánh 2 cách:

Cách explode đơn giản, nhưng không đúng với attribute , nếu block có scale thì dimension không đúng.

Cách truy xuất trực tiếp phức tạp hơn, đặc biệt là khi xoay 3D nhưng chính xác và an toàn.

Nếu chạy với nhiều block cũng nhanh hơn vì chỉ truy xuất các đối tượng 1 lần.

  • 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
TRUNGNGAMY    91
Sau đây là đoạn code sample lấy block object

(setq bl (ssname (ssget ":S") 0))
(setq blref (vlax-ename->vla-object bl))
(setq blname (vlax-get-property blref 'Name))
(setq dbl (tblobjname "block" blname))
(setq blobj (vlax-ename->vla-object (cdr (assoc 330 (entget dbl)))))
(setq i 0 n (vlax-get-property blobj 'Count ))

 

sau đó duyệt qua từng item trong blobj để lấy hcn với layer cần thiết (VD "1")

vì bạn không post bản vẽ nên giả sử ObjectName của hcn là "AcDbPolyline"

bạn sửa lại nếu không đúng

 

(setq it (vlax-invoke-method blobj 'item i))
(setq la (vlax-get-property it 'Layer))
(setq on (vlax-get-property it 'ObjectName))
(if (and (= la "1")	(= on "AcDbPolyline"))
 (vlax-invoke-method it 'GetBoundingBox 'p1 'p2)
)

Ta được tọa độ tương đối của 2 điểm BoundingBox của hcn so với điểm insert

của block đã select.

Việc chuyển tọa độ p1, p2 về WCS chỉ là bài toán về hình học và lượng giác.

Cám ơn bạn ndtnv, thiep, gia_bach và các bạn. Mình chỉ bí cách thâm nhập vào trong block để tím ra đối tượng có đặc điểm riêng thôi, còn các thao tác chọn và truy xuất dữ lịêu đối tượng thì mình làm đc. Nếu kg có các bạn, chắc mình chào thua quá. Một lần nữa cám ơn các bạ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
ssg    1.088
Chào tất cả các bác trên diễn đàn.

Xin được cảm ơn các bác đã giúp đỡ em rất nhiều trong thời gian qua.

Đây là một diễn đàn thật sự rất bổ ích.

Em có một câu hỏi mong được diễn đàn giúp đỡ.

Em giả sử trong một dự án nào đó, chúng ta có rất nhiều bản vẽ CAD. Trong số đó có các bản vẽ lắp, bản vẽ chi tiết, bản vẽ thống kê số lượng chi tiết (cái này có thể là file CAD hoặc file Excel),...

Em không biết được liệu CAD có thể có chức năng link các dữ kiện ở các bản vẽ này với nhau có được không? Nếu dùng Lisp thì liệu có thêm chức năng này được không?

Ở đây, em đã upload lên diễn đàn một ví dụ nho nhỏ cụ thể. Ví dụ của em là có một bản vẽ lắp BV01, hai bản vẽ chi tiết (mỗi bản vẽ có hai chi tiết với số lượng khác nhau) BV02 và BV03, cùng một bản vẽ thống kê số lượng chi tiết Parlist như sau:

http://myfreefilehosting.com/f/e157ee70b7_0.78MB

Những bản vẽ này đều liên quan với nhau về số lượng, vật liệu, kích thước,... Nếu giả sử em thay đổi một trong các thông số như vật liệu hay kích thước ở một trong các bản vẽ BV02 hay BV03 thì làm cách nào để bản vẽ BV01 và bản vẽ Parlist kia cũng cập nhật được sự thay đổi ấy.

Mong các bác tìm hiểu giúp em.

Xin cảm ơn các bác rất nhiều.

Chào bạn!

Vấn đề bạn muốn không đơn giản đâu. Theo hiểu biết của ssg thì với cái "tầm" của AutoCAD, nhiệm vụ bạn đặt ra cho nó là "bất khả thi". Có dùng lisp hay VBA hỗ trợ cũng "bó tay chấm com"!

 

1- Một chi tiết nào đó, khi bạn vẽ trên bản vẽ chi tiết và bản vẽ lắp nói chung là khác nhau (các đường nét, yếu tố cấu thành nên chúng khác nhau). Ví dụ, chi tiết trục trên bản lắp của bạn có gạch mặt cắt còn trên bản chi tiết (BV02) thì không. AutoCAD không thể hiểu 2 cái đó là một được. Mà đã không hiểu thì không thể có chuyện cái này thay đổi thì cái kia update theo.

 

2- Bạn tìm hiểu lệnh XAttach (Menu-Insert-DWG Reference...) có thể đáp ứng được phần nào đó ý muốn của bạn. Tuy nhiên, theo ssg thì tính năng này còn quá "khiêm tốn", chả bõ bèn gì so với nhu cầu đa dạng và phức tạp trong thực tế.

 

3- Nếu có điều kiện, bạn thử nghiên cứu SolidWorks hoặc Inventor xem. Yêu cầu của bạn hầu như được đáp ứng hoàn toàn vì chúng quản lý các đối tượng theo "cung cách" khác hẳn, có thể nói là ở một "tầm" cao hơn AutoCAD rất nhiều. Cùng một đối tượng thì dù nằm trong bản vẽ chi tiết (part) hay trong bản vẽ lắp (assembly) cũng chính là nó. Chương trình hiểu đối tượng như là một thực thể hình học 3D thật sự. Do đó, khi bạn thay đổi "cái này" thì "cái kia" đương nhiên tự động update theo.

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
Phiphi-    175
Phiphi nên cho lại ví dụ khác hoặc cho thêm thông tin, vì 2 file bạn upload không tạo nên một điển hình: chương trình lisp không biết lấy pline (clip) của viewport ở đâu bên model.

Cháo bác Nguyen Hoanh.

Lisp CHSPACE đã viết sẵn cho việc chuyển đổi cả HAI chiều rồi (mới phát hiện tối qua)

Dùng chung một lệnh CHSPACE, khi làm việc thì phải luôn ở Paper Space.

Chuyển Objects từ Layout sang Model thì tự động nhung khi muốn chuyển Objects từ Model sand Layout thì phải làm như sau:

+ Switch sang Paper Space.

+ Set khổ giấy.

+ Tạo 1 viewport.

+ Double click vào bên trong viewport để chuyển vào Model.

+ Lệnh CHSPACE rồi select objects.

+ Lisp chuyển các selected objects sang Paper Space.

Cái bất tiện là lisp CHSPACE chỉ thực hiện cái gọi là WHAT YOU SEE IS WHAT YOU GET.

Bây giờ nhờ Bác làm sao để có thể thêm vào option cho Scale để có thể khắc phục cái WYSIWYG.

Thank you.

P/s: Lệnh MODEL dùng chuyển từ Paper Space sang Model Space vậy lệnh gì dùng để chuyển từ Model Space sang Paper Space vậy các Bác?

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
connaivang    1
Chào bạn!

Vấn đề bạn muốn không đơn giản đâu. Theo hiểu biết của ssg thì với cái "tầm" của AutoCAD, nhiệm vụ bạn đặt ra cho nó là "bất khả thi". Có dùng lisp hay VBA hỗ trợ cũng "bó tay chấm com"!

 

1- Một chi tiết nào đó, khi bạn vẽ trên bản vẽ chi tiết và bản vẽ lắp nói chung là khác nhau (các đường nét, yếu tố cấu thành nên chúng khác nhau). Ví dụ, chi tiết trục trên bản lắp của bạn có gạch mặt cắt còn trên bản chi tiết (BV02) thì không. AutoCAD không thể hiểu 2 cái đó là một được. Mà đã không hiểu thì không thể có chuyện cái này thay đổi thì cái kia update theo.

 

2- Bạn tìm hiểu lệnh XAttach (Menu-Insert-DWG Reference...) có thể đáp ứng được phần nào đó ý muốn của bạn. Tuy nhiên, theo ssg thì tính năng này còn quá "khiêm tốn", chả bõ bèn gì so với nhu cầu đa dạng và phức tạp trong thực tế.

 

3- Nếu có điều kiện, bạn thử nghiên cứu SolidWorks hoặc Inventor xem. Yêu cầu của bạn hầu như được đáp ứng hoàn toàn vì chúng quản lý các đối tượng theo "cung cách" khác hẳn, có thể nói là ở một "tầm" cao hơn AutoCAD rất nhiều. Cùng một đối tượng thì dù nằm trong bản vẽ chi tiết (part) hay trong bản vẽ lắp (assembly) cũng chính là nó. Chương trình hiểu đối tượng như là một thực thể hình học 3D thật sự. Do đó, khi bạn thay đổi "cái này" thì "cái kia" đương nhiên tự động update theo.

 

Chân thành cảm ơn bác ssq đã quan tâm đến mong muốn của em.

Thực ra, mong muốn của em không đến mức sâu xa như bác đã đề cập đâu. Ở đây, điều em quan tâm là khả năng thống kê (ví dụ như số lượng, vật liệu, kích thước phôi, ...) của các bản vẽ mà thôi chứ không cần phải liên kết bền chặt mọi yếu tố. Nếu bác đã xem qua một ví dụ của em, bác sẽ thấy có phần bảng thống kê ở phía trên khung tên và ở file thống kê chung PARTLIST. Em muốn hỏi liệu chúng ta có thể tạo sự liên kết giữa chúng hay không? Em giả sử trong file BV01 (Bản vẽ lắp) số lượng các chi tiết không phải như trong hình vẽ đó nữa mà có thể tăng hoặc giảm, thì làm cách nào đó, số lượng trong bản PARTLIST cũng sẽ thay đổi theo. Hoặc như, vật liệu chế tạo, kích thước phôi trong các bản vẽ chi tiết BV02, BV03 có sự thay đổi thì bằng cách nào đó, sự thống kê trong bản vẽ lắp và bản thống kê chung cũng sẽ cập nhật được những thông tin này.

Mong muốn của em là như vậy, mong các bác nghiên cứu giúp em xem liệu AutoCAD, với sự giúp đỡ của autolisp hay VBA có thể giải quyết được điều em mong muốn hay không?

Rất cảm ơn các bác trong diễn đàn đã quan tâm.

Chúc các bác luôn mạnh khoẻ và vui vẻ!

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
thonghoang1    9

mình nhở mấy anh viết dum minh cái lisp thực hiện nội dung sau được không.mình có một bảng khối lượng giống trong file mình gởi.các số 1,2,3,4 chỉ là vị trí của các text đấy thôi,các text của từng vị trí có thể không thẳng hàng,cột nhau.giờ mình cần sắp xếp các text có chử đầu tiên giống nhau vào cùng một cột,(ví dụ:các text có chử đắp vào một cột,đào vào một cột.....)có thể có nhiều vị trí chú không phải chỉ có 4 vị trí như trong bảng vẽ mình đửa.mong mọi người quan tâm.nêu không hiêu ý mình có thể liên lạc qua yahoo.

http://www.cadviet.com/upfiles/2/drawing2_6.dwg

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
thiep    263
tôi có một yêu cầu nhỏ này mong mọi người giúp:Tôi có một vùng được khoanh bằng poly,tôi muốn tạo ra một mạng lưới tam giác khép kín gồm các tam giác nhỏ vẽ bằng poly,các cạnh tam giác chẳn do mình đặt chiều dài,còn các cạnh tam giác lẻ(tam giác nằm ở viền) tuỳ biến.kết quả giống file tôi gời http://www.cadviet.com/upfiles/2/drawing1_25.dwg

Chào Thonghoang1, Lisp này này thiep đã viết xong, nhưng sau khi thử trên Cad2007 thì nó không chạy không đúng. Vì vậy, yêu cầu dùng lisp là:

- Từ cad 2008 trở lên có cài Express tools

- Copy dòng mã sau vào file acad.pat:

*AutoTri, Trianglular spacing

0, 0,0, 0.5,0.866025404, 0,-1

 

Và đây là lisp luoitamgiac.lsp, lệnh là 3nt:

;;; Thank Daniele Piazza, ADN member Mechanical Solution s.r.l.		;
;;; Phat trien boi Tran Thiep 03/2010
(defun flagoff (lstpo / dt i flag)
 (setq dt 0.0
       i 0)
 (setq lstpo (append lstpo (list (car lstpo))))
 (repeat (- (length lstpo) 1)
   (setq dt (+	dt
	(- (* (car (nth i lstpo)) (cadr (nth (1+ i) lstpo)))
	   (* (cadr (nth i lstpo)) (car (nth (1+ i) lstpo)))
	)
     )
   )
   (setq i (1+ i))
 )
 (If (minusp dt)
   (setq flag (- vwsz))
   (setq flag vwsz)
 )
 flag
)
;;;--------------------------------
(defun cent (ent / tria)
 (setq tria (ACET-GEOM-VERTEX-LIST ent))
 (if (eq (car tria) (last tria))
   (setq tria (cdr tria))
 )
 (list (/ (apply '+ (mapcar 'car tria)) 3)
       (/ (apply '+ (mapcar 'cadr tria)) 3)
       (/ (apply '+ (mapcar 'caddr tria)) 3)
 )  
)
;;;-----------------------------
(defun Arrhat (obj / Arr L)
 (setq L (cons obj L))
 (setq Arr (vlax-make-safearray
    vlax-vbObject
    (cons 0 (1- (length L)))
  )
 )
 (vlax-safearray-fill Arr L)
)
;;;--------------------------
(defun addpo (po / obj)
 (vla-put-layer
 (setq obj  (vla-addpoint *Model* (vlax-3d-point po)))
   "LA_THIEP"
 )
 (vlax-vla-object->ename obj)
)
;;;------------------------
(defun GETCIRCIRCUMCIRCLE (triangle / centpo)
 (setq centpo (apply 'acet-geom-arc-center TRIANGLE))
 (list centpo (distance centpo (car TRIANGLE)))
)
;;;------------------------
(defun ISINSIDE	(pt circle)
 (setq	ctr (car circle)
rad (cadr circle)
 )
 (< (distance pt ctr) rad)
)
;;;Search the supertriangle that contain all points in the data set;
(defun FINDSUPERTRIANGLE (ptlst /      xmax   xmin   ymax	ymin
		  zmax   zmin   dx	   dy	dmax
		  xmid   ymid   trx1   trx2	trx3
		  try1   try2   try3   trz1	trz2
		  trz3
		 )
 (setq	xmax (apply 'max (mapcar 'car ptlst))
xmin (apply 'min (mapcar 'car ptlst))
ymax (apply 'max (mapcar 'cadr ptlst))
ymin (apply 'min (mapcar 'cadr ptlst))
dx   (- xmax xmin)
dy   (- ymax ymin)
dmax (max dx dy)
xmid (* (+ xmax xmin) 0.5)
ymid (* (+ ymax ymin) 0.5)
trx1 (- xmid (* dmax 2.0))
try1 (- ymid dmax)
trz1 0.0
trx2 xmid
try2 (+ ymid dmax)
trz2 0.0
trx3 (+ xmid (* dmax 2.0))
try3 (- ymid dmax)
trz3 0.0
 )
 (list	(list trx1 try1 trz1)
(list trx2 try2 trz2)
(list trx3 try3 trz3)
 )
)
;;;	add triangle edges at the edge queue;
(defun ADDTRIANGLEEDGES (triangle edgelst)
 (append	edgelst
(list (list (car triangle) (cadr triangle))
      (list (cadr triangle) (caddr triangle))
      (list (caddr triangle) (car triangle))
)
 )
)
;;;	the fun side if the algorithm. Draw triangulation.;
(defun DRAWTRIANGLE (triangle / obj)
 (ACET-LWPLINE-MAKE (list triangle))
 (setq obj (vlax-ename->vla-object (entlast)))
 (vla-put-Closed obj t)
 (vla-put-Layer obj "LA_THIEP")
)

;;;	Test the edge queue to remove duplicates (warning CW & CCW!);
;;;							;

(defun REMOVEDOUBLYEDGES (edgelst fuzzy nulllist / i k)
 (setq j 0)
 (while (< j (length edgelst))
   (setq k (1+ j))
   (while (< k (length edgelst))
     (if
(or
  (and
    (equal (car (nth j edgelst)) (car (nth k edgelst)) fuzzy)
    (equal (cadr (nth j edgelst)) (cadr (nth k edgelst)) fuzzy)
  )
  (and (equal (car (nth j edgelst)) (cadr (nth k edgelst)) fuzzy)
       (equal (cadr (nth j edgelst)) (car (nth k edgelst)) fuzzy)
  )
)
 (setq edgelst (nth_subst j nulllist edgelst)
       edgelst (nth_subst k nulllist edgelst)
 )
     )
     (setq k (1+ k))
   )
   (setq j (1+ j))
 )
 edgelst
)

;;;	Add new triangle generated by pt to triangle list.;
;;;						;

(defun ADDNEWTRIANGLES (pt edgelst trianglelst / j triangle)
 (setq j 0)
 (while (< j (length edgelst))
   (if	(nth j edgelst)
     (setq triangle	(cons pt (nth j edgelst))
    trianglelst	(cons (list triangle nil) trianglelst)
     )
   )
   (setq j (1+ j))
 )
 trianglelst
)


;;;	delete the n item in the list (by position, not by value!!)	;
(defun NTH_DEL (N LST / l)
 (repeat n
   (setq l   (cons (car lst) l)
  lst (cdr lst)
   )
 )
 (append (reverse l) (cdr lst))
)
;;;	Replace the index element in the list with new element. This function is 	;
;;;	recursive this is not a great solution with a large amount of data.		;
(defun NTH_SUBST (index new Alist)
 (cond
   ((minusp index) Alist)
   ((zerop index) (cons new (cdr Alist)))
   (T
    (cons (car Alist) (nth_subst (1- index) new (cdr Alist)))
   )
 )
)
;;;-------------------------
(defun Text (*Model* str po H / obj)
 (setq	obj (vla-AddText
      *Model*
      str
      (vlax-3d-point po)
      h
    )
 )
 (vla-put-Alignment obj acAlignmentmiddleCenter)
 (vla-put-TextAlignmentPoint obj (vlax-3d-point po))
)
;;;---------------------
(defun DXF (code name) (cdr (assoc code (entget name))))
;;;======================MAIN===================================================
=
(defun c:3nt (/ cmdo      doc	      *Model* *layer*   addH      entlwp
      objlwp   arr hat vwsz	      ss	      lstent    
      lstpolwp  lstentpo  fuzzy     nulllist  ss1
      ptlst     nv	      supertriangle	      trianglelst
      i	      j	      k	      edgelst   circle
      pt	      flag      lstLWp1   objLW1    disoff
      lstent_tg H
     )
 (command "undo" "be")
 (vl-load-com)
 (setq cmdo (getvar "cmdecho"))
 (setvar "cmdecho" 0)
 (setq	doc    (vla-get-ActiveDocument
	 (vlax-get-acad-object)
       )
*Model* (vla-get-modelspace doc)
*layer*	(vla-get-Layers Doc)
addH   (vla-AddHatch
	 *Model*		       acHatchPatternTypePredefined
	 "AutoTri"	       T
	 AcHatchObject
	)
 )
 (OR (tblobjname "layer" "LA_THIEP")
   (vla-add *layer* "LA_THIEP")
 )
 (setq entlwp     (car (entsel "\nPick a object LWP:"))
       lstpolwp (ACET-LIST-REMOVE-DUPLICATES
         (ACET-GEOM-VERTEX-LIST entlwp)
         0
       )
       objlwp      (vlax-ename->vla-object entlwp)
       arr      (arrhat objlwp)
 )
 (setq vwsz (* (getvar "viewsize") 0.005))
 (vlax-invoke-method addH 'AppendOuterLoop arr)
 (setq	D (cond	(D)
	(5)
  )
 )
 (setq oldD D)
 (setq D (getreal (strcat "\nChon kich thuoc canh tam giac <"
		   (rtos oldD 2 0)
		   "> : "
	   )
  )
 )
 (if (null D)
   (setq D oldD)
 )
 (setq	goc (cond	(goc)
	(0)
  )
 )
 (setq oldgoc goc)
 (setq goc (getreal (strcat "\nChon goc quay canh tam giac (do) <"
		   (rtos oldgoc 2 2)
		   "> : "
	   )
  )
 )
 (if (null goc)
   (setq goc oldgoc)
 )
 (vla-put-PatternScale addH D)
 (vla-put-PatternAngle addH (/(* goc pi)180))
 (vla-update addH)
 (command ".explode" (entlast))
 (setq ss (ssget "P" '((0 . "LINE")))
lstent (acet-ss-to-list ss)
ptlst  (mapcar '(lambda (x) (DXF 10  x))
	       lstent
       )
 )
 (mapcar '(lambda (x) (setq lstentpo (cons (addpo x) lstentpo))) ptlst)
 (mapcar 'entdel lstent)

;;;=================================================

 (setq	fuzzy 1e-8
nulllist nil
 )
 (setq ptlst	  (append	lstpolwp
		(mapcar '(lambda (x) (DXF 10 x)) lstentpo)
	  )
       ptlst	  (vl-sort ptlst
		 '(lambda	(x y)
		    (< (car x) (car y))
		  )
	  )
       nv	  (length ptlst)
       supertriangle (findsupertriangle ptlst)
       ptlst	  (append ptlst supertriangle)
			;append coordinates to the end of vertex list
       trianglelst	  (list (list supertriangle nil))
			;add supertriangle to the triangle list
 )
 (setq i 0)
 (ACET-UI-PROGRESS "=> => XUNG PHONG => =>" nv)
 (while (< i nv)
   (setq pt (nth i ptlst))
;;; initialize edge buffer
   (setq edgelst nil)
   (setq j 0)
   (while (and	trianglelst
	(setq triangle (car (nth j trianglelst)))
   )
     (setq flag t)
     (if (not (cadr (nth j trianglelst)))
(progn
;;; calculate circumcircle
  (setq circle (getcircircumcircle triangle))
;;; test point x and (pt) location
  (if (< (+ (caar circle) (cadr circle)) (car pt))
    (setq trianglelst
	   (nth_subst j
		      (list (car (nth j trianglelst)) T)
		      trianglelst
	   )
    )
  )
  (if (isinside pt circle)
    (setq edgelst     (addtriangleedges triangle edgelst)
	  trianglelst (ACET-LIST-REMOVE-NTH j trianglelst);(nth_del j trianglelst)
	  flag	      nil
    )
  )
)
     )
     (if flag
(setq j (1+ j))
     )
   )
;;; remove all doubly specified edges
   (setq edgelst (removedoublyedges edgelst fuzzy nulllist))
;;; form new triangles for current point
   (setq trianglelst (addnewtriangles pt edgelst trianglelst))
;;; get next vertex
   (setq i (1+ i))
   (ACET-UI-PROGRESS -1)
 )
 (ACET-UI-PROGRESS)
 (setq trianglelst (mapcar 'car trianglelst)
       disoff (flagoff lstpolwp))
 (setq objLW1 (car	(vlax-safearray->list
	  (vlax-variant-value (vla-offset objlwp disoff))
	)
     )
 )
 (ACET-UI-PROGRESS "TAN CONG !!!" (length trianglelst))
 (foreach triangle trianglelst
   (drawtriangle triangle)
   (ACET-UI-PROGRESS -1)
 )
 (ACET-UI-PROGRESS)
;;; remove triangles with supertriangles edges

 (setq lstLWp1  (ACET-GEOM-VERTEX-LIST (vlax-vla-object->ename objLW1))
       lstendel (acet-ss-to-list
         (ssget "F"
	      lstLWp1
	      '((0 . "LWPOLYLINE") (8 . "LA_THIEP"))
         )
       )
 )
 (mapcar 'entdel lstendel)
 (mapcar 'entdel lstentpo)
 (vla-Delete objLW1)
 (setq lstent_tg (acet-ss-to-list
	(ssget "CP"
	       lstpolwp
	       '((0 . "LWPOLYLINE") (8 . "LA_THIEP"))
	)
        )
       ptlst     (mapcar 'cent lstent_tg)
       ptlst     (vl-sort ptlst
	       '(lambda (x y)
		(> (caDr x) (caDr y))
	        )
        )
       i	        1
       H	        (* D 0.1)
 )
 (foreach po ptlst
   (Text *Model* (itoa i) po H)
   (setq i (1+ i))
 )
 (setq Summ (vla-get-SummaryInfo doc))
 (vla-put-Comments summ "Thank you for use luoitamgiac.lsp!")
 (vla-put-Author summ "By TranThiep 0918841230")
 (vla-put-HyperlinkBase summ "http://www.cadviet.com")
 (command "undo" "en")
 (vla-regen doc acAllViewports)
 (princ)
)

Xin cảm ơn Daniele Piazza, ADN member Mechanical Solution s.r.l.

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
anh.tuan    35

Các bác có thể viết giúp mìn lisp vát hai đường thẳng giao nhau theo những khoảng D1, D2 mà mình chọn, lisp này giống như lệnh chamfer của cad. Các đường thẳng ở đây là line, polyline. Cám ơn các bác nhiều.

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
ssg    1.088
Chân thành cảm ơn bác ssq đã quan tâm đến mong muốn của em.

Thực ra, mong muốn của em không đến mức sâu xa như bác đã đề cập đâu. Ở đây, điều em quan tâm là khả năng thống kê (ví dụ như số lượng, vật liệu, kích thước phôi, ...) của các bản vẽ mà thôi chứ không cần phải liên kết bền chặt mọi yếu tố. Nếu bác đã xem qua một ví dụ của em, bác sẽ thấy có phần bảng thống kê ở phía trên khung tên và ở file thống kê chung PARTLIST. Em muốn hỏi liệu chúng ta có thể tạo sự liên kết giữa chúng hay không? Em giả sử trong file BV01 (Bản vẽ lắp) số lượng các chi tiết không phải như trong hình vẽ đó nữa mà có thể tăng hoặc giảm, thì làm cách nào đó, số lượng trong bản PARTLIST cũng sẽ thay đổi theo. Hoặc như, vật liệu chế tạo, kích thước phôi trong các bản vẽ chi tiết BV02, BV03 có sự thay đổi thì bằng cách nào đó, sự thống kê trong bản vẽ lắp và bản thống kê chung cũng sẽ cập nhật được những thông tin này.

Mong muốn của em là như vậy, mong các bác nghiên cứu giúp em xem liệu AutoCAD, với sự giúp đỡ của autolisp hay VBA có thể giải quyết được điều em mong muốn hay không?

Rất cảm ơn các bác trong diễn đàn đã quan tâm.

Chúc các bác luôn mạnh khoẻ và vui vẻ!

Nếu bạn bố trí các bản vẽ trong cùng 1 file *.dwg thì xem các bài ở đây:

http://www.cadviet.com/forum/index.php?showtopic=1515

và:

http://www.cadviet.com/forum/index.php?sho...=13131&st=0

Còn ở các file khác nhau thì ssg bó tay!

  • 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
Tuynh    1
Cảm ơn Tuệ, Thiep bận rộn cả ngày hôm qua, Tuệ đã tiếp tay rất nhanh cho Tuynh.

Thiep chỉ gợi ý Tue rằng có 1 hàm trong thư viện Express tools tạo POLYLINE rất nhanh, đó là: acet-pline-make.

Còn lisp trên, Tuynh hãy đợi Tue_NV sẽ thêm vòng lặp để chọn đối tượng đến khi enter thì thôi

Ngày trước mình có yêu cầu lisp chuyển đường 2d polyline thành đường 3d polyline và được bác Tuệ và bác Thiệp giúp đỡ có một lisp.

(defun c:2d3d(/ curve pre i p lstdiem z lstpoint x ss oldos)

(vl-load-com)

(setvar "orthomode" 0)

(setvar "cmdecho" 0)

(setq oldos (getvar "osmode"))

(setvar "osmode" 0)

(setq curve (car(entsel "\n Pick chon POlyline 2D hoac Polyline 3D :")))

(setq pre (vlax-curve-getEndParam curve) i 0 lstdiem '() lstpoint '() ss (ssadd))

(setq cao (getdist "\n Chon chieu cao chu :"))

 

(while (<= i pre)

(setq p (vlax-curve-getPointAtParam curve i))

(setq lstdiem (append lstdiem (list p)))

(wtxt (rtos (caddr p) 2 2) p 0 cao)

(setq ss (ssadd (entlast) ss))

(setq i (1+ i))

)

 

(setq i 0)

(foreach x lstdiem

(setq z (getdist x (strcat "\n Nhap cao do cho diem nay <" (rtos (caddr x) 2 2) "> : ") ))

(setq lstpoint (append lstpoint (list(list (car x) (cadr x) z))))

(wtxt (rtos z 2 2) (list (car x) (cadr x) z) 0 cao)

(entdel (ssname ss i))

(setq i (1+ i))

)

 

(command "3dpoly")

(foreach y lstpoint (command y))

(command "")

(entdel curve)

(setvar "osmode" oldos)

(princ)

)

;

(defun wtxt (txt p ang h / sty)

(setq sty (getvar "textstyle"))

(entmake (list (cons 0 "TEXT") (cons 7 sty)

(cons 1 txt) (cons 10 p) (cons 11 p)

(cons 72 2) (cons 73 1) (cons 50 ang)

(cons 40 h) (cons 41 0.8))

)

)

các bác có thể chỉnh sửa lisp trên để khi chỉnh sửa text thì cao độ ở đường 3d polyline cũng thay đổi theo.

cảm ơn các bác trước nhé!

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
thonghoang1    9

cảm ơn bạn thiếp đã giúp mình,mình chưa dùng được vì may mình không cài được acad 2008,máy yếu quá mà.mình chỉ có 2007 thôi.hix

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
Tuynh    1

Bác Tuệ đang online ạ, bác giúp em sửa lại lisp chuyển đường 2d poly thành đường 3d poly là khi chỉnh giá trị của text thì cao độ đường 3d poly cũng thay đổi theo đó.

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
Tue_NV    3.841
Ngày trước mình có yêu cầu lisp chuyển đường 2d polyline thành đường 3d polyline và được bác Tuệ và bác Thiệp giúp đỡ có một lisp.

(defun c:2d3d(/ curve pre i p lstdiem z lstpoint x ss oldos)(vl-load-com)(setvar "orthomode" 0)(setvar "cmdecho" 0)(setq oldos (getvar "osmode"))(setvar "osmode" 0)(setq curve (car(entsel "\n Pick chon POlyline 2D hoac Polyline 3D :")))(setq pre (vlax-curve-getEndParam curve) i 0 lstdiem '() lstpoint '() ss (ssadd))(setq cao (getdist "\n Chon chieu cao chu :"))(while ( : ") ))(setq lstpoint (append lstpoint (list(list (car x) (cadr x) z))))(wtxt (rtos z 2 2) (list (car x) (cadr x) z) 0 cao)(entdel (ssname ss i))(setq i (1+ i)))(command "3dpoly")(foreach y lstpoint (command y))(command "")(entdel curve)(setvar "osmode" oldos)(princ));(defun wtxt (txt p ang h / sty)(setq sty (getvar "textstyle"))(entmake (list (cons 0 "TEXT") (cons 7 sty) (cons 1 txt) (cons 10 p) (cons 11 p) (cons 72 2) (cons 73 1) (cons 50 ang) (cons 40 h) (cons 41 0.8))))

các bác có thể chỉnh sửa lisp trên để khi chỉnh sửa text thì cao độ ở đường 3d polyline cũng thay đổi theo.

cảm ơn các bác trước nhé!

Code mà Tue_NV viết cho Tuynh khi xưa đẹp là thế. Cớ sao bây chừ lại "nông lỗi" như thế lày? :undecided:

 

Có 2 Lisp lận chứ không phải có 1 Lisp đâu Tuyn. Tue_NV đã giúp cho Tuynh 2 code Lisp. 1 Lisp ghi cao độ . Và sửa cao độ Text và cả 2 Lisp này áp dụng được cho cả POLYLINE và 3DPOLY. Tuyn kiểm tra lại

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
nvngoc1986    3

Các bác ơi cho em hỏi có Lisp nào làm được thế này ko : Em cần quét một dãy các số ( theo trục X , hoặc Y ) , sau đó xuất ra file text ( em toàn phải gõ từng số sang bên Excel ) mà thứ tự vẫn theo hảng cột như trên bản vẽ !

Cảm ơn các bác .

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
Tuynh    1
Code mà Tue_NV viết cho Tuynh khi xưa đẹp là thế. Cớ sao bây chừ lại "nông lỗi" như thế lày? :undecided:

 

Có 2 Lisp lận chứ không phải có 1 Lisp đâu Tuynh. Tue_NV đã giúp cho Tuynh 2 code Lisp. 1 Lisp ghi cao độ . Và sửa cao độ Text và cả 2 Lisp này áp dụng được cho cả POLYLINE và 3DPOLY. Tuynh kiểm tra lại

Thành thật xin lỗi bác Tue_NV

Chả hiểu sao khi em copy, paste Code lại nhảy ra kiểu thế, do vội quá em không để ý bác đừng bùn nhé.

Em đã tìm thấy lisp thứ hai rùi ạ.

Chúc Tue_NV sức khỏe nhé.

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
quangtvxd    1
Không có ai quan tâm giúp đỡ em việc này sao? Giúp em với các bác hảo tâm ơi

mình nghĩ bạn có thể insert block theo dạng file rồi phá block đó đi, là cũng nhanh rồi đó.

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×