Đến nội dung


Hình ảnh
- - - - -

Sử dụng biến hệ thống trong Autolisp


  • Please log in to reply
3 replies to this topic

#1 buimanhxd

buimanhxd

    biết pan

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

Đã gửi 17 March 2010 - 04:20 PM

Em có đoạn lisp này mong các bác giúp đỡ.
(defun c:cd1()
(setq scale (getvar "dimscale")
pt1 (getpoint "\nPick a point:")
y (cadr pt1)
y1 (/ y 1000)
)
(setvar "osmode" 0)

(command "insert" "D:/Chinh/acad/Block/cd1.dwg" pt1 scale scale "" (rtos y1 2 3) "")
(setvar "osmode" 127)
)
Trong đoạn lisp này em không hiểu hàm getvar tại sao lại phải lấy giá trị hiện hành của biến hệ thống osmode =0 sau đó lại lấy giá trị này bằng 127.
  • 0

#2 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 17 March 2010 - 04:54 PM

Em có đoạn lisp này mong các bác giúp đỡ.
(defun c:cd1()
(setq scale (getvar "dimscale")
pt1 (getpoint "\nPick a point:")
y (cadr pt1)
y1 (/ y 1000)
)
(setvar "osmode" 0)

(command "insert" "D:/Chinh/acad/Block/cd1.dwg" pt1 scale scale "" (rtos y1 2 3) "")
(setvar "osmode" 127)
)
Trong đoạn lisp này em không hiểu hàm getvar tại sao lại phải lấy giá trị hiện hành của biến hệ thống osmode =0 sau đó lại lấy giá trị này bằng 127.

*Tên biến: Osmode
Tác dụng: Xác lập chế độ Osnaps (bắt điểm tự động)
0= 0
1= điểm cuối
2= điểm giữa
4= tâm
8= nút
16= cung 1/4
32= giao điểm
64= điểm chèn
128= vuông góc
256= gần nhất
512= nhanh
Nếu cần nhiều chế độ một lúc thì nhập tổng các chế độ đó

Việc chọn chế độ nào là do nhu cầu tác giả cần chế độ nào trong thời điểm nào.
Thực chất người viết lisp này chưa cẩn thận vì khi dùng xong thì thiết lập Osmode cũ củ người dùng đã bị thay đổi thành 127.
  • 0

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


#3 buimanhxd

buimanhxd

    biết pan

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

Đã gửi 17 March 2010 - 05:26 PM

Cám ơn bác rất nhiều.
Em con một thắc mắc này muốn hỏi bác. Cũng là về biến hệ thống anh ạ
Em có đoạn lisp này.
( defun c:setup()
(setq cm (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command
"-style" "1_vnsimple" "vnsimple" "" "0.8" "0" "n" "n" "n"
"-style" "3_vnabch" "vn_abch" "" "0.9" "0" "n" "n" "n"
"-style" "4_vnarial" ".vnarial" "" "1.0" "0" "n" "n" "n"
"-style" "2_vnarialH" ".vnarialH" "" "1.0" "0" "n" "n"
)
(command "-layer" "n" "Hidden"
"c" "5" "hidden"
"l" "hidden" "hidden"
"n" "Center"
"c" "1" "center"
"l" "dashdot" "center"
"n" "Dimension"
"c" "8" "dimension"
"n" "Special"
"c" "6" "special"
"n" "Boundary"
"c" "4" "boundary"
"n" "Text"
"c" "3" "text"
"n" "Medium"
"c" "3" "medium"
"n" "Main_01"
"c" "7" "Main_01"
"n" "Main_02"
"c" "2" "Main_02"
"n" "Secondary"
"c" "8" "secondary"
"n" "defpoints"
"c" "151" "defpoints"
"n" "Hatch"
"c" "9" "hatch" ""
)
(command "layer" "s" "main_01" "")
(setq tyle (getreal "\n Enter main scale: "))
(setvar "dimscale" tyle)
(setvar "dimasz" 1.1)
(setvar "dimclrd" 8)
(setvar "dimclre" 8)
(setvar "dimclrt" 3)
(setvar "dimdec" 0)
(setvar "dimdli" 0.5)
(setvar "dimexe" 0.5)
(setvar "dimexo" 0.5)
(setvar "dimfit" 5)
(setvar "dimgap" 0.6)
(setvar "dimjust" 0)
(setvar "dimtad" 1)
(setvar "dimtxsty" "2_vnarialH")
(setvar "dimtxt" 1.5)
(setvar "dimtix" 1)
(setvar "dimtoh" 0)
(setvar "dimtih" 0)
(setvar "dimtofl" 1)
(command "dimstyle" "s" (rtos tyle 2 0) "")
(setvar "ltscale" 4)
(princ "Welcome to setup of TO QUANG CHINH TEDI-RECO-Bridge Design Department No")
(setvar "cmdecho" cm)
(setvar "osmode" 127)
(setvar "lunits" 2)
(setvar "psltscale" 1)
);end defun
**************************************************************
**************************************************************
Cái biến hệ thống cmdecho trong này gán bằng 0 để làm gì vậy anh.
  • 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 17 March 2010 - 05:41 PM

**************************************************************
Cái biến hệ thống cmdecho trong này gán bằng 0 để làm gì vậy anh.


Reply :

Tiện đây bác q288 cho em hỏi cái này có tác dụng gì thế?
(setvar "cmdecho" 0)
thấy rất nhiều lisp mọi người viết bắt đầu thường có đoạn này, tại vì em cũng chỉ học mót, chắp vá nên không hiểu lắm. bác giải thích hộ em với

->

Xin được giải thích :
(setvar "cmdecho" 0)
- Cái này cũng dễ hiểu lắm.
Bạn chạy Lisp với dòng này -> Mở thanh Command line quan sát (1)
Bạn chạy Lisp không có dòng này -> Mở thanh Command line quan sát (2)
Quan sát (1) và (2) => Rút ra kết luận

Sau đó chạy Lisp với dòng này nữa (setvar "cmdecho" 1)
Quan sát => Rút ra kết luận


->

còn cmdecho=0 để tắt tạm thời đối thoại của cad, vì nếu ko thì cad cứ đưa ra kết quả lằng nhằng đôi khi gây khó chịu mà còn làm chậm tộc độ chạy ct.


  • 2