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

quocmanh04tt

Thành viên
  • Số lượng nội dung

    784
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    92

Cộng đồng

387 (khá)

About quocmanh04tt

  • Cấp bậc
    biết lệnh adcenter

Thông tin hồ sơ

  • Giới tính
    Male

Khách truy cập Tiểu sử gần đây

6.858 chế độ xem tiểu sử
  1. [Yêu cầu] - Lisp tự động tạo thư viện mẫu Hatch

    Các cao thủ trở thành "CU THẢO" hết cả rồi...! Hãy tìm kiếm với từ khóa GETPAT.lsp, người ta viết từ năm 2001. Còn chế biến ntn cho phù hợp thì tùy cá nhân. ;| GETPAT.LSP (c) 2001 Tee Square Graphics Version 1.01b - 1/22/2002 This routine may be used to extract hatch pattern data from existing drawings when the .pat file containing the original information is not available. After loading the file in the usual manner, type the command GETPAT at the AutoCAD Command: prompt, select any (non-SOLID) hatch object, and the pattern information will be written to a .pat file having the same name as the pattern (e.g., pattern information for the hatch pattern WOODS will be written to WOODS.PAT. Ver. 1.01b includes two small fixex to eliminate "Bad Argument" LISP errors when run with certain installations of AutoCAD 2000+. |; (defun C:GETPAT (/ cmde hat elst rotn hnam temp xofs yofs what temp outf flin angl tmp1 tmp2 xvec yvec) (setq cmde (getvar "cmdecho")) (setvar "cmdecho" 0) (while (not (setq hat (entsel "\nSelect hatch: ")))) (setq elst (entget (car hat))) (if (= (cdr (assoc 0 elst)) "HATCH") (progn (setq rotn (* 180 (/ (cdr (assoc 52 elst)) pi)) hnam (cdr (assoc 2 elst)) hscl (cdr (assoc 41 elst)) ) ;; The following nine lines may optionally be omitted. ;; Their purpose is to create a temporary "clone" of the ;; selected hatch with a 0 deg. rotation angle, in case ;; the hatch object specified a rotation angle. If these ;; lines are omitted, the current rotation of the selected ;; hatch will become the "0" deg. rotation for the extracted ;; pattern definition. (if (not (zerop rotn)) (progn (setq temp elst) (entmake temp) (command "_.rotate" (entlast) "" (cdr (assoc 10 temp))(- rotn)) (setq elst (entget (entlast))) (entdel (entlast)) ) ) ;; End of optional code. (setq xofs (cdr (assoc 43 elst)) yofs (cdr (assoc 44 elst)) elst (member (assoc 53 elst) elst) ) (setq outf (strcat hnam ".pat")) (if (findfile outf) (progn (initget "Overwrite Append") (setq what (getkword (strcat "\n" outf " already exists; Overwrite/Append? "))) ) ) (setq outf (open outf (if (= what "Append") "a" "w")) flin (strcat "*" hnam) ) (foreach x elst (cond ((= (car x) 53) (write-line flin outf) (setq angl (cdr x) flin (trim (angtos angl 0 7)) ) ) ((= (car x) 43) (setq flin (strcat flin ", " (trim (rtos (/ (- (cdr x) xofs) hscl) 2 7)))) ) ((= (car x) 44) (setq flin (strcat flin "," (trim (rtos (/ (- (cdr x) yofs) hscl) 2 7)))) ) ((= (car x) 45) (setq tmp1 (cdr x)) ) ((= (car x) 46) (setq tmp2 (cdr x) xvec (/ (+ (* tmp1 (cos angl))(* tmp2 (sin angl))) hscl) yvec (/ (- (* tmp2 (cos angl))(* tmp1 (sin angl))) hscl) flin (strcat flin ", " (trim (rtos xvec 2 7)) "," (trim (rtos yvec 2 7))) ) ) ((= (car x) 49) (setq flin (strcat flin ", " (trim (rtos (/ (cdr x) hscl) 2 7)))) ) ((= (car x) 98) (write-line flin outf) ) (T nil) ) ) (write-line "" outf) (close outf) (alert (strcat hnam " pattern definition written to " hnam ".PAT")) ) (alert "Selected object not a HATCH.") ) (setvar "cmdecho" cmde) (princ) ) (defun trim (x / n) (setq n (strlen x)) (while (= (substr x n 1) "0") (setq n (1- n) x (substr x 1 n) ) ) (if (= (substr x n 1) ".") (setq x (substr x 1 (1- n))) ) x ) (alert (strcat "GETPAT.LSP (c) 2003 Tee Square Graphics\n" " Type GETPAT to start" ) ) (princ)
  2. [Help] Nhờ Tạo Liên Kết Chèn Block Theo List Box Dcl Update

    - Cái sự hiểu của bạn không đúng với ý đồ trong lisp của mình. - Lisp của mình sau khi chọn thư mục gốc (tất nhiên cấu trúc thư mục theo như mình đã nói ở trên - Sẽ tạm mô tả ở dưới), lisp sẽ lưu lại cho đến khi chọn lại thư mục gốc khác, hoặc cài lại cad. Đường dẫn đến file dwg thì lisp tự xác định, người dùng chỉ cần pick chọn vào phần tử trong list Model (theo DCl đã dùng ở trên). Khi pick chọn được phần tử, chỉ cần pick OK là xong. Tạm mô tả thế này để dễ hiểu hơn: 1. Coi thư mục gốc là Giám Đốc. 2. Coi các thư mục con (LOAI1, LOAI2, LOAI3...) là các Phó Giám Đốc (ở đây số lượng PGĐ không hạn chế). 3. Dưới các PGĐ là các trưởng phòng (TP, éo có Phó phòng nhé! hehe... KIEUA, KIEUB, KIEUC...), như vậy mỗi PGĐ quản lý nhiều trưởng phòng (vì có nhiều phòng, và số lượng phòng không hạn chế). Các TP thuộc các PGĐ khác nhau là đồng cấp. 4. Dưới các TP là các nhân viên (đây chính là các file dwg) - Số lượng không hạn chế. Khi vận hành Công ty (éo biết lương thưởng thế nào, hehehe...) - Tức là chạy lisp, nếu chỉ mặt nhân viên nào (dwg file) thì hệ thống biết được đối tượng đó do trưởng phòng nào quản lý, dưới quyền của PGĐ nào... Đây chính là đường dẫn... P/s: Các nhân viên trùng tên là chuyện khác nhé...!
  3. [Help] Nhờ Tạo Liên Kết Chèn Block Theo List Box Dcl Update

    - Làm gì có chuyện tạo nhiều thư mục ứng với 1 lệnh. Tạo thư mục là để phân loại các file dwg, nó vừa nhằm để dễ quản lý (Tất nhiên là đáp ứng bộ thư viện lớn, nhiều chủng loại, nhiều kiểu...). Ví dụ khi bạn cần mở file gốc để chỉnh sửa, hoặc copy, di dời... Thì biết trước nó là cái gì... - Nếu thư viện của bạn ít file, ít lựa chọn thì chỉ cần cái phía trên là đủ rồi.
  4. [Help] Nhờ Tạo Liên Kết Chèn Block Theo List Box Dcl Update

    Bạn thử lisp này nhé! https://drive.google.com/file/d/0B2LetfHDljPGRDVYby1wcnc3bEU/view?usp=sharing Yêu cầu: - Trên 1 ổ đĩa nào đó tạo 1 thư mục gốc (ví dụ: "D:\THUVIEN" Chẳng hạn) - Trong thư mục gốc THUVIEN ở trên tạo các thư mục con, ví dụ: LOAI-1, LOAI-2, LOAI-3... - Trong các thu mục con LOAI-1, LOAI-2, LOAI-3... ở trên tạo các thư mục KIEU-A, KIEU-B, KIEU-C... Chép các file dwg thư viện vào các thư mục KIEU-x ở trên (phân loại theo kiểu của bạn) P/s: - Lisp chỉ tạo TEXT, với nội dung là đường dẫn của file từ kết quả điều khiển DCL, nếu chèn block thì chỉ cần 1 hàm con là Ok, không cần phải lập 1 file dwg là 1 hàm như của bạn. - Nút Browse dùng để chọn thư mục gốc, không đi đến thư mục con.
  5. [Help] Nhờ Tạo Liên Kết Chèn Block Theo List Box Dcl Update

    Theo như nhu cầu của bạn thì cái thư viện to dần ra (đồng nghĩa với nhiều file dwg...). Theo mình nên tổ chức lại cách thức, cũng như thuật toán chương trình, chứ để như vậy thì nảy ra các vấn đề như sau: 1- Cái biến data sẽ rườm rà và phải chỉnh sửa sau mỗi lần thêm file dwg. 2- Các hàm con để chèn Block, cứ mỗi lần thêm file lại phải bổ sung lisp và số hàm con này nhiều bằng số lượng file dwg=> lisp sẽ đồ sộ và khó quản lý khi cần chỉnh sửa. ... Nếu để nghiên cứu học lisp thì không sao, nhưng để ứng dụng công việc thì tại sao không dùng lệnh ADCENTER (Ctrl+2) có sẵn của Cad, nó có nhiều chức năng tiện lợi hơn ngoài nhu cầu của bạn.
  6. [Help] Nhờ Tạo Liên Kết Chèn Block Theo List Box Dcl Update

    Bạn nên tập đọc nội dung của lisp, so sánh lisp cũ của bạn và lisp mới này. Lisp này mình sửa mục đích là lưu giá trị cũ cho việc dùng lần sau như yêu cầu của bạn. Vì bạn biết chút ít về lisp nên mình làm theo hướng, hướng dẫn... mặt khác để khi test khỏi mất công tạo các block mình đã cho lisp tạo các text... Bạn so sánh 2 lisp và sửa lại cho đúng nhu cầu.
  7. [Help] Nhờ Tạo Liên Kết Chèn Block Theo List Box Dcl Update

    Lisp đây: (defun c:vd2 (/ *error* UpdateList data dclfile dclhandle p i) (setq dclFile "vd1.dcl") (defun *error* (msg) (if dclHandle (unload_dialog dclHandle)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ)) (defun UpdateList (key lst) (start_list key) (mapcar 'add_list lst) (end_list)) (setq Data (list (cons "Cooling Plugs 1" (list "CP1" "CP2" "CP3" "CP4" "CP5" "CP6" "CP7" "CP8")) (cons "Cooling Plugs 2" (list "RP1" "RP2" "RP3" "RP4" "RP5")) (cons "Cooling Plugs 3" (list "QP1" "QP2" "QP3" "QP4" "QP5" "QP6" "QP7")))) (or *lst-data* (repeat (setq i (length data)) (setq *lst-data* (cons (cons (itoa (setq i (1- i))) "0") *lst-data*)))) (cond ((<= (setq dclHandle (load_dialog dclFile)) 0) (princ "\n--> DCL File not Found.")) ((not (new_dialog "listboxexample" dclHandle)) (setq dclHandle (unload_dialog dclHandle)) (princ "\n--> Dialog Definition not Found.")) (t (or *Make* (setq *Make* "0")) (or *Model* (setq *Model* "0")) (UpdateList "lst1" (mapcar 'car Data)) (UpdateList "lst2" (cdr (nth (atoi *Make*) Data))) (set_tile "lst1" *Make*) (set_tile "lst2" *Model*) (action_tile "lst1" (strcat "(UpdateList \"lst2\" (cdr (nth (atoi (setq *Make* $value)) Data)))" "(set_tile \"lst2\" (cdr (assoc *Make* *lst-data*))) ")) (action_tile "lst2" "(setq *lst-data* (subst (cons *Make* $value) (assoc *Make* *lst-data*) *lst-data*))") (action_tile "accept" "(setq *Make* (get_tile \"lst1\") *Model* (get_tile \"lst2\"))") (start_dialog) (setq dclHandle (unload_dialog dclHandle)) (setq *lst-data* (subst (cons *Make* *Model*) (assoc *Make* *lst-data*) *lst-data*)) (while (setq p (getpoint "\nSpecify point: ")) (entmake (list '(0 . "TEXT") (cons 10 p) '(40 . 250) (cons 1 (nth (atoi *Model*) (cdr (assoc (nth (atoi *Make*) (mapcar 'car Data)) Data))))))))) (princ))
  8. [Help] Nhờ Tạo Liên Kết Chèn Block Theo List Box Dcl Update

    Không phải khoai lúa gì ở đây, mà là do trình bày chưa rõ ràng... Vội trả lời như mình dễ bị sai... Có phải thế này không??? (vẫn dcl cũ nhé! lệnh vd2): vd2.rar
  9. Lisp In Nhiều Bản Vẽ (Kể Cả Layout)

    Thông báo: Bản QPL V1.1 trở về trước, ngừng cấp Key, chuẩn bị cho bản V1.2. (Bản này dùng cho USB Device) Sơ bộ: 1.Vào Command prompt của Windows. 2. Paste vào dòng này: wmic diskdrive get name,size,model,SerialNumber để lấy thông tin USB. Mẫu: Hoặc dùng lisp này để lấy thông tin USB: https://drive.google.com/file/d/0B2LetfHDljPGX1dqNHdoWDIwSUE/view?usp=sharing *** Đây là bản "đề mô" cho ACE muốn test: https://drive.google.com/file/d/0B2LetfHDljPGbGhTOWF2X194TE0/view?usp=sharing
×