Đến nội dung


Hình ảnh
- - - - -

chọn textsize và font


  • Please log in to reply
2 replies to this topic

#1 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 05 June 2010 - 09:30 AM

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!
  • 0
Hình đã gửi

#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 05 June 2010 - 10:15 AM

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

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 June 2010 - 10:19 AM

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!

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
  • 1