Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Giao diện hộp thoại trong AutoLisp

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

Tất nhiên, chỉ dùng *.sld, thậm chí không cần, dùng ngay bản vẽ *.dwg cũng được. Tuy nhiên, *.slb có những cái hay hơn:

1) Đúng như bạn nhận định, *.slb là một package của các *.sld. Khi cấp cho người dùng chương trình của bạn không phải kéo theo dài lê thê một "đoàn quân" mấy chục, có khi hàng trăm cái *.sld, mà chỉ cần 1 file *.slb duy nhất (Autodesk cũng làm như vậy mà). Khi đã "chơi" món này, ai cũng thấy khoái chí và không bao giờ chịu làm một vài cái *.sld

2) Dùng *.slb bạn mới có thể làm được cái gọi là Image_Tile_Menu. Món này cũng hay lắm đó. Bạn vào: Menu - Draw - Surfaces - 3D Surfaces sẽ thấy.

3) Chẳng hiểu bạn thao tác thế nào mà không tạo được *.slb? Có 2 động tác để tạo *.slb từ các *.sld:

- Tạo file *.txt, là một list chứa các tên file *.sld. (động tác này làm thủ công cũng được, chẳng cần lệnh liếc gì)

- Tạo *.slb từ *.txt trên

Xin hỏi thêm: bạn đang dùng phiên bản Cad nào? Sau khi chạy function (C:SLB...) mình gởi ở trên, bạn có nhận được *.txt không? Nếu có, thử chạy lại (C:SLB...) lần nữa xem. Nếu vẫn không được, đọc kỹ lại Help của bản Cad bạn đang dùng, chắc chắn phải tạo được! Không lẽ Autodesk lừa bạn à?

 

Bạn dùng thử chương trình sau, đúng yêu cầu mà bạn đã nêu. Từ từ "ngâm cứu" code của nó sẽ hiểu ra mọi vấn đề:

http://www.cadviet.com/upfiles/Geo.zip

 

Unzip và đọc readme.txt

 

-Công nhận là tạo được *.slb thì hay hơn nhưng tôi cũng bị vướng (hồi giờ không tạo được file này). Nên tôi chấp nhận có nguyên 1 đội quân hàng ngàn file *.sld như vậy.

-Dùng *.sld vẫn có thể tạo được các hộpthoại có hình ảnh mà. thậm chí tôi còn làm nguyên con lisp về thu viện bằng cách dùng *.sld, khingười dùng chỉnh sửa hoặc thêm vào có vẻ cũng tiện hơn.

-Nói chung nếu tạo được thì hìn nó pro hơn một tí còn không cũng không sao bạn không cần bận tậm đến 1 điểm nhỏ này mà ảnh hưởng đến cả công việc lớn của 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
Mình đang dùng cad08 . Mình vẫn tạo được file *.slb nhưng mà nó lại không chứa thông tin gì hết . Mình dùng lisp của bác ssg và dùng command shell của cad nhưng vẫn ko được , chỉ tạo ra file rỗng , có gì lưu ý về nơi đặt file *.sld không ?

 

Mình chuyển qua làm theo đoạn help này

In the Command Prompt window, at the prompt, enter CD to change folders.

As an example: CD “c:\symbol”

 

At the prompt, enter the following syntax to create the slide library:

slidelib mark

 

Mình không hiểu tại sao trong command promt nó lại báo ko hiểu lệnh slidelib .

 

Cám ơn bạn đã nhiệt tình giúp đỡ .

1) Mình đã lưu ý ở bài trên, toàn bộ *.sld, *.txt đều đặt ở thư mục gốc của Acad. Nó tạo ra *.slb cũng ở đó luôn. Khi có rồi muốn move đi đâu thì tuỳ.

2) Nếu không dùng lisp thì dùng lệnh shell, đừng chơi Command Prompt của Windows nữa. Cái này không ổn đâu.

3) Như bạn duy782006 nói, nếu thấy "khó chơi" quá thì thôi, chấp nhận dùng *.sld. Tuy nhiên, không xét đến chuyện pro hay amateur, nếu chỉ tạo Image hay Image_Button cho dialog thì cái nào cũng đuợc. Nhưng để làm được Image_Tile_Menu thì chỉ có một cách duy nhất là dùng *.slb.

