Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
lp_hai

chọn textsize và font

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

Chúc mọi người cuối tuần dzui dze! heee

hôm wa nhờ anh Tue_NV dẫn đường nen em viết được cái lisp cộng các số lại với nhau

 

 

(defun c:NN()

(setq ssdt (ssget '((0 . "TEXT"))))

(defun gt1(ent)

(setq

so (atof(cdr(assoc 1 (entget ent)))))

)

(setq

sodoituong (sslength ssdt)

index 0

gtt 0

)

(repeat sodoituong

(setq

ent_ht (ssname ssdt index)

index (1+ index)

so (gt1 ent_ht)

gtt (+ gtt so)

)

)

(setq tong (rtos gtt 2 0))

(setq th (getvar "textsize"))

(setq p1 (getpoint "\ndiem dat chu:"))

(setq cao (getdist (strcat "\nChieu cao chu<"(rtos th)">:")))

(if (= cao nil) (setq cao th))

(command "text" "m" p1 cao "0" tong "")

(setvar "textsize" th)

(princ gtt)

(princ)

)

 

theo lisp ở tren thì text ghi kết quả là font hiện hành, textsize tùy chọn (mặc định là textsize hiện hành)

em muốn font và text size được lấy theo đối tượng đầu tiên được chọn để cộng. các pro chỉ jùm em nha!

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 mọi người cuối tuần dzui dze! heee

hôm wa nhờ anh Tue_NV dẫn đường nen em viết được cái lisp cộng các số lại với nhau

 

theo lisp ở tren thì text ghi kết quả là font hiện hành, textsize tùy chọn (mặc định là textsize hiện hành)

em muốn font và text size được lấy theo đối tượng đầu tiên được chọn để cộng. các pro chỉ jùm em nha!

 

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)))

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 mọi người cuối tuần dzui dze! heee

hôm wa nhờ anh Tue_NV dẫn đường nen em viết được cái lisp cộng các số lại với nhau

(defun c:NN()

(setq ssdt (ssget '((0 . "TEXT"))))

(defun gt1(ent)

(setq

so (atof(cdr(assoc 1 (entget ent)))))

)

(setq

sodoituong (sslength ssdt)

index 0

gtt 0

)

(repeat sodoituong

(setq

ent_ht (ssname ssdt index)

index (1+ index)

so (gt1 ent_ht)

gtt (+ gtt so)

)

)

(setq tong (rtos gtt 2 0))

(setq th (getvar "textsize"))

(setq p1 (getpoint "\ndiem dat chu:"))

(setq cao (getdist (strcat "\nChieu cao chu:")))

(if (= cao nil) (setq cao th))

(command "text" "m" p1 cao "0" tong "")

(setvar "textsize" th)

(princ gtt)

(princ)

)

 

theo lisp ở tren thì text ghi kết quả là font hiện hành, textsize tùy chọn (mặc định là textsize hiện hành)

em muốn font và text size được lấy theo đối tượng đầu tiên được chọn để cộng. các pro chỉ jùm em nha!

1. Hàm ssget chọn đối tượng theo 1 trật tự :

-> Đối tượng nào sinh ra sau thì chọn trước -> Khi chọn trong 1 cửa sổ "W"

-> Đối tượng nào Pick trước thì chọn trước -> khi chọn theo kiểu Pick

-> Đối tượng nào cắt qua trước thì chọn trước -> khi chọn theo kiểu giao với đường thẳng (hàm ssget với tham số "f")

 

Thế này nhé-> Bạn chọn 1 Text mẫu -> Sau đó chọn tập đối tượng ssget theo cửa sổ

-> Lisp thực hiện phép tính và ghi kết quả font và text size theo text mẫu

  • 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

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
Đăng nhập để thực hiện theo  

×