Chủ Nhật, 4 tháng 7, 2010

Hướng dẩn viết lisp bài 30:

Bạn nên theo dỏi theo tên bài viết tăng từ nhỏ tới lớn thì mới đúng trình tự!


Đáp án đây. Hy vọng bạn đã hoàn thành giống như sau:

(defun c:vht ()
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)

(Princ "\nChon cac text :")
(setq tapdoituong (ssget '((0 . "text"))))
(setq diemchuan (getpoint "\nChon diem canh le: "))
(setq thutu 0)
(setq sodoituong (sslength tapdoituong))

(while (< thutu sodoituong)
(setq doituong (ssname tapdoituong thutu))
(setq laynoidung (entget doituong))
(setq diemve (cdr (assoc 10 laynoidung)))

(setq xmoi (car diemchuan))
(setq ymoi (cadr diemve))
(setq diemmoi (list xmoi ymoi))

(command "move" doituong "" diemve diemmoi)
(setq thutu (+ thutu 1))
)
(command "undo" "end")
(setvar "osmode" luubatdiem)
(Princ)
)

**Sau đây mình nói về cách lấy thông tin của đối tượng bằng lisp:
Giả sử rằng bạn có đối tượng (doituong) bạn có được bằng cách nào thì tùy. Muốn lấy thông tin từ nó bạn phải làm việc giống như là mở cửa bước vào trong phòng. Dùng hàm enteget:
(setq laynoidung (entget doituong))
Khi đã vào phòng thì có nhiều thứ để lấy. Mổi thông tin của đối tượng có 1 con số đại diện ví dụ điểm canh lề thứ nhất của text là số 10. Dùng hàm cdr và assoc sẽ lấy được thông tin tương ứng với con số đó.
(setq diemve (cdr (assoc 10 laynoidung)))
Mình sẽ gỏ lại bảng các số đại diện như từ điển bạn cần thông số gì thì vào tra nhé. (Một vài cái hay dùng thôi chứ nhiều lắm mình gỏ không nổi, bạn mua sách về lisp sẽ có bảng này).

CHUNG:
Layer của đối tượng: 8
Kiểu của đối tượng: 0
Màu của đối tượng: 62
Tên dạng đường: 6

TEXT:
Nội dung text: 1
Độ lớn text: 40
Style: 7
Điểm canh lề thứ nhất: 10

BLOCK: (INSERT) Lưu ý block thì trong từ điển của cad là đối tượng INSERT
Tên BLOCK: 2
Điểm chèn: 10
Góc quay: 50
Tỉ lệ theo trục X: 41
Tỉ lệ theo trục Y: 42
Tỉ lệ theo trục Z: 43

LINE:
Điểm đầu: 10
Điểm cuối: 11

CIRCLE:
Tọa độ tâm: 10
Bán kính: 40

PLINE: (LWPOLYLINE)
Độ rộng: 43
Số lượng đỉnh: 90

DIMENSION:
Style: 3

Vậy cách lấy thông tin text như sau:
Nội dung text: (setq noidung (cdr (assoc 1 laynoidung)))
Độ lớn text: (setq dolon (cdr (assoc 40 laynoidung)))
Style: (setq style (cdr (assoc 7 laynoidung)))
Điểm canh lề thứ nhất: (setq diemve (cdr (assoc 10 laynoidung)))

2 nhận xét:

  1. chào anh! em moi hoc list cad thoi nhưng e rất mê. nhưng e muôn viết một list ghi cao đô ma no cư lổi hoai a giup e voi. khi chạy chương trình cho phép minh nhập một cao độ so sánh và click mọt doạn thẳng kết quả là mọt dòng text co giá tri = cao độ so sanh + chieu dai đoạn thẳng đó.
    Cảm on anh trước nha!

    Trả lờiXóa
  2. Đây không phải nơi nhờ viết lisp nhé.

    Trả lờiXóa

Khi viết nhận xét mong bạn không đứng vai trò nặc danh! Bạn có thể chọn Name/Url trong đó Url là http://duy782006.blogspot.com/ như vậy hay hơn nặc danh bạn nhé.