Bạn có vất vả với đám code lằng nhằng điều khiển dialog mới thấy được giá trị của cái Image_Tile_Menu: chỉ cần vài dòng trong *.mns là bạn có ngay một dialog bao gồm cả 2 thành phần: 1 listbox chứa text và 1 list box chứa hình ảnh tương ứng, chẳng cần viết code cho *dcl lẫn *.lsp. Nhưng mà thôi, tuỳ quan điểm mỗi người. No problems! Chúc mọi người 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

Cảm ơn bạn ssg rất nhiều . Nhưng thật kỳ cục là kết quả nhận được của mình là file này đây , mọi cách từ hôm qua đến giờ vẫn là nó . Mình đã move hết *.txt và *.sld sang thư mục gốc của CAD08 và dùng lisp của bạn nhưng vẫn ko được , kết quả vẫn là mark.txt y như ban đầu còn file *.slb này nó lại nằm bên mục my documents .

http://www.cadviet.com/upfiles/mark.slb

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

Bạn có vất vả với đám code lằng nhằng điều khiển dialog mới thấy được giá trị của cái Image_Tile_Menu: chỉ cần vài dòng trong *.mns là bạn có ngay một dialog bao gồm cả 2 thành phần: 1 listbox chứa text và 1 list box chứa hình ảnh tương ứng, chẳng cần viết code cho *dcl lẫn *.lsp. Nhưng mà thôi, tuỳ quan điểm mỗi người. No problems! Chúc mọi người vui vẻ!

 

Theo quan điểm của mình thì mỗi cái có 1 thế mạnh riêng, khồng thể xét trên cùng một thứ nguyên được, tức là không thể đổi 1 m = bao nhiêu kg được ???

Đánh giá như bạn hơi chủ quan thì phải, Chỉ là ý kiến của mình thôi nhế <_<

Nếu dùng *.mns làm được hết thì sinh ra dialog để làm gì.???

 

Đồng ý với ý kiến "duy782006"

"Nói chung nếu tạo được thì hìn nó pro hơn một tí còn không cũng không sao bạn không cần bận tậm đến 1 điểm nhỏ này mà ảnh hưởng đến cả công việc lớn của bạn."

Quan trọng là bên trong nó chứa những gì?, Và có bao nhiêu người sử dụng nó cho công việ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
3) Như bạn duy782006 nói, nếu thấy "khó chơi" quá thì thôi, chấp nhận dùng *.sld. Tuy nhiên, không xét đến chuyện pro hay amateur, nếu chỉ tạo Image hay Image_Button cho dialog thì cái nào cũng đuợc. Nhưng để làm được Image_Tile_Menu thì chỉ có một cách duy nhất là dùng *.slb.

Kỳ thật, mình vẫn tạo image-Tile-menu bằng *.SLD:

 

Đây là menu

p1.jpg

 

Đây các file *.SLD

p2.jpg

 

Đây nội dung file *.MNU

p3.jpg

 

Bác SSG nhầm lẫn gì đây chăng? hay là đây kg phải là image-tile-menu?

  • Vote tăng 2

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
Theo quan điểm của mình thì mỗi cái có 1 thế mạnh riêng, khồng thể xét trên cùng một thứ nguyên được, tức là không thể đổi 1 m = bao nhiêu kg được ???

Đánh giá như bạn hơi chủ quan thì phải, Chỉ là ý kiến của mình thôi nhế <_<

Nếu dùng *.mns làm được hết thì sinh ra dialog để làm gì.???

OK, chưa bao giờ mình có ý so sánh 1m với 1kg. Nhưng trong trường hợp này, giữa Dialog (có chứa Image) và Image_Tile_Menu có cái để so với nhau được.

Còn mỗi cái có ưu thế riêng thì tất nhiên rồi. Autodesk bày ra đủ thứ món, tuỳ trường hợp, tuỳ ngữ cảnh, và tuỷ cả... khẩu vị của mỗi người, sẽ có một món...ngon miệng hơn so với các món khác!

 

@Nộ Thiên

Cám ơn bạn! Không phải mình nhầm mà là không biết. Lần đầu tiên mình thấy kiểu này!

Xin lỗi tất cả các bạn vì sự kết luận vội vàng. Mình sẽ nghiêm túc rút kinh nghiệ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
@Nộ Thiên

Cám ơn bạn! Không phải mình nhầm mà là không biết. Lần đầu tiên mình thấy kiểu này!

