Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 trantrung78

trantrung78

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 13 March 2007 - 10:08 PM

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

#2 admin

admin

    Administrator

  • Root Admin
  • PipPipPipPip
  • 280 Bài viết
Điểm đánh giá: 484 (tốt)

Đã gửi 13 March 2007 - 10:54 PM

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...0&#entry869

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

#3 RaKk

RaKk

    biết zoom

  • Members
  • Pip
  • 11 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 15 March 2007 - 02:15 AM

Líp rất hay thanh ét min nhé
  • 0

#4 be_chanh

be_chanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1712 Bài viết
Điểm đánh giá: 889 (rất tốt)

Đã gửi 15 March 2007 - 02:27 AM

Thank Nguyễn Hoành, Đừng thank Admin :lol:
  • 0

t: 097.323.1199 | m: cudstk@gmail.com | w: http://www.aicollect.com


#5 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 15 March 2007 - 09:07 AM

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

#6 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 12 November 2014 - 09:41 AM

để chỉnh kết quả chỉ trả về sau dấu chấm 2 số thì sao bạn ví dụ: 1+2+3 <=> 6.00 thay cho 6.0000


  • 0

#7 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 12 November 2014 - 10:08 AM

Sửa  chỗ   (rtos kq)  thành  (rtos kq 2 2)


  • 1

#8 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 14 November 2014 - 11:37 AM

thank bác, nhưng 1.000.000+1.000.000 kết quả ra -31616.00, cái này có giới hạn hả bác


  • 0

#9 sans_amour

sans_amour

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 07 August 2015 - 03:49 PM

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

  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 07 August 2015 - 05:15 PM

Cuối cùng là bạn muốn cho hay muốn hỏi? Nếu hỏi thì chưa rõ bạn muốn hỏi gì.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.