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

Học AutoLisp

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

File lổi hay sao bác.

Hay là vưiớng gì?

Dài quá! Tôi dịch xong cũng mất cả tuần, mà bạn cũng sẽ chẳng thu được mấy kiến thứ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
Sau đây là 1 đoạn lisp tạo một điểm point ở giữa một đối tượng line:

(defun c:test()

(setq ent (car (entsel "\nPick vao 1 line: "))

tt (entget ent)

p1 (cdr (assoc 10 tt))

p2 (cdr (assoc 11 tt))

pg (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.0))

)

(entmake (list (cons 0 "POINT") (cons 10 pg)))

(princ)

)

Úi, bác Hoanh oi! Cái minh cần là vẽ line định hướng trước (chứ không phải chọn line có sẳn). Từ line đó mới lấy thông tin 2 điểm đầu và cuối (như bác đã cho ví dụ) rồi chèn symbol vào. Cuối cùng là xóa line định hướng. Tóm lại là chỉ cần 2 cái click chuột là mình chèn symbol vào giữa 2 điểm đó, nhưng trước khi click cái thứ 2 thì có 1 line chạy theo con trỏ từ điểm đã click, giúp mình định hướng tốt hơn. Giống như khi minh dùng lệnh dist để tính khoảng cách vậy. Không biết diễn tả vậy bác có hiể ý không 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
Ok.

 

Có lẽ làm thế sẽ dễ hơn cho người viết, cũng dễ hơn cho người học.

 

thanks.

đúng đấy Bác Hoành nên viết theo kiêu này đọc dể hiểu hơn sách đấy.Tiếp tục phát huy nhé bác .he :unsure:

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

anh hoành oi! em mới bắt đầu học lisp thôi nên nhờ anh hướng dẫn em một chút: em dang học theo cách dạy lisp của anh nhưng mà em không biết cách đưa từ môi trường lisp sang môi trường cad, cảm ơn anh !

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

Cho minh hoi, làm sao để xuất ra được chu vi đường tròn, mình dùng lệnh "cadr" mà không được?

Minh lập một đoạn code như sau:

(defun c:tdt( / sel ent dientich chuvi)

(princ "\nChao cadviet")

(setq sel (entsel "\nHay chon doi tuong: "))

(setq ent (car sel))

(command "area" "o" ent)

(setq dientich (getvar "area"))

(princ "\nDien tich doi tuong vua roi la: ")

(princ dientich)

(princ "\nm2")

(setq chuvi (cadr (getvar "area")))

(princ "\nChu vi doi tuong vua roi la:")

(princ chuvi)

(princ)

)

Nhưng khi chạy thì máy bảo:

error: bad argument type:

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
Cho minh hoi, làm sao để xuất ra được chu vi đường tròn, mình dùng lệnh "cadr" mà không được?

 

 

(command "area" "object" doituongdo)

(setq dientichdo2d (getvar "Perimeter"))

 

Trong đó doituongdo là đối tượng cần đo, dientichdo2d là gia trị chu vi

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
Cho minh hoi, làm sao để xuất ra được chu vi đường tròn, mình dùng lệnh "cadr" mà không được?

Bạn phân tích như thế nào mà dùng cadr?! Để lấy thông tin về đối tượng, bạn cần tìm hiểu về entity và hàm entget.

Ví dụ: (cdr (assoc 40 (entget (car (entsel))))) sẽ trả về bán kính đường tròn do người dùng select. Có bán kính tất nhiên biết chu vi.

Vấn đề là bạn có hiểu biểu thức trên không, cũng như có hiểu bản chất của thủ thuật mà bạn duy782006 đề xuất không?

Góp ý với bạn: hãy bắt đầu bằng những cái cơ bản nhất. Lập trình lisp không khó, nhưng không nên nóng vộ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
anh hoành oi! em mới bắt đầu học lisp thôi nên nhờ anh hướng dẫn em một chút: em dang học theo cách dạy lisp của anh nhưng mà em không biết cách đưa từ môi trường lisp sang môi trường cad, cảm ơn anh !

Bạn tìm hiểu lệnh appload và các bài viết có liên quan đã post khá nhiều trên diễn đà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