Xin lỗi tất cả các bạn vì sự kết luận vội vàng. Mình sẽ nghiêm túc rút kinh nghiệm.

Bác nôthiên tạo thư viện kiểu này rất hay đấy, nhưng mà em có rất nhiều file thư ivện (10000file) bác có cách nào mà làm thư viện kiểu này không.em thấy cácnh này nhanh!

Em có 1 cách nhưng mà nó hơi "điên" 1 chút, nếu bác có cách nào hay thì em sẽ bỏ cách của em. Chứ tạo 1 .MNU cho các file thư viện vậy thì "chết đấy"

(cách của em em nói sau)

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
Bác nôthiên tạo thư viện kiểu này rất hay đấy, nhưng mà em có rất nhiều file thư ivện (10000file) bác có cách nào mà làm thư viện kiểu này không.em thấy cácnh này nhanh!

Em có 1 cách nhưng mà nó hơi "điên" 1 chút, nếu bác có cách nào hay thì em sẽ bỏ cách của em. Chứ tạo 1 .MNU cho các file thư viện vậy thì "chết đấy"

(cách của em em nói sau)

Cái hình trên đó kg phải dùng như một thư viện đâu. Tất nhiên đối với thư viện dwg thì kg thể làm theo kiểu này đc. (từng file SLD)

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
Cái hình trên đó kg phải dùng như một thư viện đâu. Tất nhiên đối với thư viện dwg thì kg thể làm theo kiểu này đc. (từng file SLD)

Ý em hỏi là cách tạo 1 >MNU nhanh cơ, chứ: ban đầu thì tạo ra *.sld, *.slb. đã lâu rồi, lại tạo ra các MNU tổng hợp lại thì mệt phết?

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
Bác nôthiên tạo thư viện kiểu này rất hay đấy, nhưng mà em có rất nhiều file thư ivện (10000file) bác có cách nào mà làm thư viện kiểu này không.em thấy cácnh này nhanh!

Em có 1 cách nhưng mà nó hơi "điên" 1 chút, nếu bác có cách nào hay thì em sẽ bỏ cách của em. Chứ tạo 1 .MNU cho các file thư viện vậy thì "chết đấy"

(cách của em em nói sau)

Bạn bày cho mình cách hơi điên của bạ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
Bạn bày cho mình cách hơi điên của bạn đi.

KHÔNG PHẢI HƠI ĐÂU MÀ ĐIÊN HẲN ĐẤY, CÀNG NGHĨ CÀNG ĐIêN!

1--TẠO SLD QUÁ DỄ, AI CŨNG CÓ THỂ VIẾT 1 LISP BẬT FILE CAD LÊNH LÀ OK

2--TẠO SLB CŨNG KHONG CÓ VẤN ĐỀ GÌ

3--VẤN ĐỀ LÀ THỐNG KÊ NÓ LẠI, BẰNG 1 MENU (TẠO ĐUÔI MNU) VÀ CÁCH CỦA TÔI LÀ:

DÙNG PHẦM MÊN NGHE NHẠC WINAP 5.0, BẬT TẤT CẢ CÁC FILE CAD LÊN, đương nhiên là không đọc đợc, nhưng mà nó sẽ in ra đựoc 1 cái list tên file(dùng chức năng lọc của word lọc ra tên cần thiết.

4--dùng excel kéo 1 phát là xong

http://www.cadviet.com/upfiles/Book1.xls

  • 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
KHÔNG PHẢI HƠI ĐÂU MÀ ĐIÊN HẲN ĐẤY, CÀNG NGHĨ CÀNG ĐIêN!

1--TẠO SLD QUÁ DỄ, AI CŨNG CÓ THỂ VIẾT 1 LISP BẬT FILE CAD LÊNH LÀ OK

2--TẠO SLB CŨNG KHONG CÓ VẤN ĐỀ GÌ

3--VẤN ĐỀ LÀ THỐNG KÊ NÓ LẠI, BẰNG 1 MENU (TẠO ĐUÔI MNU) VÀ CÁCH CỦA TÔI LÀ:

DÙNG PHẦM MÊN NGHE NHẠC WINAP 5.0, BẬT TẤT CẢ CÁC FILE CAD LÊN, đương nhiên là không đọc đợc, nhưng mà nó sẽ in ra đựoc 1 cái list tên file(dùng chức năng lọc của word lọc ra tên cần thiết.

4--dùng excel kéo 1 phát là xong

http://www.cadviet.com/upfiles/Book1.xls

Nếu cần thiết hãy viết 1 lisp để tạo cái đoạn text nhàm chán trên trong file *.mnu

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
3--VẤN ĐỀ LÀ THỐNG KÊ NÓ LẠI, BẰNG 1 MENU (TẠO ĐUÔI MNU) VÀ CÁCH CỦA TÔI LÀ:

DÙNG PHẦM MÊN NGHE NHẠC WINAP 5.0, BẬT TẤT CẢ CÁC FILE CAD LÊN, đương nhiên là không đọc đợc, nhưng mà nó sẽ in ra đựoc 1 cái list tên file(dùng chức năng lọc của word lọc ra tên cần thiết.

4--dùng excel kéo 1 phát là xong

Sao lại phải "nhờ vả" Winap lẫn Excel? Bạn làm theo gợi ý của Nộ Thiên đi.

Bạn tham khảo đoạn sau:

(setq

MyDir (getstring "\nInput your drawing directory:" T)

MyList (vl-directory-files MyDir "*.dwg")

)

 

Kết quả nhận được MyList là 1 list chứa các tên file *.dwg trong thư mục MyDir. Đã là List Data Type rồi thì hẳn bạn biết phải làm gì với nó theo ý thích?

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
Cảm ơn bạn ssg rất nhiều . Nhưng thật kỳ cục là kết quả nhận được của mình là file này đây , mọi cách từ hôm qua đến giờ vẫn là nó . Mình đã move hết *.txt và *.sld sang thư mục gốc của CAD08 và dùng lisp của bạn nhưng vẫn ko được , kết quả vẫn là mark.txt y như ban đầu còn file *.slb này nó lại nằm bên mục my documents .

Có thể do bạn thiết lập Options của Cad hoặc của System. Cụ thể là cái nào thì chịu. Lâu nay mình vẫn dùng Lisp đã post cho bạn, không vấn đề gì. Mà thật ra là lâu lâu mới làm một lần nên không quan tâm mấy.

Bạn thử lại bằng cái này:

(defun C:SLB2(/ ffn dr tfn Lsld f x);;;Make *.slb file
(setq
ffn (getfiled "Save slb file as" "" "slb" 1)
dr (vl-filename-directory ffn)
tfn (strcat dr "\\mylist.txt")
Lsld (vl-directory-files dr "*.sld")
f (open tfn "w")
)
(foreach x Lsld (princ (strcat dr "\\" x "\n") f))
(close f)
(command "shell" (strcat "slidelib " ffn " < " tfn))
(alert (strcat "Finish make " ffn))
(vl-file-delete tfn)
)

 

1) Tạo các *.sld, đặt gom vào một thư mục nào đó tuỳ thích

2) Chạy SLB2. Chọn nơi lưu file *.slb tại thư mục chứa các *.sld nói trên

3) Nếu vẫn cứ không được nữa thì... ssg bó tay!

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
Cám ơn ssg nhiều .

Em có 1 thư viện của mấy bác nc ngoài viết, trong 1lúc e có thể cho khoảng 400 bản vẽ cad nằm trong cùng 1 thư mục vào thư viện đó! Nó sẽ tự tạo cho ta 400 file sld chỉ trong chục giây! tất cả sẽ đc lưu lại dưới 1 file đuôi là LBA, trong file đó sẽ ghi lại đường dẫn của các file mà ta vừa đem vào thư viện! Mỗi khi muốn tìm thể loại thư viện nào ta chỉ cần chọn file LBA đó! Hạn chế của chương trình là chỉ có 1 khung view, không có next, preview, hay tạo, chỉnh sửa, thêm bớt 1cái nào đó đơn 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
Em có 1 thư viện của mấy bác nc ngoài viết, trong 1lúc e có thể cho khoảng 400 bản vẽ cad nằm trong cùng 1 thư mục vào thư viện đó! Nó sẽ tự tạo cho ta 400 file sld chỉ trong chục giây! tất cả sẽ đc lưu lại dưới 1 file đuôi là LBA, trong file đó sẽ ghi lại đường dẫn của các file mà ta vừa đem vào thư viện! Mỗi khi muốn tìm thể loại thư viện nào ta chỉ cần chọn file LBA đó! Hạn chế của chương trình là chỉ có 1 khung view, không có next, preview, hay tạo, chỉnh sửa, thêm bớt 1cái nào đó đơn lẻ!

