Chuyển đến nội dung
Diễn đàn CADViet
Học AutoCAD Online cùng CADViet
TrNghia.Do

[HELP] NHỜ SỬA LISP CHÈN BLOCK THEO FILE DCL

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

Chào anh em

Mình tìm được trên mạng file Lisp của Lee Mac tạo 3 List box liên kết với nhau.

Mình có dựa vào và chỉnh sửa lại chút như file Lisp đính kèm sau đây :Tapper Block Sets TBS.lsp

Mình muốn nhờ anh em sửa giúp mình để chèn các block tương ứng với các tên ở list box cuối cùng, đồng thời lưu lại lần chọn cuối cùng để lần sau chọn nó hiện đúng vị trí cuối đấy.

111.JPG.622c62999a9d1ef52551f823dd9b3575.JPG

 

vd: Chọn TBS35  ,  TBS35-30 , TBS35-30-5 , chọn OK thì sẽ chèn block theo chương trình tbs35305 ở phía trên

Thanks anh em!

  • 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

-Xem cái list thứ 3 đang được chọn ở vị trí thứ mấy, đọc ra nội dung dòng được chọn.

-Dùng 1 hàm duy nhất để insert file có tên được đọc bên trên làm đối số chứ không nên viết ngàn rưởi hàm chèn ngàn rưởi file như thế.

  • Like 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

He he... Vẫn biết là như thế nhưng mà mình chỉ biết sơ sơ về lisp nên chỉ viết đc như thế thôi. Vậy nên mới viết lên nhờ mọi người giúp đỡ chứ.

Bạn có cách hay mà giải quyết đc hết ý tưởng của mình thì nhờ bạn giúp với :D

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

-Viết cái tổng quát cho bạn đây. Chính là file chends.lsp còn 2 file còn lại là các hàm con mà file chính dùng trong đó có nhiều hàm thừa vì là trong bộ tổng của mình. Nếu bạn dùng lisp thấy ưng thì mình tỉa lại hai file kèm theo cho gọn cho bạn.

-Nhớ apload cả 3 file. Lệnh CDS.

+Bảng sẽ có 3 cột chọn cột thứ nhất 2 cột kia sẽ chạy theo, chọn cột thứ 2 thì cột thứ 3 chạy theo, chọn cột thứ 3 sẽ viết ra nội dung đọc được của hàng được chọn cột này có ghép thêm c://. Cái này bạn sửa chút là ra insert file có tên đọc được.

texth.lsp

hopthoaih.lsp

chends.lsp

  • Like 1
  • 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
23 giờ trước, duy782006 đã nói:

-Viết cái tổng quát cho bạn đây. Chính là file chends.lsp còn 2 file còn lại là các hàm con mà file chính dùng trong đó có nhiều hàm thừa vì là trong bộ tổng của mình. Nếu bạn dùng lisp thấy ưng thì mình tỉa lại hai file kèm theo cho gọn cho bạn.

-Nhớ apload cả 3 file. Lệnh CDS.

+Bảng sẽ có 3 cột chọn cột thứ nhất 2 cột kia sẽ chạy theo, chọn cột thứ 2 thì cột thứ 3 chạy theo, chọn cột thứ 3 sẽ viết ra nội dung đọc được của hàng được chọn cột này có ghép thêm c://. Cái này bạn sửa chút là ra insert file có tên đọc được.

texth.lsp

hopthoaih.lsp

chends.lsp

 

Cám ơn bạn đã viết cho mình, phải nói là file lisp hoạt động rất giống với ý mình, chỉ có hai cái mình chưa hiểu lắm:

- Thứ nhất nếu mình muốn cái bảng và chữ trong bảng to ra thì có thể sửa đc ko và sửa như thế nào được.

- Thứ hai là các dòng này :

(defun c:thcap2 ()
(setq dscap3d (nth (atoi vitricap2) dscap2))
(setq filechen (strcat "c://" dscap3d ".dwg"))
(princ filechen)
)

Theo mình hiểu thì đây sẽ là dòng cần sửa để insert block mình cần ra , và mình sửa như này liệu có đúng ko, mong bạn xem giúp:

