Đến nội dung


Hình ảnh
- - - - -

[Nhờ chỉnh sửa] Lisp insert và open bản vẽ


  • Please log in to reply
6 replies to this topic

#1 kedensau88

kedensau88

    biết vẽ circle

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

Đã gửi 23 August 2012 - 11:20 AM

Chào các anh,bây giờ em đang có đoạn lisp sau :
File DCL :
 
nuts :dialog {label = "HEX NUTS-ISO (4043)";
:boxed_row {label = "Select Type"; height = 12;
:list_box {key = "nuts"; width = 30;}
}
spacer;
:row {
:button {label = "OK"; key = "ok"; width = 15; fixed_width = true;}
:button {label = "Cancel"; is_cancel = true; key = "cancel"; width = 15; fixed_width = true;}
}
}
[/CODE
File Lisp :
[CODE]
(defun saveVars()
(setq sStr(get_tile "nuts"))
(if(= sStr "")
(setq nuts1 "Nothing")
(setq nuts1 (nth (atoi sStr) nuts)))
)
;;;--------------------------------------------------------------
(defun nuts( / i)
(setq nuts(list "M5" "M6" "M8" "M10" "M12" "M14" "M16" "M18" "M20" "M22" "M24" "M27" "M30" "M36" "M39" "M42" "M45" "M48" "M52" "M56" "M60" "M64"))
(setq i (load_dialog "flanges\\flanges.dcl"))
(if (not (new_dialog "nuts" i)) (exit))
(start_list "nuts" 3)
(mapcar 'add_list nuts)
(end_list)
(action_tile "ok" "(setq ddiag 2)(saveVars1)(done_dialog)")
(action_tile "cancel" "(setq ddiag 1)(done_dialog)")
(start_dialog) (unload_dialog i)
)
;;;--------------------------------------------------------------
(defun C:nut(/ pt)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(nuts)
(if(= ddiag 1)
(princ "\n Nuts cancelled!")
)
(if(= ddiag 2)
(progn
(command "insert" nuts1 pause "" "" "")))
(setvar "osmode" oldos)
(princ)


- Khi em load lisp và thực hiện lệnh "nut" thì nó vẫn thực hiện bình thường.Nhưng đến khi em thực hiện lệnh "nut" lần thứ 2 thì nó báo lỗi "_nut ; error: bad function: ("M5" "M6" "M8" "M10" "M12" "M14" "M16"
"M18" "M20" "M22" "M24" "M27" "M30" "M36" "M39" "M42" "M45" "M48" "M52" "M56"
"M60" "M64")".Em ko biết vì sao lại vậy ?
- Bây giờ em muốn thay lệnh "insert" bằng "open" thì em phải thay đổi đoạn lisp command đó như thế nào ?(Lisp trên là em tạo thư viện các bản vẽ,trong mỗi bản vẽ sẽ chứa 1 chi tiết tiêu chuẩn,khi mình cần dùng chi tiết đó để vẽ bản vẽ thì mình sẽ insert nó vào bản vẽ mình vẽ.Còn khi em muốn thay bằng open là em muốn tạo thư viện các bản vẽ tiêu chuẩn tham khảo,khi muốn xem bản vẽ nào chỉ cần chọn bản vẽ đó để mở ra xem,ko cần phải vào "My Computer\\..." để tìm bản vẽ rất mất công).
Các anh giúp em với,cảm ơn các anh nhiều.
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 23 August 2012 - 11:40 AM

- Sai cơ bản về việc đặt tên biến trùng tên hàm ngay đầu hàm nuts
- Các dòng command bạn thực hiện thủ công ra sao thì viết lệnh như vậy thôi
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 kedensau88

kedensau88

    biết vẽ circle

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

Đã gửi 23 August 2012 - 01:11 PM

- Sai cơ bản về việc đặt tên biến trùng tên hàm ngay đầu hàm nuts
- Các dòng command bạn thực hiện thủ công ra sao thì viết lệnh như vậy thôi

-Vâng,em ko để ý,em sửa lại được rồi.Thanks anh nhiều nhé.
-Còn khi em thay bằng open,nó ko mở bản vẽ ra ngay mà nó lại thực hiện lệnh đứng sau open đó (vì khi chạy chương trình em thấy nó báo lỗi Unknown command "M6" có nghĩa là khi thực hiện open,nó ko mở cái file M6 mà nó lại đi thực hiện lệnh M6),ko biết em hiểu vậy có đúng ko nữa,mong anh giúp đỡ.
  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 23 August 2012 - 04:12 PM

-Vâng,em ko để ý,em sửa lại được rồi.Thanks anh nhiều nhé.
-Còn khi em thay bằng open,nó ko mở bản vẽ ra ngay mà nó lại thực hiện lệnh đứng sau open đó (vì khi chạy chương trình em thấy nó báo lỗi Unknown command "M6" có nghĩa là khi thực hiện open,nó ko mở cái file M6 mà nó lại đi thực hiện lệnh M6),ko biết em hiểu vậy có đúng ko nữa,mong anh giúp đỡ.

Ví dụ file M6.dwg nằm trong Support Search Path
Mở file M6.dwg bằng :
(Command "ai_editcustfile" "M6.dwg")
Còn nếu M6.dwg không nằm trong Support Search Path thì phải khai đầy đủ đường dẫn của nó
Ví dụ :
(Command "ai_editcustfile" "C:\\M6.dwg")
  • 1

#5 kedensau88

kedensau88

    biết vẽ circle

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

Đã gửi 23 August 2012 - 04:37 PM

Ví dụ file M6.dwg nằm trong Support Search Path
Mở file M6.dwg bằng :
(Command "ai_editcustfile" "M6.dwg")
Còn nếu M6.dwg không nằm trong Support Search Path thì phải khai đầy đủ đường dẫn của nó
Ví dụ :
(Command "ai_editcustfile" "C:\\M6.dwg")


Nhưng ở đây mình có rất nhiều bản vẽ,nếu mình lặp đi lặp lại chọn từng bản vẽ thì nó rất dài.
chính vì vậy mình đã gán tên các bản vẽ thành biến "nuts1".
Làm thế nào để mình đưa hợp lý cái biến "nuts1" vào dòng lệnh của bạn được ?
Nếu mình thay "M6.dwg" bằng "nuts1" thì khi thực hiện lệnh nó chỉ hiểu là mở file "M6" thôi chứ ko phải file "M6.dwg" nên nó sẽ ko mở đc.
  • 0

#6 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 23 August 2012 - 04:46 PM

(strcat "M6" ".dwg") sẽ cho ra "M6.dwg"
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#7 kedensau88

kedensau88

    biết vẽ circle

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

Đã gửi 23 August 2012 - 04:49 PM

(strcat "M6" ".dwg") sẽ cho ra "M6.dwg"

Hi,được rồi anh ah.
Thanks tất cả mọi người nhiều.:)
  • 0