Mình nghĩ nên post lên để mọi ngưòi sửa những hạn chế mà mình nói chứ 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
Tất nhiên, chỉ dùng *.sld, thậm chí không cần, dùng ngay bản vẽ *.dwg cũng được. Tuy nhiên, *.slb có những cái hay hơn:

1) Đúng như bạn nhận định, *.slb là một package của các *.sld. Khi cấp cho người dùng chương trình của bạn không phải kéo theo dài lê thê một "đoàn quân" mấy chục, có khi hàng trăm cái *.sld, mà chỉ cần 1 file *.slb duy nhất (Autodesk cũng làm như vậy mà). Khi đã "chơi" món này, ai cũng thấy khoái chí và không bao giờ chịu làm một vài cái *.sld

2) Dùng *.slb bạn mới có thể làm được cái gọi là Image_Tile_Menu. Món này cũng hay lắm đó. Bạn vào: Menu - Draw - Surfaces - 3D Surfaces sẽ thấy.

3) Chẳng hiểu bạn thao tác thế nào mà không tạo được *.slb? Có 2 động tác để tạo *.slb từ các *.sld:

- Tạo file *.txt, là một list chứa các tên file *.sld. (động tác này làm thủ công cũng được, chẳng cần lệnh liếc gì)

- Tạo *.slb từ *.txt trên

Xin hỏi thêm: bạn đang dùng phiên bản Cad nào? Sau khi chạy function (C:SLB...) mình gởi ở trên, bạn có nhận được *.txt không? Nếu có, thử chạy lại (C:SLB...) lần nữa xem. Nếu vẫn không được, đọc kỹ lại Help của bản Cad bạn đang dùng, chắc chắn phải tạo được! Không lẽ Autodesk lừa bạn à?

 

Bạn dùng thử chương trình sau, đúng yêu cầu mà bạn đã nêu. Từ từ "ngâm cứu" code của nó sẽ hiểu ra mọi vấn đề:

http://www.cadviet.com/upfiles/Geo.zip

 

Unzip và đọc readme.txt

bạn ơi chương tình geo dùng như thế nào vây? dùng để làm gì mình tải về nhưng chẳng biết dùng vào đâu và dùng như thế nào nữa?

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
Ý em hỏi là cách tạo 1 >MNU nhanh cơ, chứ: ban đầu thì tạo ra *.sld, *.slb. đã lâu rồi, lại tạo ra các MNU tổng hợp lại thì mệt phết?

 

Hiện nay tôi đã viết xong lisp có thể hiển thị hộp thoại có 11 ảnh hiển thị được các ảnh *.sld trong 1 thư mục, bên dười là dòng text hiển thị tên của sld tương ứng với ảnh. Chọn ảnh và kích nút chèn thì chèn file*.dwg cùng tên nếu có.

Hiện nay mới ở dạng thô như vậy còn 1 số hạn chế: tôi dang hoàn thiện thêm. Cần mọi người giúp tôi vài vấn đề.

-Làm sao lấy đường dẩn của 1 thư mục (không phải file cái này tôi làm được) bằng cách hỏi chọn.

-Nếu giúp tôi được đoạn tạo sld hàng loạt cho tất cả *.dwg trong 1 thư mục thì càng tốt (không phải ai cũng có sẳn thư mục chứa sld rồi cả)

Nói chung cần hoàn thiện thêm nhiều nhưng cơ aan3 cái sườn nếu chỉ định thư mục cố định thì đã chạy được.

Mong mọi người cố gắng giúp.

 

*Nếu không có cách nào lấy đường dẩn 1 thư mục thì tôi nghỉ ra 1 hướng như thế này:

-Lấy tên 1 file trong thư mục đó có cả đường dẩn (cái này tôi làm được)

-Lấy tên file vừa rồi không có đường dẩn (thêm thông số gì đó có đọc mà giờ quên mất)

Tù đó tôi sẽ lấy được đường dẩn đến thư mục.

Cám ơn mọi ngườ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
Hiện nay tôi đã viết xong lisp có thể hiển thị hộp thoại có 11 ảnh hiển thị được các ảnh *.sld trong 1 thư mục, bên dười là dòng text hiển thị tên của sld tương ứng với ảnh. Chọn ảnh và kích nút chèn thì chèn file*.dwg cùng tên nếu có.