(defun c:thcap2 ()
(setq dscap3d (nth (atoi vitricap2) dscap2))
(command "insert" (strcat "E:/Nghia_AutoLisp 2012/DCL/Tapper block sets TBS/" dscap3d ".dwg") pause "" "" "")
(command "_.Explode" "l")
)

 

 

 

  • 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
25 phút trước, Danh Cong đã nói:

@@, đúng là bậy thật bác ạ. Cáo lỗi chủ thớt, xui dại quá ^^.

He he, trước em cũng tưởng vậy đó. Cơ mà chỉnh nó chỉ to cái khung lên thôi, chứ vẫn bé tý ah :))

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

-Chiều cao chử: Mình không có cách chỉnh cho to lên.

-Khung hiển thị bảng danh sách:

(duy:vht_textbangttm "danh sach 1" "20" "15" "dstong" "vitritong" "thtong")

Trong đó "20" là chiều rộng bảng hiển thị. "15" là chiều dài bảng hiển thị đơn vị tính "hình như" là chiều cao text.

-Cái dòng sửa để chèn đại loại là thế bạn thủ là biết được hay không thôi. một xẹt hay hai xẹt, thuận hay nghịch thì cứ sửa qua sử lại lúc nào được thì thôi. (lưu ý đường dẫn có khả năng không chịu khoảng trắng)

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 giờ trước, duy782006 đã nói:

-Chiều cao chử: Mình không có cách chỉnh cho to lên.

-Khung hiển thị bảng danh sách:

(duy:vht_textbangttm "danh sach 1" "20" "15" "dstong" "vitritong" "thtong")

Trong đó "20" là chiều rộng bảng hiển thị. "15" là chiều dài bảng hiển thị đơn vị tính "hình như" là chiều cao text.

-Cái dòng sửa để chèn đại loại là thế bạn thủ là biết được hay không thôi. một xẹt hay hai xẹt, thuận hay nghịch thì cứ sửa qua sử lại lúc nào được thì thôi. (lưu ý đường dẫn có khả năng không chịu khoảng trắng)

Ok bạn, mình đã làm đc rồi, nhờ bạn sửa giúp mình lọc bớt các lệnh ko cần thiết ở 2 file của bạn cho gọn nhé.

Thanks bạ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

Khi sử dụng lệnh mình thấy nó tạo ra khoảng 5 file ở ổ D, có cách nào chuyển mấy file đấy sang thư mục temp ở ổ C ko hả bạn, với cả khi chọn giữa các dòng, cái bảng cứ nháy liên tục, có cách nào chấm dứt điều đó ko? 

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

-1 được nhưng ko ảnh hưởng đến minh => kệ.

-2 mổi lần nhấn của mình là tắt hộp thoại rồi gọi lại nên sẽ chớp 1 phát. Ko sửa đượ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

Mình tham gia 1 cái (Lệnh CTV): https://drive.google.com/file/d/1OLDXESIltkiMzU4_HyCHhZryTo2hB7vI/view?usp=sharing
Yêu cầu cấu trúc thư mục để chạy được LISP:
*** X:\THUMUCGOC\THUMUCCON_CAP1\THUMUCCON_CAP2\Tenfile.dwg
Trong đó:
1. X: là tên ổ đĩa
2. THUMUCGOC: tên thư mục nằm trên ổ đĩa X.
3. THUMUCCON_CAP1: là 1 trong các thư mục con nằm trong thư mục gốc X:\THUMUCGOC\...
4. THUMUCCON_CAP2: là 1 trong các thư mục con nằm trong thư mục con cấp 1 X:\THUMUCGOC\THUMUCCON_CAP1\...
5. Tất cả các file Tenfile.dwg nằm trong thư mục con cấp 2 (THUMUCCON_CAP2).
Ví dụ:
- Tạo 1 thư mục gốc trên ổ đĩa D: D:\THUVIEN
- Trong thư mục THUVIEN đã tạo ở trên, tạo các thư mục con: LOAI1, LOAI2, LOAI3...
- Trong các thư mục con: LOAI1, LOAI2, LOAI3... (Mỗi thư mục này phải tạo ít nhất 1 thư mục, số lượng không hạn chế): KIEU-A, KIEU-B, KIEU-C...
(Đây chính là thư mục con cấp 2 - Tạm gọi)
- Các thư mục con cấp 2 này là nơi chứa các file .Dwg.
*** NOTE:
a. Tên thư mục và tên file Dwg, không dùng tiếng Việt có dấu.
b. Số lượng các thư mục con (C1, C2) và file Dwg không hạn chế (Trong quá trình sử dụng có thể thêm bớt tùy ý).
c. Lần đầu chạy Lisp, dùng nút Browse để chọn đến thư mục gốc (không chọn sâu vào trong): D:\THUVIEN
d. Chỉ cần chọn thư mục gốc 1 lần, sử dụng đến khi muốn thay đổi hoặc cài lại CAD.
Đây là mẫu để test (Tải về và giải nén lên ổ đĩa nào đó - Nhớ kiểm tra lại cấu trúc sau khi giải nén).


