Chuyển đến nội dung
Diễn đàn CADViet
trungthanh050983

[Yêu cầu] Lisp Cộng các số trong Dim thành một công thức

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

Mình là một thành viên mới mình đang cần 1 lisp cad để làm một việc sau nhờ các ban giúp đỡ:

- Trong quá trình làm hoàn công cần phải tính khối lượng đã thi công một hạng mục. Như vậy trong phần diễn giải khối lượng sẽ phải công các số trong Dim thành 1 công thức.

Xin cam ơn rất nhiều.!

  • Vote giảm 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

Mình là một thành viên mới mình đang cần 1 lisp cad để làm một việc sau nhờ các ban giúp đỡ:

- Trong quá trình làm hoàn công cần phải tính khối lượng đã thi công một hạng mục. Như vậy trong phần diễn giải khối lượng sẽ phải công các số trong Dim thành 1 công thức.

Xin cam ơn rất nhiều.!

 

Bạn hỏi thế thì làm sao mà anh em giúp bạn được. công thức của bạn yêu cầu thế nào (+,-,x,:...)? Một dim hay nhiều dim? đầu ra thế nào? Nói chung bạn phải đưa ra câu hỏi rõ ràng thì mới được. Bạn hỏi rõ ràng thì anh em giúp bạn sẽ đỡ mệt vì phải sửa cho đúng ý bạn.

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 là cộng dim ra con số tổng chứ hả? Code này chỉ cho ra kết quả tại dòng command line