Hiện nay mới ở dạng thô như vậy còn 1 số hạn chế: tôi dang hoàn thiện thêm. Cần mọi người giúp tôi vài vấn đề.

-Làm sao lấy đường dẩn của 1 thư mục (không phải file cái này tôi làm được) bằng cách hỏi chọn.

-Nếu giúp tôi được đoạn tạo sld hàng loạt cho tất cả *.dwg trong 1 thư mục thì càng tốt (không phải ai cũng có sẳn thư mục chứa sld rồi cả)

Nói chung cần hoàn thiện thêm nhiều nhưng cơ aan3 cái sườn nếu chỉ định thư mục cố định thì đã chạy được.

Mong mọi người cố gắng giúp.

 

*Nếu không có cách nào lấy đường dẩn 1 thư mục thì tôi nghỉ ra 1 hướng như thế này:

-Lấy tên 1 file trong thư mục đó có cả đường dẩn (cái này tôi làm được)

-Lấy tên file vừa rồi không có đường dẩn (thêm thông số gì đó có đọc mà giờ quên mất)

Tù đó tôi sẽ lấy được đường dẩn đến thư mục.

Cám ơn mọi người!

Bạn thử lần lượt 3 biểu thức lisp ví dụ dưới đây. Có phải là cái bạn muốn không?

(setq fn (findfile "acad.exe"))

(setq d (vl-filename-directory fn))

(setq L (vl-directory-files d))

 

Kết quả:

- d là directory

- L là list chứa toàn bộ filename có trong d

 

Nếu chỉ quan tâm đến *.dwg, bạn dùng:

(setq L (vl-directory-file d "*.dwg")) -> 1 list chứa toàn bộ filename của *.dwg có trong d. Với kết quả này, mình nghĩ là bạn tự làm được hàng loạt *.sld có trong thư mụ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
Bạn thử lần lượt 3 biểu thức lisp ví dụ dưới đây. Có phải là cái bạn muốn không?

(setq fn (findfile "acad.exe"))

(setq d (vl-filename-directory fn))

(setq L (vl-directory-files d))

 

Kết quả:

- d là directory

- L là list chứa toàn bộ filename có trong d

 

Nếu chỉ quan tâm đến *.dwg, bạn dùng:

(setq L (vl-directory-file d "*.dwg")) -> 1 list chứa toàn bộ filename của *.dwg có trong d. Với kết quả này, mình nghĩ là bạn tự làm được hàng loạt *.sld có trong thư mục?

Để tạo 1 file*.txt chứa danh sách các *.dwg trong 1 thư mục thì mình làm được rồi nhưng không biết làm sao cho nó gọi lần lượt các file này lên và tạo ảnh *.sld 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
Để tạo 1 file*.txt chứa danh sách các *.dwg trong 1 thư mục thì mình làm được rồi nhưng không biết làm sao cho nó gọi lần lượt các file này lên và tạo ảnh *.sld cả.

Mình có thể giúp bạn đó ! Hiện tại mình có 1 lisp có thể tạo ra 1lúc gần 400 file sld từ 400 file dwg trong cùng thư mục và lưu tên cùng đường dẫn của các file sld và dwg đó trong 1 file lba! Khi nào muốn lấy thư viện thì chỉ cần gọi file lba đó lên ! Bạn có thể tham khảo cole của chương trình ! Nếu bạn muốn mình sẽ post lên ! Hiên tại mình ko ở nhà nên ko post lên đ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
Để tạo 1 file*.txt chứa danh sách các *.dwg trong 1 thư mục thì mình làm được rồi nhưng không biết làm sao cho nó gọi lần lượt các file này lên và tạo ảnh *.sld cả.

Chương trình tạo hàng loạt file *.sld:

 

(defun C:MK( / fn d L i dwg f fnb fsld)
(setq
   fn (getfiled "Select a Drawing File in Library" "" "dwg" 0)
   d (vl-filename-directory fn)
   L (vl-directory-files d "*.dwg")
   i 0
)
(foreach dwg L
   (setq
       f (strcat d "\\" dwg)
       fnb (vl-filename-base dwg)
       fsld (strcat d "\\" fnb)
   )
   (if (not (findfile (strcat fsld ".sld")))
       (progn
           (command "insert" f (list 0 0 0) 1 1 0)
           (command "zoom" "e")
           (command "mslide" fsld)
           (command "erase" (entlast) "")
           (setq i (1+ i))
       )
   )
)
(alert (strcat (itoa i) " slide files created")))
(princ)
)

 

