phamductai1989
-
Số lượng nội dung
7 -
Đã tham gia
-
Lần ghé thăm cuối
Bài đăng được đăng bởi phamductai1989
-
-
minh có doạn con nay ai huong dan minh với cảm ơn mọi ng nhiu nhá
minh dang rat can
("open" ("d:\\kqdd\\gcn_to1\\23.dwg")(1)
minh muon sửa
("open" ("d:\\kqdd\\gcn_i\\j.dwg")(2)
i.j la 2 bien nhap tu command de mo linh
-
AutoCAD với Excel
trong AutoLisp
Tại trang tin cũng đã có 1 ví dụ về chương trình LISP nhập xuất dữ liệu giữa AutoCAD và Excel.
http://www.cadviet.com/content/view/20/1/
Đó là chương trình eiPoint (Export Import Point), là chương trình khá đơn giản và cơ bản. Chúng ta có thể cải tiến nó để đáp ứng được từng mục đích riêng của mình.
Dưới đây là mã lệnh của chương trình eiPoint (lấy từ trang tin):
[code=
Bản chất của quá trình trao đổi dữ liệu giữa AutoCAD và Excel trong ví dụ trên là tạo ra một tệp có đuôi .txt làm trung gian.
-
AutoCAD với Excel
trong AutoLisp
Tại trang tin cũng đã có 1 ví dụ về chương trình LISP nhập xuất dữ liệu giữa AutoCAD và Excel.
http://www.cadviet.com/content/view/20/1/
Đó là chương trình eiPoint (Export Import Point), là chương trình khá đơn giản và cơ bản. Chúng ta có thể cải tiến nó để đáp ứng được từng mục đích riêng của mình.
Dưới đây là mã lệnh của chương trình eiPoint (lấy từ trang tin):
[code=
Bản chất của quá trình trao đổi dữ liệu giữa AutoCAD và Excel trong ví dụ trên là tạo ra một tệp có đuôi .txt làm trung gian.
-
Học AutoLisp
trong AutoLisp
bác hoành ơi e muốn tạo lisp là lưu và thoát bản vẽ như nào ạ
ví dụ là
e muon in xong bản vẽ thì tự động lưu và thoát bản vẽ luôn ý
-
Học AutoLisp
trong AutoLisp
Phần 1: bắt đầu
Đầu tiên, chúng ta hãy bắt đầu bằng chương trình viết chữ.
Hãy tạo một file mới và save nó với tên hoclisp.lsp.
(princ "\nChao cadviet")
(princ)
Đây là đoạn mã đơn giản nhất của AutoLisp nhằm viết ra một dòng 'Chao cadviet' trên màn hình nhập dữ liệu của autocad. để sử dụng, appload file hoclisp.lsp này. ta sẽ thấy trên màn hình xuất hiện chữ Chao cadviet.
Đi sâu vào phân tích lệnh, ta thấy: mỗi hàm của cad được bắt đầu bằng dấu '(' ngay sau đó là tên hàm, tiếp đến là thông số của hàm (có thể có, có thể không có) và kết thúc bằng dấu ')' Trong trường hợp này princ là tên hàm, "\nChao cadviet" là tham số của hàm princ.
Trong hai câu lệnh gọi hàm vừa rồi, câu thứ nhất là để viết chữ ra màn hình text, câu lệnh thứ 2 dùng để ẩn kết thúc mà không hiển thị thêm gì cả. Nếu thiếu câu lệnh thứ 2, bạn sẽ nhìn thấy 'Chao cadviet"\nChao cadviet"' trên màn hình, trong đó "\nChao cadviet" là kết quả của hàm (princ "\nChao cadviet").
-
Học AutoLisp
trong AutoLisp
Patpat lại khích tướng rồi. Xin giới thiệu phần tiếp theo để mọi người khỏi phải chờ, hy vọng là nó có ích.
Phần 4:
* Các phần trước, chúng ta đã thực hành được với lệnh lisp tính diện tích của một đối tượng. Phần này, chúng ta sẽ đi vào cải tiến để lệnh tính diện tích sẽ áp dụng cho một tập đối tượng được chọn của chúng ta.
* Trong AutoLisp tập đối tượng được lưu trong biến kiểu tập chọn. Với lệnh (ssget), có thể tạo ra một tập chọn chứa các đối tượng chúng ta chọn. Với lệnh (ssname ss index) chúng ta sẽ lấy được entname đối tượng thứ index trong tập đối tượng ss. lệnh (sslength ss) trả về số đối tượng trong tập chọn.
* Tính diện tích của một tập đối tượng, ta sẽ tính diện tích của từng đối tượng trong tập này và cộng lại với nhau. Để làm được như vậy, chúng ta sẽ làm một hàm lặp như sau:
(repeat sodoituong
(setq
ent_ht (ssname ssdt index)
index (+ index 1)
dientich (tinhdientich_one ent_ht)
tongdientich (+ tongdientich dientich)
)
Vòng lặp này sẽ quét qua tất cả các đối tượng và cộng dồn diện tích của đối tượng hiện tại vào diện tích tổng. Trong đoạn mã trên, biến sodoituong chứa số đối tượng có trong tập chọn. index là biến chứa chỉ số của đối tượng hiện tại (index có giá trị từ 0 đến sodoituong-1). ent_ht là tên của đối tượng hiện tại. tinhdientich_one là hàm tính diện tích của một đối tượng được chỉ định, hàm này có được bằng cách gom 2 dòng lệnh của phần trước lại với nhau là: (command ".area" "o" ent)(setq dientich (getvar "area")). Tongdientich chính là diện tích của tất cả các đối tượng, giá trị này có được nhờ cộng dồn tất cả các giá trị của biến dientich lại với nhau.
* Chương trình tính diện tích sẽ tiếp tục được cải tiến như sau:
--------------------Gốc (xin nhắc lại phần trước):
(defun c:tdt( / sel ent dientich)
(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 tap doi tuong vua roi la: ")
(princ dientich)
(princ "\nm2")
(princ)
)
--------------------Cải tiến (màu xám là đoạn code bỏ đi, màu xanh là đoạn code thêm mới):
(defun c:tdt( / sel ent dientich)
(princ "\nChao cadviet")
;(setq sel (entsel "\nHay chon doi tuong: "))
(setq ssdt (ssget))
;(setq ent (car sel))
(defun tinhdientich_one(ent)
(command ".area" "o" ent)
(setq dientich (getvar "area"))
)
; khởi tạo các biến
(setq
sodoituong (sslength ssdt)
index 0
tongdientich 0.0
)
; vòng lặp quét qua các đối tượng
(repeat sodoituong
(setq
ent_ht (ssname ssdt index)
index (1+ index)
dientich (tinhdientich_one ent_ht)
tongdientich (+ tongdientich dientich)
)
)
(princ "\nDien tich tap doi tuong vua roi la: ")
;(princ dientich)
;in tổng diện tích
(princ tongdientich)
(princ "\nm2")
(princ)
)
* Như vậy, chúng ta đã tạo được một đoạn code tính diện tích của một tập đối tượng. Tuy nhiên, đoạn code này hơi rườm rà, do có một lệnh định nghĩa hàm defun tinhdientich_one nằm ngay giữa đoạn code. Bây giờ, chúng ta sẽ làm sạch lại đoạn code trên bằng cách sắp xếp lại mà không thay đổi bất cứ ý nghĩa của một mã nào:
(defun c:tdt( / sel ent dientich)
;định nghĩa hàm tính diện tích 1 đối tượng
(defun tinhdientich_one(ent)
(command ".area" "o" ent)
(setq dientich (getvar "area"))
)
; viết lời chào và chọn đối tượng
(princ "\nChao cadviet")
(setq ssdt (ssget))
; khởi tạo các biến
(setq
sodoituong (sslength ssdt)
index 0
tongdientich 0.0
)
; 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)
tongdientich (+ tongdientich dientich)
)
)
; xuất kết quả ra màn hình
(princ "\nDien tich tap doi tuong vua roi la: ")
(princ tongdientich)
(princ "\nm2")
(princ)
)
--------------------------------------------------------------------------------------------
Phần tiếp theo sẽ trình bày phần tinh chỉnh code để:
- kết xuất kết quả ra đối tượng text
- lọc các đối tượng được chọn
- ẩn các đoạn text trung gian.
Cảm ơn các bạn vẫn đang theo dõi.
AutoLisp copy "TEXT" từ Cad sang Excel và ngược lại
trong AutoLisp
Đã đăng · Trả lời báo cáo