(defun c:ccd(/ gtt dt sdt ent id)
 (setq dt (ssget '((0 . "DIMENSION")))
sdt (sslength dt)
id 0
gtt 0
)
 (repeat sdt
(setq
 	ent (ssname dt id)
     id (1+ id)
 	gtt (+ gtt (gt1 ent) )
 	)
)
 (princ gtt)
 (princ)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gt1(ent / so)
(if (wcmatch(cdr(assoc 1 (entget ent)))"")
 	(setq so (cdr(assoc 42 (entget ent))))
 	(setq so (atof(cdr(assoc 1 (entget ent)))))
 	)
)

  • 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

Mình nghĩ bạn ấy muốn cộng các giá trị độ dài trong đim lại thành 1 dãy số dạng: a+b+c+d... rồi đưa vào một ô nào đó trong excel để làm bảng khối lượng, cái này mình cũng đã áp dụng cho chương trình thống kê thép của mình, nhưng không thấy bạn ấy trả lời nên mình cũng chịu.

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

Mình nghĩ bạn ấy muốn cộng các giá trị độ dài trong đim lại thành 1 dãy số dạng: a+b+c+d... rồi đưa vào một ô nào đó trong excel để làm bảng khối lượng, cái này mình cũng đã áp dụng cho chương trình thống kê thép của mình, nhưng không thấy bạn ấy trả lời nên mình cũng chịu.

Cảm ơn mọi người đã quan tâm đến câu hỏi của mình.

Bạn Redsea_tq hiểu đúng ý mình, mình muốn cộng độ dài các dim thành một dãy số dim1+dim2+dim3+....

Nhờ mọi người giúp đỡ

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

Cảm ơn mọi người đã quan tâm đến câu hỏi của mình.

Bạn Redsea_tq hiểu đúng ý mình, mình muốn cộng độ dài các dim thành một dãy số dim1+dim2+dim3+....

Nhờ mọi người giúp đỡ

Trên cái Lisp mà bạn lp_hai đã viết, Tue_NV thêm thắt chút ít .

Xuất hiện hộp thoại -> Bạn nhấn Copy -> Paste vào ô trong Excel


(defun c:ccd(/ gtt dt sdt ent id str)
 (setq dt (ssget '((0 . "DIMENSION")))
sdt (sslength dt)
id 0
gtt 0
str "="
)
 (repeat sdt
(setq
  ent (ssname dt id)
     id (1+ id)
  gtt (+ gtt (gt1 ent) )
str (strcat str  (Rtos (gt1 ent)) "+")
  )
)
(Lisped (substr str 1 (1- (strlen str))))
 (princ gtt)
 (princ)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gt1(ent / so)
(if (wcmatch(cdr(assoc 1 (entget ent)))"")
  (setq so (cdr(assoc 42 (entget ent))))
  (setq so (atof(cdr(assoc 1 (entget ent)))))
  )
)

  • Vote tăng 2

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
(defun c:cdl(/ lst)
(cond ( (ssget (list (cons 0 "*DIMENSION")))
 (vl-load-com)
 (vlax-for objD (vla-get-ActiveSelectionSet  (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq lst (cons (vla-get-Measurement objD) lst))
 )
 (substr (apply 'strcat (mapcar '(lambda(x)(strcat "+" (vl-princ-to-string x) )) lst)) 2)
 )
))

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

Trên cái Lisp mà bạn lp_hai đã viết, Tue_NV thêm thắt chút ít .

Xuất hiện hộp thoại -> Bạn nhấn Copy -> Paste vào ô trong Excel


(defun c:ccd(/ gtt dt sdt ent id str)
 (setq dt (ssget '((0 . "DIMENSION")))
sdt (sslength dt)
id 0
gtt 0
str "="
)
 (repeat sdt
(setq
  ent (ssname dt id)
     id (1+ id)
  gtt (+ gtt (gt1 ent) )
str (strcat str  (Rtos (gt1 ent)) "+")
  )
)
(Lisped (substr str 1 (1- (strlen str))))
 (princ gtt)
 (princ)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gt1(ent / so)
(if (wcmatch(cdr(assoc 1 (entget ent)))"")
  (setq so (cdr(assoc 42 (entget ent))))
  (setq so (atof(cdr(assoc 1 (entget ent)))))
  )
)

Ok. đúng rồi.

Cảm ơn mọi người rất nhiều...

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

Ok. đúng rồi.

Cảm ơn mọi người rất nhiều...

M

Trên cái Lisp mà bạn lp_hai đã viết, Tue_NV thêm thắt chút ít .

Xuất hiện hộp thoại -> Bạn nhấn Copy -> Paste vào ô trong Excel


(defun c:ccd(/ gtt dt sdt ent id str)
 (setq dt (ssget '((0 . "DIMENSION")))
sdt (sslength dt)
id 0
gtt 0
str "="
)
 (repeat sdt
(setq
  ent (ssname dt id)
     id (1+ id)
  gtt (+ gtt (gt1 ent) )
str (strcat str  (Rtos (gt1 ent)) "+")
  )
)
(Lisped (substr str 1 (1- (strlen str))))
 (princ gtt)
 (princ)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gt1(ent / so)
(if (wcmatch(cdr(assoc 1 (entget ent)))"")
  (setq so (cdr(assoc 42 (entget ent))))
  (setq so (atof(cdr(assoc 1 (entget ent)))))
  )
)

 

Trên cái Lisp mà bạn lp_hai đã viết, Tue_NV thêm thắt chút ít .

Xuất hiện hộp thoại -> Bạn nhấn Copy -> Paste vào ô trong Excel


(defun c:ccd(/ gtt dt sdt ent id str)
 (setq dt (ssget '((0 . "DIMENSION")))
sdt (sslength dt)
id 0
gtt 0
str "="
)
 (repeat sdt
(setq
  ent (ssname dt id)
     id (1+ id)
  gtt (+ gtt (gt1 ent) )
str (strcat str  (Rtos (gt1 ent)) "+")
  )
)
(Lisped (substr str 1 (1- (strlen str))))
 (princ gtt)
 (princ)
 )
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gt1(ent / so)
(if (wcmatch(cdr(assoc 1 (entget ent)))"")
  (setq so (cdr(assoc 42 (entget ent))))
  (setq so (atof(cdr(assoc 1 (entget ent)))))
  )
)

Mình đã ap lisp của bạn vào trong cad và dùng rất hay. Nhưng mình xin làm phiền bạn một lần nữa.

Trong công thức mình muốn lấy giá trị làm tròn 2 chữ số làm tròn sau dấu phẩy có được không.

Ví dụ dãy công thức trong lisp của bạn hiện xuất ra là "60.3354+405.3438+26.0255"

Mình muốn nó chỉ đưa ra công thức : "60.34+405.34+26.03" .

Cảm ơn rất nhiều.

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

M

 

 

Mình đã ap lisp của bạn vào trong cad và dùng rất hay. Nhưng mình xin làm phiền bạn một lần nữa.

Trong công thức mình muốn lấy giá trị làm tròn 2 chữ số làm tròn sau dấu phẩy có được không.

Ví dụ dãy công thức trong lisp của bạn hiện xuất ra là "60.3354+405.3438+26.0255"

Mình muốn nó chỉ đưa ra công thức : "60.34+405.34+26.03" .

Cảm ơn rất nhiều.

Bạn thay chổ :

(Rtos (gt1 ent) )

thành :

(Rtos (gt1 ent) 2 2)

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

xin chào các bạn. Nếu mình muốn cộng nhiều đường Dim và pick chuột vào 1 điểm trên bản vẽ đưa ra tổng các đường Dim thì phải làm thế nào. Mong các bạn chỉ giáo.

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

xin chào các bạn. Nếu mình muốn cộng nhiều đường Dim và pick chuột vào 1 điểm trên bản vẽ đưa ra tổng các đường Dim thì phải làm thế nào. Mong các bạn chỉ giáo.

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

xin chào các bạn. Nếu mình muốn cộng nhiều đường Dim và pick chuột vào 1 điểm trên bản vẽ đưa ra tổng các đường Dim thì phải làm thế nào. Mong các bạn chỉ giáo.

Bạn có thể lần mò sửa lisp ở trên được đó, thay vì tạo dãy số bạn phải tạo một tong=tong + dim rồi thay vì in ra dòng command thì bạn thêm một lệnh pick điểm và thêm text vào điểm đó. Mình chỉ chuyên về vba nên không thể sửa lisp trên cho bạn được.

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

Bạn thay chổ :

(Rtos (gt1 ent) )

thành :

(Rtos (gt1 ent) 2 2)

Bạn có thể giúp mình thêm một lần nữa không.!

Mình muốn làm tròn số trong công thức cộng dim mà mình nhờ bạn lần trước thành 3 con số. Bạn giúp mình nhé. Cảm ơn bạn nhiều

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 là cộng dim ra con số tổng chứ hả? Code này chỉ cho ra kết quả tại dòng command line

(defun c:ccd(/ gtt dt sdt ent id)
  (setq dt (ssget '((0 . "DIMENSION")))
	sdt (sslength dt)
	id 0
	gtt 0
	)
  (repeat sdt
	(setq
  	ent (ssname dt id)
      id (1+ id)
  	gtt (+ gtt (gt1 ent) )
  	)
	)
  (princ gtt)
  (princ)
  )
;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun gt1(ent / so)
	(if (wcmatch(cdr(assoc 1 (entget ent)))"")
  	(setq so (cdr(assoc 42 (entget ent))))
  	(setq so (atof(cdr(assoc 1 (entget ent)))))
  	)
	)

Cái này hay nhưng có thể thêm chức năng xuất kết quả thay cho 1 text có sẵn không bạn? Nếu sửa dc thì cho mình xin lisp đó nhé. Thanks

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

xin chào các bạn. Nếu mình muốn cộng nhiều đường Dim và pick chuột vào 1 điểm trên bản vẽ đưa ra tổng các đường Dim thì phải làm thế nào. Mong các bạn chỉ giáo.

 

Hnay em mới đọc đến bài này. Mọi người giúp em bổ sung lips thêm yêu cầu là xuất ra text có sẵn hoặc tạo text mới với nội dung công text trên được ko ạ. text xuất ra có dạng : 60.3354+405.3438+26.0255 = Tổng giá trị.

Em cảm ơn nhiều ạ.

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ờ các bác giúp đỡ em với.

Sau khi sử dụng lips ccd ở trên. Nếu mình dùng với số lượng Dim lớn thì khi coppy qua excel sẽ bị lỗi, công thức bên excel không nhảy được. Các bác có cách gì để sửa lỗi trên không ạ

  • Vote giảm 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

Nhờ các bác giúp đỡ em với.

Sau khi sử dụng lips ccd ở trên. Nếu mình dùng với số lượng Dim lớn thì khi coppy qua excel sẽ bị lỗi, công thức bên excel không nhảy được. Các bác có cách gì để sửa lỗi trên không ạ

Lỗi là lỗi làm sao? Kiểm tra trong số đống dim đó có dạng như 200m hoặc D=200 không vì (atof "d=200") = 0 sẽ ko ra kết quả 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

Chắc là cộng dim ra con số tổng chứ hả? Code này chỉ cho ra kết quả tại dòng command line

(defun c:ccd(/ gtt dt sdt ent id)  (setq dt (ssget '((0 . "DIMENSION")))	sdt (sslength dt)	id 0	gtt 0	)  (repeat sdt	(setq  	ent (ssname dt id)      id (1+ id)  	gtt (+ gtt (gt1 ent) )  	)	)  (princ gtt)  (princ)  );;;;;;;;;;;;;;;;;;;;;;;;;;(defun gt1(ent / so)	(if (wcmatch(cdr(assoc 1 (entget ent)))"")  	(setq so (cdr(assoc 42 (entget ent))))  	(setq so (atof(cdr(assoc 1 (entget ent)))))  	)	)

bác có tính ra được giá trị trung bình luôn được không 

  • Vote giảm 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
Vào lúc 27/7/2012 tại 14:41, trungthanh050983 đã nói:

M

 

Mình đã ap lisp của bạn vào trong cad và dùng rất hay. Nhưng mình xin làm phiền bạn một lần nữa.

Trong công thức mình muốn lấy giá trị làm tròn 2 chữ số làm tròn sau dấu phẩy có được không.

Ví dụ dãy công thức trong lisp của bạn hiện xuất ra là "60.3354+405.3438+26.0255"

Mình muốn nó chỉ đưa ra công thức : "60.34+405.34+26.03" .

Cảm ơn rất nhiều.

Trước tiên mình chân thành cảm ơn tác giả đã viết một cái lisp rất hay cho a em sử dụng, và mình mong là các bạn hỗ trợ giúp mình chút vấn đề thế này. Giá trị của Dim minh đang cần xuất hiện là số chẵn 5 đơn vị, nghĩa là các Dim bây giờ đã được chỉnh giá trị Dim Round off là 5, lúc này chẳng hạn 1 dim có giá trị thực là 3252.89 sẽ hiển thị thành 3255, hoặc 2122.2-->2120, hoặc 5114.12-->5115  vậy giờ mình mong muốn là lisp sẽ đưa ra công thức xuất hiện: 3255+2120+5115=10490. Vì nhu cầu của mình là: bản vẽ mình tiếp nhận có sẵn Dim đã được làm như cách trên, và giờ tính khối lượng ống nước WC phải ra con số theo con số đã được làm tròn đó. Mình mong các cao nhân giúp mình chỉnh lại lisp theo hướng này với ạ. 
P/s: Nếu được thì có thể chỉnh cái giá trị làm tròn theo hướng người dùng được nữa thì quá hay ạ, giả sử nếu làm tròn là 10, hay số bất kì chỉ cần thay đổi giá trị thì quá tuyệt. Rất mong a Tuệ VN và các anh e giỏi lisp hô trợ viết giúp em với ạ !
E xin chân thành cảm ơn !

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

×