anh hoành ơi! theo đoạn code anh viết tính diện tích ở đầu bài sao mà em cho chạy thì nó chỉ tính được diện tích hình tròn thôi còn các hình khác nó báo bằng 0 và nó chỉ tính diện tích của một hình duy nhất thôi. em tính diện tích một hình ban đầu xong rồi nó xuất kết quả chính xác, nhưng sau đó em tính diện tích hình khác thì nó báo lại kết quả của hình cũ! mặc dù em thay đổi diện tích của hình đó rồi ! em không hiểu nguyên nhân thế nào? mong anh giải thich dum em nha! cam on anh!

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
anh hoành ơi! theo đoạn code anh viết tính diện tích ở đầu bài sao mà em cho chạy thì nó chỉ tính được diện tích hình tròn thôi còn các hình khác nó báo bằng 0 và nó chỉ tính diện tích của một hình duy nhất thôi. em tính diện tích một hình ban đầu xong rồi nó xuất kết quả chính xác, nhưng sau đó em tính diện tích hình khác thì nó báo lại kết quả của hình cũ! mặc dù em thay đổi diện tích của hình đó rồi ! em không hiểu nguyên nhân thế nào? mong anh giải thich dum em nha! cam on anh!

tôi đã kiểm tra lại, không có vấn đề gì cả.

Bạn có thể upload file CAD của bạn lên được khô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
tôi đã kiểm tra lại, không có vấn đề gì cả.

Bạn có thể upload file CAD của bạn lên được không?

Tôi xin góp ý :

1.Bạn phải chọn các đối lượng vẽ bằng polyline, arc , circle... ko chọn các đối tượng vẽ = lệnh line được

2.Nếu muốn chọn thêm đối tượng là line thì phái dùng lệnh join các line lại

3.Trong lisp này Mr Hoành chỉ hướng dẫn cho các bạn học thôi, chứ nếu viết để làm việc thì sẽ thêm

các hàm lọc lựa đối tượng là line xong kết nôi lại thì tính dt hay chu vi gì đó được tuốt

  • 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

Xin mạn phép Mr Hoành nói rõ cho các anh em còn mới tí nha

Mời các bạn tham khảo lại chương trình của Hoành TDT đã nêu. Tôi chỉ nói thêm chi tiết cho các bạn mới vào nghề hiểu thêm tí tẹo!!!!!!

(defun c:tdt( / sel ent dientich)

;;các bạn mới tập viết Lisp chú ý hàm có chữ C: ở trước thì Acad hiểu là lệnh cho nên load vào xong ta có thể gỏ lệnh TDT

;;trước dấu "/" là nơi đặt đối mục nếu ko có đổi mục thì để trống; sau "/" là các biến , có thể ko cần ghi cũng đc hàm vẫn chạy tốt.

;;Tuy nhiên theo Acad nên ghi cho chuyên nghiệp để về sau chỉnh lại dễ dàng, kiểm tra biến đã tạo....

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;định nghĩa hàm tính diện tích 1 đối tượng

(defun tinhdientich_one(ent);;;;hàm này ko có C: chỉ có 1 đổi mục là ent; chú ý nếu ko có "/" thì Acad sẽ hiểu các từ trong ngoặc là đối mục, đối mục có thể có n đối mục

;;;mục đích của loại hàm này trong 1 chương trình nhằm lặp lại các công việc giống nhau. Các bạn phải chịu khó tập cho quen cách viết này vì đây là 1 dạng của lập trình

;;;hướng đối tượng chứ ko còn là lập trình theo thứ tự dòng lệnh từ đầu đến đuôi

(command ".area" "o" ent)

(setq dientich (getvar "area"));;;chú ý sau lệnh ".area" thì Acad lưu giá trị diện tích và chu vi vào 2 biến hệ thống "Area" & "Perimeter" (dt và chu vi)

;;các bạn ko nên hiểu lầm đây là danh sách để rồi dùng hàm cadr để thẻo phần tử thứ 2 . Phải dùng hàm getvar đọc biến hệ thống "Area" và "Perimeter"

);;end defun

 

; viết lời chào và chọn đối tượng

(alert "Chao cadviet");;;dùng hàm này có vẻ "xôm trò"

(setq ssdt (ssget))

 

; khởi tạo các biến

(setq

sodoituong (sslength ssdt)

index 0

tongdientich 0.0

);;end setq

 

;;;quét qua tất cả các đối tượng trong tập chọn, tính diện tích và cộng dồn diện tích

(repeat sodoituong

(setq

ent_ht (ssname ssdt index)

index (1+ index)

dientich (tinhdientich_one ent_ht);;;;đây là lúc dùng hàm tinhdientich_one đối mục là ent_ht vừa tạo bên trên

tongdientich (+ tongdientich dientich)

);;;end setq

);;;end repeat

 

; xuất kết quả ra màn hình

(alert (strcat "Dien tich tap doi tuong vua roi la: " (rtos tongdientich) "m2"));;;;kết quả nhìn cho đã tí mà

;(princ tongdientich)

;(princ "\nm2")

;(princ)

);;;end defun C:TDT . Các bạn nên cẩn thận ghi chú các dấu ngoặc như vậy sẽ ko gặp lỗi "malformel list"