P/s: Lisp sẽ ghi nhớ được các vị trí trên Dialog.

THUVIEN.rar

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
22 giờ trước, quocmanh04tt đã nói:

Mình tham gia 1 cái (Lệnh CTV): https://drive.google.com/file/d/1OLDXESIltkiMzU4_HyCHhZryTo2hB7vI/view?usp=sharing
Yêu cầu cấu trúc thư mục để chạy được LISP:
*** X:\THUMUCGOC\THUMUCCON_CAP1\THUMUCCON_CAP2\Tenfile.dwg
Trong đó:
1. X: là tên ổ đĩa
2. THUMUCGOC: tên thư mục nằm trên ổ đĩa X.
3. THUMUCCON_CAP1: là 1 trong các thư mục con nằm trong thư mục gốc X:\THUMUCGOC\...
4. THUMUCCON_CAP2: là 1 trong các thư mục con nằm trong thư mục con cấp 1 X:\THUMUCGOC\THUMUCCON_CAP1\...
5. Tất cả các file Tenfile.dwg nằm trong thư mục con cấp 2 (THUMUCCON_CAP2).
Ví dụ:
- Tạo 1 thư mục gốc trên ổ đĩa D: D:\THUVIEN
- Trong thư mục THUVIEN đã tạo ở trên, tạo các thư mục con: LOAI1, LOAI2, LOAI3...
- Trong các thư mục con: LOAI1, LOAI2, LOAI3... (Mỗi thư mục này phải tạo ít nhất 1 thư mục, số lượng không hạn chế): KIEU-A, KIEU-B, KIEU-C...
(Đây chính là thư mục con cấp 2 - Tạm gọi)
- Các thư mục con cấp 2 này là nơi chứa các file .Dwg.
*** NOTE:
a. Tên thư mục và tên file Dwg, không dùng tiếng Việt có dấu.
b. Số lượng các thư mục con (C1, C2) và file Dwg không hạn chế (Trong quá trình sử dụng có thể thêm bớt tùy ý).
c. Lần đầu chạy Lisp, dùng nút Browse để chọn đến thư mục gốc (không chọn sâu vào trong): D:\THUVIEN
d. Chỉ cần chọn thư mục gốc 1 lần, sử dụng đến khi muốn thay đổi hoặc cài lại CAD.
Đây là mẫu để test (Tải về và giải nén lên ổ đĩa nào đó - Nhớ kiểm tra lại cấu trúc sau khi giải nén).


P/s: Lisp sẽ ghi nhớ được các vị trí trên Dialog.

THUVIEN.rar

Lisp của bạn Duy hay và đáp ứng đc yêu cầu của mình nhưng cần nhiều file quá, cấu trúc tạo hộp thoại cũng rất dài mình đọc chả hiểu gì cả, nó khác với cách tạo bảng mà mình đọc quá. Có cách viết nào sử dụng file lisp ban đầu mình gửi mà đáp ứng đc những cái mình mong muốn ko hả bạn.

File lisp đây : Tapper Block Sets TBS.lsp

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
4 giờ trước, TrNghia.Do đã nói:

Lisp của bạn Duy hay và đáp ứng đc yêu cầu của mình nhưng cần nhiều file quá, cấu trúc tạo hộp thoại cũng rất dài mình đọc chả hiểu gì cả, nó khác với cách tạo bảng mà mình đọc quá. Có cách viết nào sử dụng file lisp ban đầu mình gửi mà đáp ứng đc những cái mình mong muốn ko hả bạn.

