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

[Đã xong] Lisp tính toán công thức toán học của đối tượng text

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

Mình đang cần một List bạng bảng tính như trong Excel không biết các bác có thể ra tay giúp được không!!??. mình thường xuyên phải thống kê cốt thép trong bản vẽ xây dựng, mỗi lần vậy đều phải copy text, rồi bấm máy tính cầm tay, rồi lại edittext v.v. làm một bảng thống kê thép mất cả ngày trời, vừa mệt mà còn lộn lung tung nưa. Vì vậy không biết có list dạng giống như bảng tính như trong Excel, chỉ cần nhập hai hoặc ba cột dữ liệu ban đầu thôi, còn các cột còn lại sẽ tự link và thống kê lại từng loại thép không ha!?? chắc là khó lắm nhưng mình cứ nêu ra đây để các bạn cho ý kiến nha! mong các bác giúp dùm mì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

Tại sao bạn không sử dụng bảng (table) trong AutoCAD? đối tượng này giống hệt excel. Chi tiết, xin xem thêm bài viết của bemove tại: http://www.cadviet.com/forum/index.php?sho...0entry869

 

Nếu đó vẫn chưa phải là câu trả lời thì không rõ đối tượng của bạn là gì, Text hay block attribute? Nếu bạn thống kê không sử dụng lisp, bạn có thể dùng chức năng table rất dễ dàng (như đã nói ở trên). Còn nếu bạn thống kê có sử dụng lisp, tại sao bạn không chèn công thức trong mã lệnh lisp luôn (các chương trình lisp thống kê thường tích hợp vào luôn)/

 

Nếu các cách trên vẫn chưa phải là mục đích của bạn, bạn hãy nêu rõ hơn nữa về yêu cầu của bạn.

 

----------------------------------------------

Nhân đây, có 1 lisp có thể tính toán hiệu quả giá trị của text trong AutoCAD xin tặng các thành viên cadviet:

 

(defun c:caltxt	( / ent tt old new gt gtm kq)  
 (setq	ent (car (entsel "\nHay pick vao 1 doi tuong text: "))
tt  (entget ent)
old (assoc 1 tt)
gt  (cdr old)
 )
 (if (setq kq (c:cal gt))
   (progn      
     (setq
gtm (rtos kq)
new (cons 1 gtm)
tt  (subst new old tt)
     )
     (entmod tt)
     (princ "\nText da duoc sua gia tri!")
   )
   (princ "\nText chua cong thuc sai!")
 )  
 (princ)
)

lisp này với lệnh caltxt có tác dụng thay thế một đối tượng text chứa công thức bằng giá trị của công thức đó.

VD: text có giá trị: (1+2-3+4*5)/6 sẽ được thay bằng 3.3333

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

Nhân đây, có 1 lisp có thể tính toán hiệu quả giá trị của text trong AutoCAD xin tặng các thành viên cadviet:

 

(defun c:caltxt	( / ent tt old new gt gtm kq)  
 (setq	ent (car (entsel "\nHay pick vao 1 doi tuong text: "))
tt  (entget ent)
old (assoc 1 tt)
gt  (cdr old)
 )
 (if (setq kq (c:cal gt))
   (progn      
     (setq
gtm (rtos kq)
new (cons 1 gtm)
tt  (subst new old tt)
     )
     (entmod tt)
     (princ "\nText da duoc sua gia tri!")
   )
   (princ "\nText chua cong thuc sai!")
 )  
 (princ)
)

lisp này với lệnh caltxt có tác dụng thay thế một đối tượng text chứa công thức bằng giá trị của công thức đó.

VD: text có giá trị: (1+2-3+4*5)/6 sẽ được thay bằng 3.3333

 

 

Ssg xin bổ sung một chút:

Nếu bạn mới khởi động Acad và chưa gọi Command: Cal lần nào, hàm C:caltxt không thể thực hiện được mã lệnh (c:cal gt) và báo error (Cad 2002 báo "too many arguments"; Cad 2007 báo "no function definition: C:CAL").

Nguyên nhân:

Hàm C:CAL được lập bởi geomcal.arx. Khi người dùng mới khởi động Acad và chưa gọi lệnh Command: Cal lần nào, geomcal.arx chưa được load vào memory. Đây là cách mà Acad sử dụng tiết kiệm memory, cái nào chưa cần thì không cho autoload khi khởi động.

Khắc phục:

Thêm vào đầu chương trình đoạn: (if (not cal) (arxload "geomcal"))

  • 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

Giới hạn là 65536:
 
1.000.000+1.000.000 = 2.000.000 = 31*65536 + (-31616)
 
Có cao thủ nào nghĩ cách không bị cái hạn chế này nữa không.
 
Gửi các bác cái lisp modify có thêm chức năng đổi 'x' thành '*' và lựa chọn số dấu phẩy hiển thị:

(if (not cal) (arxload "geomcal")) 

(defun c:caltxt	( / ent tt old new gt gtm kq )    
(setq	ent (car (entsel "\nHay pick vao 1 doi tuong text: "))	tt  (entget ent)	old (assoc 1 tt)	gt  (cdr old)  )  
  
(if (setq kq (c:cal (vl-string-translate "x" "*" gt)  ))    (progn  

  (if (not ssle) (setq ssle 0))
  (setq ssle1 (getint (strcat "\nSo so le <" (itoa ssle) ">: ")))
  (if ssle1 (setq ssle ssle1)) 
  
(setq	gtm (rtos kq 2 ssle)	new (cons 1 gtm)	tt  (subst new old tt)      )      
;; (rtos kq 2 2)
(entmod tt)      
(princ "\nText da duoc sua gia tri!")    
)    
(princ "\nText chua cong thuc sai!")  
)    (princ))

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  

×