Hoạt động:

1) Lệnh MK, chọn 1 file *.dwg bất kỳ trong thư mục

2) Chương trình duyệt toàn bộ *.dwg trong thư mục đó. Cái nào chưa có *.sld thì tự tạo, đặt cùng tên và thư mục với *.dwg. Báo cáo kết quả tổng số file *.sld đã tạo được.

3) Bạn muốn lập danh sách các file *.sld thì tự bổ sung thêm vào chương trình. OK?

  • 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
Chương trình tạo hàng loạt file *.sld:

 

(defun C:MK( / fn d L i dwg f fnb fsld)
(setq
   fn (getfiled "Select a Drawing File in Library" "" "dwg" 0)
   d (vl-filename-directory fn)
   L (vl-directory-files d "*.dwg")
   i 0
)
(foreach dwg L
   (setq
       f (strcat d "\\" dwg)
       fnb (vl-filename-base dwg)
       fsld (strcat d "\\" fnb)
   )
   (if (not (findfile (strcat fsld ".sld")))
       (progn
           (command "insert" f (list 0 0 0) 1 1 0)
           (command "zoom" "e")
           (command "mslide" fsld)
           (command "erase" (entlast) "")
           (setq i (1+ i))
       )
   )
)
(alert (strcat (itoa i) " slide files created")))
(princ)
)

 

Hoạt động:

1) Lệnh MK, chọn 1 file *.dwg bất kỳ trong thư mục

2) Chương trình duyệt toàn bộ *.dwg trong thư mục đó. Cái nào chưa có *.sld thì tự tạo, đặt cùng tên và thư mục với *.dwg. Báo cáo kết quả tổng số file *.sld đã tạo được.

3) Bạn muốn lập danh sách các file *.sld thì tự bổ sung thêm vào chương trình. OK?

 

Cám ơn. Sao mình lại không nghĩ ra cách này nhỉ. Do cứ chăm chú tìm cách open lên chứ không nghỉ inert ra rồi lại xóa. Đúng là nhiều khi lú lẩn thật.

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
Kiểu này chuối lắm dùng file *.chm hoặc *.hlp hay hơn nhiều

code đây không biết có đúng ý bạn không?

Thuty.dcl:

(defun read-txt (filename / open_f line_r list-out file_read)
(setq list-out nil)
(if (/= (findfile filename) nil)
 (progn  
 (setq file_read (open filename "r"))
 (while
 (/= nil
 (setq line_r (read-line file_read))
  )
 (setq list-out (append list-out (list line_r)))
  )
 (close file_read)
)
(princ)  
)
list-out
)
;;;;;;;;;;;;;;;
;==== Load and check dialog ===========
; dia_name : string
(defun loadcl ( dia_name)
 (if (= -1 (setq dcl_id (load_dialog (strcat dia_name ".dcl"))))
(progn
  (alert (strcat dia_name ".dcl" "not found")
  (setq dialogloaded nil)
)		 
);p
(setq dialogloaded 1)
);f
);defun
;;;;;;;;;;;=========================
(defun c:show (/ fname  l1  dcl_id dialogloaded)
 (setq fname (getfiled "chon file"  "c:\\"  "*" 16)); lựa chọn file
;(setq fname "c:\\abc\\abc.txt"); hoặc chỉ định file
 (if (and
(/= fname nil)
(> (loadcl "thuty") 0); load and check dialog 
  ) 
  (if (not (new_dialog "thuty" dcl_id))
 (exit); Error
 (progn;else
		(start_list "doctxt")	 
		(mapcar' add_list (read-txt fname))  
		(end_list)
		(start_dialog)						 
		(done_dialog)
	(unload_dialog dcl_id)
);p

  );if1 
  );if
 (princ)
);defun

Have fun

Anh có thể tạo giúp e trong list đó có các cột được không ! Ví dụ như là trong bảng layer thì có các cột là linetype, lineweight...e muốn trong bảng list box đó của e có các cột ma nội dung các cột chỉ là các text thô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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×