Của bạn chỉ cần sửa chút xíu là được:

;;;Three List Tile Dependency Example  -  Lee Mac
;;;Requires ListTileDependency.lsp to be loaded.
(defun c:vd5  (/ *error* dch dcl des lst dwg_name lst_name)
  (defun *error*  (msg)
    (if (= 'file (type des))
      (close des))
    (if (< 0 dch)
      (unload_dialog dch))
    (if (and (= 'str (type dcl)) (findfile dcl))
      (vl-file-delete dcl))
    (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
      (princ (strcat "\nError: " msg)))
    (princ))
  (setq lst '(("TBS35"
               ("TBS35-30" ("TBS35-30-1" "TBS35-30-3" "TBS35-30-5"))
               ("TBS35-35" ("TBS35-35-1" "TBS35-35-3" "TBS35-35-5"))
               ("TBS35-40" ("TBS35-40-1" "TBS35-40-3" "TBS35-40-5")))
              ("TBS45"
               ("TBS45-40" ("TBS45-40-1" "TBS35-40-3" "TBS35-40-5"))
               ("TBS45-50" ("TBS45-50-1" "TBS35-50-3" "TBS35-50-5"))
               ("TBS45-75" ("TBS45-75-1" "TBS35-75-3" "TBS35-75-5")))))
  (if (and (setq dcl (vl-filename-mktemp "tmp.dcl"))
           (setq des (open dcl "w"))
           (foreach str  '("lbx : list_box" "{" "    alignment = centered;"
                           "    fixed_width = true;" "    fixed_height = true;" "    width = 25;"
                           "    height = 10;" "}" "test : dialog" "{"
                           "    label = \"TAPPER BLOCK SETS - TBS\";" "    spacer;"
                           "    : boxed_row" "    {" "        : lbx { key = \"lb0\";}"
                           "        : lbx { key = \"lb1\";}" "        : lbx { key = \"lb2\";}"
                           "    }" "    spacer;" "    ok_cancel;" "}")
             (write-line str des))
           (not (setq des (close des)))
           (< 0 (setq dch (load_dialog dcl)))
           (new_dialog "test" dch))
    (progn (or ##rtn## (setq ##rtn## '(0 0 0)))
           (LM:dcld:action '("lb0" "lb1" "lb2") 'lst '##rtn##)
           (if (= 1 (start_dialog))
             (progn (setq lst_name (LM:dcld:getitems ##rtn## lst)
                          dwg_name (last lst_name))
                    (insert_blk dwg_name))
             (princ "\n*Cancel*"))))
  (*error* nil)
  (princ))
;;; HAM INSERT ***
(defun insert_blk  (name / path)
  (setq path "E:/Nghia_AutoLisp 2012/DCL/Tapper block sets TBS/")
  (if (not (tblsearch "BLOCK" name))
    (setq name (strcat path name ".dwg")))
  (command "_.insert" name pause "" "" ""))
;;;*******************************************
;; DCL List-Tile Dependency  -  Lee Mac
;; Configures action_tile statements for the list of keys to enabled dependency between the DCL tiles.
;; key     - [lst] List of DCL tile keys in order of dependency
;; lst-sym - [sym] Quoted variable containing list data
;; rtn-sym - [sym] Quoted variable containing initial selection indexes
(defun LM:dcld:action  (key lst-sym rtn-sym)
  (defun LM:dcld:addlist  (key lst)
    (start_list key)
    (foreach itm lst (add_list itm))
    (end_list))
  (defun LM:dcld:getlists  (idx lst)
    (if (cdr idx)
      (cons (mapcar 'car lst) (LM:dcld:getlists (cdr idx) (cdr (nth (car idx) lst))))
      lst))
  (defun LM:substnth  (itm idx lst)
    (if lst
      (if (zerop idx)
        (cons itm (cdr lst))
        (cons (car lst) (LM:substnth itm (1- idx) (cdr lst))))))
  (defun LM:dcld:actions  (key lst-sym rtn-sym lvl / fun)
    (setq fun
           (if (cdr key)
             (list 'lambda
                   '(val lst / tmp)
                   (list 'setq
                         rtn-sym
                         (list 'LM:substnth '(atoi val) lvl rtn-sym)
                         'tmp
                         (list 'LM:dcld:getlists rtn-sym 'lst))
                   (list 'LM:dcld:addlist (cadr key) (list 'nth (1+ lvl) 'tmp))
                   (list 'if
                         (list '<=
                               (list 'length (list 'nth (1+ lvl) 'tmp))
                               (list 'nth (1+ lvl) rtn-sym))
                         (list 'setq rtn-sym (list 'LM:substnth 0 (1+ lvl) rtn-sym)))
                   (list (LM:dcld:actions (cdr key) lst-sym rtn-sym (1+ lvl))
                         (list 'set_tile (cadr key) (list 'itoa (list 'nth (1+ lvl) rtn-sym)))
                         'lst))
             (list 'lambda
                   '(val lst)
                   (list 'setq rtn-sym (list 'LM:substnth '(atoi val) lvl rtn-sym)))))
    (action_tile (car key) (vl-prin1-to-string (list fun '$value lst-sym)))
    fun)
  (mapcar 'LM:dcld:addlist key (LM:dcld:getlists (eval rtn-sym) (eval lst-sym)))
  ((eval (LM:dcld:actions key lst-sym rtn-sym 0)) (set_tile (car key) (itoa (car (eval rtn-sym))))
                                                  (eval lst-sym))
  (princ))
;; DCL List-Tile Dependency  -  Get Items  -  Lee Mac
;; Returns a list of the items selected from each dependent list tile.
;; idx - [lst] List of selection indexes
;; lst - [lst] List data
(defun LM:dcld:getitems  (idx lst / tmp)
  (if (cdr idx)
    (cons (car (setq tmp (nth (car idx) lst)))
          (LM:dcld:getitems (cdr idx) (cdr tmp)))
    (list (nth (car idx) (car lst)))))

 

  • 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
2 giờ trước, quocmanh04tt đã nói:

Của bạn chỉ cần sửa chút xíu là được:


;;;Three List Tile Dependency Example  -  Lee Mac
;;Requires ListTileDependency.lsp to be loaded.
(defun c:vd5  (/ *error* dch dcl des lst dwg_name lst_name)
  (defun *error*  (msg)
    (if (= 'file (type des))
      (close des))
    (if (< 0 dch)
      (unload_dialog dch))
    (if (and (= 'str (type dcl)) (findfile dcl))
      (vl-file-delete dcl))
    (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
      (princ (strcat "\nError: " msg)))
    (princ))
  (setq lst '(("TBS35"
               ("TBS35-30" ("TBS35-30-1" "TBS35-30-3" "TBS35-30-5"))
               ("TBS35-35" ("TBS35-35-1" "TBS35-35-3" "TBS35-35-5"))
               ("TBS35-40" ("TBS35-40-1" "TBS35-40-3" "TBS35-40-5")))
              ("TBS45"
               ("TBS45-40" ("TBS45-40-1" "TBS35-40-3" "TBS35-40-5"))
               ("TBS45-50" ("TBS45-50-1" "TBS35-50-3" "TBS35-50-5"))
               ("TBS45-75" ("TBS45-75-1" "TBS35-75-3" "TBS35-75-5")))))
  (if (and (setq dcl (vl-filename-mktemp "tmp.dcl"))
           (setq des (open dcl "w"))
           (foreach str  '("lbx : list_box" "{" "    alignment = centered;"
                           "    fixed_width = true;" "    fixed_height = true;" "    width = 25;"
                           "    height = 10;" "}" "test : dialog" "{"
                           "    label = \"TAPPER BLOCK SETS - TBS\";" "    spacer;"
                           "    : boxed_row" "    {" "        : lbx { key = \"lb0\";}"
                           "        : lbx { key = \"lb1\";}" "        : lbx { key = \"lb2\";}"
                           "    }" "    spacer;" "    ok_cancel;" "}")
             (write-line str des))
           (not (setq des (close des)))
           (< 0 (setq dch (load_dialog dcl)))
           (new_dialog "test" dch))
    (progn (or ##rtn## (setq ##rtn## '(0 0 0)))
           (LM:dcld:action '("lb0" "lb1" "lb2") 'lst '##rtn##)
           (if (= 1 (start_dialog))
             (progn (setq lst_name (LM:dcld:getitems ##rtn## lst)
                          dwg_name (last lst_name))
                    (insert_blk dwg_name))
             (princ "\n*Cancel*"))))
  (*error* nil)
  (princ))
;;; HAM INSERT ***
(defun insert_blk  (name / path)
  (setq path "E:/Nghia_AutoLisp 2012/DCL/Tapper block sets TBS/")
  (if (not (tblsearch "BLOCK" name))
    (setq name (strcat path name ".dwg")))
  (command "_.insert" name pause "" "" ""))
;;;*******************************************
; DCL List-Tile Dependency  -  Lee Mac
; Configures action_tile statements for the list of keys to enabled dependency between the DCL tiles.
; key     - [lst] List of DCL tile keys in order of dependency
; lst-sym - [sym] Quoted variable containing list data
; rtn-sym - [sym] Quoted variable containing initial selection indexes
(defun LM:dcld:action  (key lst-sym rtn-sym)
  (defun LM:dcld:addlist  (key lst)
    (start_list key)
    (foreach itm lst (add_list itm))
    (end_list))
  (defun LM:dcld:getlists  (idx lst)
    (if (cdr idx)
      (cons (mapcar 'car lst) (LM:dcld:getlists (cdr idx) (cdr (nth (car idx) lst))))
      lst))
  (defun LM:substnth  (itm idx lst)
    (if lst
      (if (zerop idx)
        (cons itm (cdr lst))
        (cons (car lst) (LM:substnth itm (1- idx) (cdr lst))))))
  (defun LM:dcld:actions  (key lst-sym rtn-sym lvl / fun)
    (setq fun
           (if (cdr key)
             (list 'lambda
                   '(val lst / tmp)
                   (list 'setq
                         rtn-sym
                         (list 'LM:substnth '(atoi val) lvl rtn-sym)
                         'tmp
                         (list 'LM:dcld:getlists rtn-sym 'lst))
                   (list 'LM:dcld:addlist (cadr key) (list 'nth (1+ lvl) 'tmp))
                   (list 'if
                         (list '<=
                               (list 'length (list 'nth (1+ lvl) 'tmp))
                               (list 'nth (1+ lvl) rtn-sym))
                         (list 'setq rtn-sym (list 'LM:substnth 0 (1+ lvl) rtn-sym)))
                   (list (LM:dcld:actions (cdr key) lst-sym rtn-sym (1+ lvl))
                         (list 'set_tile (cadr key) (list 'itoa (list 'nth (1+ lvl) rtn-sym)))
                         'lst))
             (list 'lambda
                   '(val lst)
                   (list 'setq rtn-sym (list 'LM:substnth '(atoi val) lvl rtn-sym)))))
    (action_tile (car key) (vl-prin1-to-string (list fun '$value lst-sym)))
    fun)
  (mapcar 'LM:dcld:addlist key (LM:dcld:getlists (eval rtn-sym) (eval lst-sym)))
  ((eval (LM:dcld:actions key lst-sym rtn-sym 0)) (set_tile (car key) (itoa (car (eval rtn-sym))))
                                                  (eval lst-sym))
  (princ))
;; DCL List-Tile Dependency  -  Get Items  -  Lee Mac
; Returns a list of the items selected from each dependent list tile.
; idx - [lst] List of selection indexes
; lst - [lst] List data
(defun LM:dcld:getitems  (idx lst / tmp)
  (if (cdr idx)
    (cons (car (setq tmp (nth (car idx) lst)))
          (LM:dcld:getitems (cdr idx) (cdr tmp)))
    (list (nth (car idx) (car lst)))))

 

 

Lisp hoạt động rất tuyệt, cám ơn bạ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
2 giờ trước, quocmanh04tt đã nói:

Của bạn chỉ cần sửa chút xíu là được:


;;;Three List Tile Dependency Example  -  Lee Mac
;;Requires ListTileDependency.lsp to be loaded.
(defun c:vd5  (/ *error* dch dcl des lst dwg_name lst_name)
  (defun *error*  (msg)
    (if (= 'file (type des))
      (close des))
    (if (< 0 dch)
      (unload_dialog dch))
    (if (and (= 'str (type dcl)) (findfile dcl))
      (vl-file-delete dcl))
    (if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
      (princ (strcat "\nError: " msg)))
    (princ))
  (setq lst '(("TBS35"
               ("TBS35-30" ("TBS35-30-1" "TBS35-30-3" "TBS35-30-5"))
               ("TBS35-35" ("TBS35-35-1" "TBS35-35-3" "TBS35-35-5"))
               ("TBS35-40" ("TBS35-40-1" "TBS35-40-3" "TBS35-40-5")))
              ("TBS45"
               ("TBS45-40" ("TBS45-40-1" "TBS35-40-3" "TBS35-40-5"))
               ("TBS45-50" ("TBS45-50-1" "TBS35-50-3" "TBS35-50-5"))
               ("TBS45-75" ("TBS45-75-1" "TBS35-75-3" "TBS35-75-5")))))
  (if (and (setq dcl (vl-filename-mktemp "tmp.dcl"))
           (setq des (open dcl "w"))
           (foreach str  '("lbx : list_box" "{" "    alignment = centered;"
                           "    fixed_width = true;" "    fixed_height = true;" "    width = 25;"
                           "    height = 10;" "}" "test : dialog" "{"
                           "    label = \"TAPPER BLOCK SETS - TBS\";" "    spacer;"
                           "    : boxed_row" "    {" "        : lbx { key = \"lb0\";}"
                           "        : lbx { key = \"lb1\";}" "        : lbx { key = \"lb2\";}"
                           "    }" "    spacer;" "    ok_cancel;" "}")
             (write-line str des))
           (not (setq des (close des)))
           (< 0 (setq dch (load_dialog dcl)))
           (new_dialog "test" dch))
    (progn (or ##rtn## (setq ##rtn## '(0 0 0)))
           (LM:dcld:action '("lb0" "lb1" "lb2") 'lst '##rtn##)
           (if (= 1 (start_dialog))
             (progn (setq lst_name (LM:dcld:getitems ##rtn## lst)
                          dwg_name (last lst_name))
                    (insert_blk dwg_name))
             (princ "\n*Cancel*"))))
  (*error* nil)
  (princ))
;;; HAM INSERT ***
(defun insert_blk  (name / path)
  (setq path "E:/Nghia_AutoLisp 2012/DCL/Tapper block sets TBS/")
  (if (not (tblsearch "BLOCK" name))
    (setq name (strcat path name ".dwg")))
  (command "_.insert" name pause "" "" ""))
;;;*******************************************
; DCL List-Tile Dependency  -  Lee Mac
; Configures action_tile statements for the list of keys to enabled dependency between the DCL tiles.
; key     - [lst] List of DCL tile keys in order of dependency
; lst-sym - [sym] Quoted variable containing list data
; rtn-sym - [sym] Quoted variable containing initial selection indexes
(defun LM:dcld:action  (key lst-sym rtn-sym)
  (defun LM:dcld:addlist  (key lst)
    (start_list key)
    (foreach itm lst (add_list itm))
    (end_list))
  (defun LM:dcld:getlists  (idx lst)
    (if (cdr idx)
      (cons (mapcar 'car lst) (LM:dcld:getlists (cdr idx) (cdr (nth (car idx) lst))))
      lst))
  (defun LM:substnth  (itm idx lst)
    (if lst
      (if (zerop idx)
        (cons itm (cdr lst))
        (cons (car lst) (LM:substnth itm (1- idx) (cdr lst))))))
  (defun LM:dcld:actions  (key lst-sym rtn-sym lvl / fun)
    (setq fun
           (if (cdr key)
             (list 'lambda
                   '(val lst / tmp)
                   (list 'setq
                         rtn-sym
                         (list 'LM:substnth '(atoi val) lvl rtn-sym)
                         'tmp
                         (list 'LM:dcld:getlists rtn-sym 'lst))
                   (list 'LM:dcld:addlist (cadr key) (list 'nth (1+ lvl) 'tmp))
                   (list 'if
                         (list '<=
                               (list 'length (list 'nth (1+ lvl) 'tmp))
                               (list 'nth (1+ lvl) rtn-sym))
                         (list 'setq rtn-sym (list 'LM:substnth 0 (1+ lvl) rtn-sym)))
                   (list (LM:dcld:actions (cdr key) lst-sym rtn-sym (1+ lvl))
                         (list 'set_tile (cadr key) (list 'itoa (list 'nth (1+ lvl) rtn-sym)))
                         'lst))
             (list 'lambda
                   '(val lst)
                   (list 'setq rtn-sym (list 'LM:substnth '(atoi val) lvl rtn-sym)))))
    (action_tile (car key) (vl-prin1-to-string (list fun '$value lst-sym)))
    fun)
  (mapcar 'LM:dcld:addlist key (LM:dcld:getlists (eval rtn-sym) (eval lst-sym)))
  ((eval (LM:dcld:actions key lst-sym rtn-sym 0)) (set_tile (car key) (itoa (car (eval rtn-sym))))
                                                  (eval lst-sym))
  (princ))
;; DCL List-Tile Dependency  -  Get Items  -  Lee Mac
; Returns a list of the items selected from each dependent list tile.
; idx - [lst] List of selection indexes
; lst - [lst] List data
(defun LM:dcld:getitems  (idx lst / tmp)
  (if (cdr idx)
    (cons (car (setq tmp (nth (car idx) lst)))
          (LM:dcld:getitems (cdr idx) (cdr tmp)))
    (list (nth (car idx) (car lst)))))

 

 

Khi thực hiện hàm insert thì cad mất một lúc mới load được file block mặc dù block rất nhẹ.
Mình có xem thì lệnh có báo như sau :

Auditing Mechanical Data...
Number of errors found: 0    Number of errors fixed: 0
Auditing Mechanical Data complete.
Duplicate definition of layer state "_LAYISO_STATE" ignored.

Có cách nào khắc phục được tình trạng này ko hả bạn ?

Với lại như mình đã hỏi, có cách nào làm to chữ trong dialog ra đc ko ?

 

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
1 giờ} trướ}c, TrNghia.Do đã nói:

 

Khi thực hiện hàm insert thì cad mất một lúc mới load được file block mặc dù block rất nhẹ.
Mình có xem thì lệnh có báo như sau :

Auditing Mechanical Data...
Number of errors found: 0    Number of errors fixed: 0
Auditing Mechanical Data complete.
Duplicate definition of layer state "_LAYISO_STATE" ignored.

Có cách nào khắc phục được tình trạng này ko hả bạn ?

Với lại như mình đã hỏi, có cách nào làm to chữ trong dialog ra đc ko ?

 

1. Kiểm tra lại file gốc (Audit, Recover, Purge...)

2. Kích thước chữ trên Dialog phụ thuộc vào Windows (nếu sửa trên Windows thì các hộp thoại khác cũng thay đổi), Muốn cho chữ đậm lên thì dùng:

 fixed_width_font = true;

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
1 giờ} trướ}c, TrNghia.Do đã nói:

Mình đã làm tất cả rồi nhưng vẫn bị như thế cậu ạ 

Nếu không có gì bí mật, thì gửi file đó lên đây xem nào! Vấn đề nằm ở file cad chứ không phải Lisp nhé!

  • 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
10 phút trước, duy782006 đã nói:

Cái hình dùng file sld hay đọc dữ liệu từ block vậy bạn?

 

Cùng vấn đề quan tâm với bác Duy. Hy vọng Mr Mạnh chia sẻ!

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
46 phút trước, duy782006 đã nói:

Cái hình dùng file sld hay đọc dữ liệu từ block vậy bạn?

 

 

35 phút trước, dinhvantrang đã nói:

 

Cùng vấn đề quan tâm với bác Duy. Hy vọng Mr Mạnh chia sẻ!

Hình là đọc dữ liệu block và chuyển thành vector. 

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 tức thời hay đọc lưu sẳn trong file lisp. Nếu đọc tức thời có thể chia sẽ đọan này được ko!

  • Like 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
26 phút trước, duy782006 đã nói:

Đọc tức thời hay đọc lưu sẳn trong file lisp. Nếu đọc tức thời có thể chia sẽ đọan này được ko!

Đọc tức thời chứ! Vì theo hướng đi đã nói ở trên, là tạo thư mục chứa thư viện, các file dwg là do người dùng tự chép vào thư viện thì làm sao mà lưu sẵ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 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

×