Lời quê cóp nhặt dông dài xin chân thành cảm ơn các bạn đã đọc.

các bạn cứ cóp lại code và chạy thử xem sao.

  • 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
Chỉ có thoát khỏi cả chương trình lisp (bằng lệnh exit hoặc quit) chứ không thể chỉ thoát khỏi lặp repeat.

Hơn nữa, để thoát khỏi một vòng lặp bằng cách bấm chuột phải còn phụ thuộc vào đoạn mã của bạn, có thể được và cũng có thể không được.

bác Nguyenhoangcođại chỉ mail ko mìnhcần hỏi bác mộtsố vấn đề. tk

  • Vote giảm 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

Bạn duy782006 ơi tôi có xem và nghiên cíu sơ sơ có 1 ít nhận xét sau:

lệnh CTD trong file tracdia.lsp mà bạn post lên chạy kèm với file giao diện tracdia.dcl

Bạn chú ý ltrong file tracdia.lsp sẽ yêu cầu người sử dụng mở file số liệu dạng data có đuôi file là *.CSV

Thường người dùng phải lập file này từ Excel (khi lưu file dùng format file là : CSV(comma delimited);

file chứa dữ liệu này cần có 4 cột số liệu : cột thứ 1 là số thứ tự,cột thứ 2 là tọa độ X, thứ 3 tđ Y, thứ 4 tọa độ Z.

Mục tiêu của file lisp này dùng để vẽ các điểm mia đo cao độ đã được xuất từ máy đo ra file dữ liệu

vào bản vẽ , sau đó ghi cao độ Z của N điểm đo và số thứ tự N của điểm đó.

File tracdia.lsp này viết đã lâu rồi cho nên trong dòng CODE lệnh "text" ko phù hợp với phiên bản Acad mới.

Tôi có sửa lại như sau; mời bạn xem rồi load lại chạy thử. Tôi đã test chạy tốt với Acad 2007.

Khi chương trình đọc file data *.CSV sẽ đọc từng dòng mối dòng data sẽ có dạng: "4,10003.683,5015.354,20.14"

Vì khi lưu file có format CSV(comma delimited) thì Excel sẽ tạo ra dạng các cột số liệu được ngăn bằng dấu ","

;;;-------------------------------------------------------------

(defun BeginDraw()

(setq OldOs (getvar "osmode") OldLay (getvar "clayer"))

(setvar "osmode" 0)

)

;;;-------------------------------------------------------------

(defun EndDraw() (setvar "osmode" OldOs) (setvar "clayer" Oldlay))

;;;-------------------------------------------------------------

(defun set_list(MyTile MyList MyVal / j x)

(start_list MyTile)

(setq j 0)

(while (setq x (nth j MyList)) (add_list x) (setq j (1+ j)))

(end_list)

(set_tile MyTile MyVal)

)

;;;-------------------------------------------------------------

(defun GetLay(/ Lay Laylist);;;; hàm này dùng để đọc danh sách các lớp đã có trong bản vẽ

(setq Lay (tblnext "LAYER" T) Laylist nil)

(While Lay (setq Laylist (append Laylist (list (cdr (assoc 2 Lay)))) Lay (tblnext "LAYER")))

(acad_strlsort Laylist)

)

;;;-------------------------------------------------------------

(defun Separate (S sym / i L ch) ;hàm này để loại trừ dấu phẩy "," trong file dữ liệu

(setq i 0 L nil)

(while (< i (strlen S))

(setq i (1+ i) ch (substr S i 1))

(if (= ch sym) (progn

(setq

L (append L (list (substr S 1 (- i 1))))

S (substr S (1+ i) (- (strlen S) i))

i 0

)

))

)

(append L (list S))

)

;;;-------------------------------------------------------------------

(Defun Dialog_TracDia(/ i i0 i1 i2)

(setq i (load_dialog "tracdia.dcl")) ;dòng code này đọc file tracdia.dcl giao diện để chọn các lớp vẽ

(if (not (new_dialog "inpoint" i)) (exit))

(action_tile "cancel" "(done_dialog)(setq Err \"*Cancel*\")(exit)")

(set_list "pt" LayList "0") ;các listbox chứa các lớp nếu ko có lớp nào cả thì đặt lớp là "0"

(set_list "el" LayList "0")

(set_list "nt" LayList "0")

(set_tile "txts" (rtos ts))

(action_tile "accept" (strcat ;;;đối với giao diện hàm action_tile sẽ tác động số liệu tại các listbox trong tracdia.dcl

"(setq i0 (atoi (get_tile \"pt\")) "

"i1 (atoi (get_tile \"el\")) "

"i2 (atoi (get_tile \"nt\")) "

"ts (atof (get_tile \"txts\"))) "

"(done_dialog)")

)

(start_dialog) (unload_dialog i)

(setq Lay0 (nth i0 Laylist) Lay1 (nth i1 Laylist) Lay2 (nth i2 Laylist))

)

;;;-------------------------------------------------------------------

(defun C:CTD( / Laylist fn ts f S L pn X Y Z1 Z p0 p1 p2 Lay0 Lay1 Lay2) ;;đây là hàm chính có C:CTD do đó sẽ đc Acad xem là lệnh và gõ CTD để chạy

(setq

fn (getfiled "Select Data File" "" "csv" 0);; dòng này gọi file data *.CSV (chương trình sẽ mở giao diện chọn nơi để file)

ts (getvar "TEXTSIZE") ;;dòng code này lấy biến hệ thống chứa chiều cao chữ

LayList (GetLay) ;;code gọi hàm GetLay đã tạo phía trên

)

(if fn (progn

(Dialog_Tracdia)

(setq f (open fn "r")) ;;dòng code này đặt biến f = file data *.CSV mà người dùng gọi vào

(read-line f) ;;đọc file

(BeginDraw)

(while (setq S (read-line f))

(setq

L (Separate S ",") ;;dòng này gọi hàm Separate loại trừ dấu phẩy hàm này có 2 đối mục S và ","

pn (nth 0 L) ;; dòng này đọc số thứ tự

X (atof (nth 1 L)) ;; dòng này đọc số tọa độ X và chuyển từ string sang Value

Y (atof (nth 2 L)) ;; dòng này đọc số tọa độ Y

Z1 (nth 3 L) ;; dòng này đọc số tọa độ Y

Z (atof Z1)

p0 (list X Y Z) ;; code này tạo ra tọa độ điểm đo

p1 (list X (+ Y (* ts 1.5)) Z) ;; code này tạo ra tọa độ điểm ghi text số thứ tự N

;;p2 (list X (+ Y (* ts 1.5)) Z) ;;theo tôi có thể o dùng dòng này

)

(setvar "clayer" Lay0) (command "point" p0)

(setvar "clayer" Lay2) (command "text" "j" "bc" p1 "" pn); tôi chỉnh lại code này để chạy được Acad 2007

(setvar "clayer" Lay1) (command "text" "j" "c" p0 "" Z1); tương tự nh trên

)

(EndDraw)

(close f)

(alert (strcat "Da ve het so lieu cao do gom co:" fn "diem" ))

));;;end if

)

;;;-------------------------------------------------------------

Riêng file tracdia.dcl tôi thấy ko có vấn đề gì vẫn chạy tốt, nếu bạn ko thích tiếng ANh thì sửa thành tiếng Việt

Cám ơn đã đọc các điều lạm bàn ở trên.

  • 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
Bạn duy782006 ơi tôi có xem và nghiên cíu sơ sơ có 1 ít nhận xét sau:

lệnh CTD trong file tracdia.lsp mà bạn post lên chạy kèm với file giao diện tracdia.dcl

Bạn chú ý ltrong file tracdia.lsp sẽ yêu cầu người sử dụng mở file số liệu dạng data có đuôi file là *.CSV

Thường người dùng phải lập file này từ Excel (khi lưu file dùng format file là : CSV(comma delimited);

file chứa dữ liệu này cần có 4 cột số liệu : cột thứ 1 là số thứ tự,cột thứ 2 là tọa độ X, thứ 3 tđ Y, thứ 4 tọa độ Z.

Mục tiêu của file lisp này dùng để vẽ các điểm mia đo cao độ đã được xuất từ máy đo ra file dữ liệu

vào bản vẽ , sau đó ghi cao độ Z của N điểm đo và số thứ tự N của điểm đó.

File tracdia.lsp này viết đã lâu rồi cho nên trong dòng CODE lệnh "text" ko phù hợp với phiên bản Acad mới.

Tôi có sửa lại như sau; mời bạn xem rồi load lại chạy thử. Tôi đã test chạy tốt với Acad 2007.

Khi chương trình đọc file data *.CSV sẽ đọc từng dòng mối dòng data sẽ có dạng: "4,10003.683,5015.354,20.14"

Vì khi lưu file có format CSV(comma delimited) thì Excel sẽ tạo ra dạng các cột số liệu được ngăn bằng dấu ","

;;;-------------------------------------------------------------

Riêng file tracdia.dcl tôi thấy ko có vấn đề gì vẫn chạy tốt, nếu bạn ko thích tiếng ANh thì sửa thành tiếng Việt

Cám ơn đã đọc các điều lạm bàn ở trên.

 

Cái này bác ssg mới viết tức thì đó bạn.

Cám ơn vì đã dịch và giải nghĩa. :bigsmile:

 

Hỏi thêm: meohoang la trai hay gái dậy ??

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

Thưa các Quý Anh trên diễn đàn,

Là kẻ đang mày mò học mót, tôi đã đọc các bài viết của các quý Anh, nhưng chả thấy ai nói về việc sử dụng Autolisp để viết hay cải tạo các file font của AutoCad cả (các file *.shx)

Xin cho hỏi là:

1/- Có dùng Autolisp để làm việc này được không?

2/- Nếu không thì có cách nào để viết hay cải tạo các file dạng *.shx

3/- Có ai cả gan nhận tôi làm đồ đệ trong việc học Autolisp thì cho xin đia chỉ email cá nhân để tiện liên hệ.

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
Thưa các Quý Anh trên diễn đàn,

Là kẻ đang mày mò học mót, tôi đã đọc các bài viết của các quý Anh, nhưng chả thấy ai nói về việc sử dụng Autolisp để viết hay cải tạo các file font của AutoCad cả (các file *.shx)

Xin cho hỏi là:

1/- Có dùng Autolisp để làm việc này được không?

2/- Nếu không thì có cách nào để viết hay cải tạo các file dạng *.shx

3/- Có ai cả gan nhận tôi làm đồ đệ trong việc học Autolisp thì cho xin đia chỉ email cá nhân để tiện liên hệ.

Bạn phamthanhbinh oi

Mình cũng như bạn thôi cũng A, B, C về lisp nhưng mà mình nghĩ bạn vào dây (diễn đàn cadviet) thì ai chả là sư phụ. Mình không có gan làm sư phụ nhưng nếu bạn thích thì chúng ta là đông môn đi, mọi vấn đề cứ trao đổi cho cùng nâng cao công lực email: dnhqs@yahoo.com

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

Thưa Quý Anh meohoang và các Quý Anh trên diễn đàn,

Đọc bài viết của Quý Anh meohoang và các Quý Anh khác, tôi mót được nhiều thứ ra phết. Tuy nhiên vẫn có cái mót được mà chưa xài được vì ngu lâu chậm hiểu. Tỉ dụ như cái thằng getvar mà quý Anh meohoang có đề cập tới. Cho tôi hỏi:

1/- Cú pháp chuẩn của thằng getvar này như thế nào?

2/- Biến hệ thống khác với các biến thông thường như thế nào?

3/- Có phải là biến hệ thống là kết quả trả về của các hàm nội trú trong AutoCad hay không?

4/- Kết quả trả về của hàm getvar có phải chỉ là các dữ liệu dạng số hay có thể là các dạng khác nữa?

Rất mong các Quý Anh chỉ bảo giúp.

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
Thưa Quý Anh meohoang và các Quý Anh trên diễn đàn,

Đọc bài viết của Quý Anh meohoang và các Quý Anh khác, tôi mót được nhiều thứ ra phết. Tuy nhiên vẫn có cái mót được mà chưa xài được vì ngu lâu chậm hiểu. Tỉ dụ như cái thằng getvar mà quý Anh meohoang có đề cập tới. Cho tôi hỏi:

1/- Cú pháp chuẩn của thằng getvar này như thế nào?

2/- Biến hệ thống khác với các biến thông thường như thế nào?

3/- Có phải là biến hệ thống là kết quả trả về của các hàm nội trú trong AutoCad hay không?

4/- Kết quả trả về của hàm getvar có phải chỉ là các dữ liệu dạng số hay có thể là các dạng khác nữa?

Rất mong các Quý Anh chỉ bảo giúp.

Xin trả lời bạn như sau:

1. Cú pháp chuẩn của thằng getvar là (getvar "tenbienhethong"). Ví dụ (getvar "clayer") trả về tên layer hiện hành.

2. Biến hệ thống khác với biến thông thường ở chỗ nó được ACAD sử dụng và liên quan mật thiết đến các lệnh của AutoCAD.

3. Biến hệ thống không phải là kết quả của hàm nội trú, nó là một ô nhớ như tất cả các biến khác, ô nhớ đặc biệt này có thể được lưu trong cấu hình cad, trong registry, trong file dwg, trong RAM.

4. Giá trị được trả về của hàm getvar là rất đa dạng phụ thuộc vào tính chất của biến đó, có thể là dạng số hoặc chữ (ví dụ tên layer thì không thể chỉ là số đượ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

Thưa Anh Nguyen Hoanh và cá quý Anh khác trên diễn đàn,

Qua trả lời của Anh Nguyen Hoanh, tôi có thủng ra đươc một tí nhưng vẫn bí rị à. Như vậy để xài được thằng getvar này, phải biết được tên các biến hệ thống được xài trong Acad, chớ đâu có xài ẩu được. Thế mà tôi mới chỉ mót được có mỗi mấy cái tên mà các quý Anh đã cho đăng đàn như "Area", "perimeter", "clayer",... thì làm sao xài phà phà được.

Vậy nên tôi lại đăng đàn nhờ các quý Anh mấy việc sau:

1/- Giới thiệu tổng quan về các biến hệ thống thường gặp trong Acad.

2/- Chỉ giùm tôi nơi có tài liệu tham khảo kỹ lưỡng hơn về mấy cái biến hệ thống này.

3/- Có ai có các lisp sử dụng cái thằng getvar này nhiều nhiều một tí thì chỉ giùm để tôi đi mót.

Cám ơn anh Nguyen hoanh và các Quý Anh trước 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

Xin được trả lời bạn như sau:

1. Bạn mở AutoCAD, nhấn phím F1. Sau đó vào Command Reference rồi vào System Variables, ở đó người ta lý giải rất ngắn và rất rõ của từng biến hệ thống.

2. Giống câu 1.

3. Bạn vào chức năng search của diễn đàn, nhập từ khoá tìm kiếm là getvar, bạn sẽ có vô vàn ví dụ để xài.

 

Cũng xin được hỏi bạn 2 câu:

1. Tại sao bạn lại quan tâm quá về getvar! Lisp có bao nhiêu thứ, CAD cũng có bao nhiêu thứ không thấy bạn quan tâm.

2. Mục tiêu của bạn là gì? Nghĩa là bạn mong muốn hạ được con thú gì trước lúc nhả mũi tên khỏi cung tên?

 

Sở dĩ tôi hỏi vậy là vì không rõ về level lisp của bạn. Nếu ở level thấp thì chưa cần quan tâm đến getvar để làm gì, nếu ở level cao thì cũng không cần hỏi getvar nữa. Tức là getvar sẽ đến một cách âm thầm trong lúc ta thực hành autolisp (cũng như vô vàn các lệnh khác), nếu có hỏi thì thường câu hỏi sẽ ở dạng: 'tại sao tôi dùng getvar như thế này mà lại không được nhỉ' chứ không phải câu hỏi 'getvar là gì'.

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


×