Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
18 replies to this topic

#1 trungthanh050983

trungthanh050983

    biết pan

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

Đã gửi 19 July 2012 - 10:40 AM

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

#2 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 19 July 2012 - 02:20 PM

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

#3 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 19 July 2012 - 02:23 PM

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

  • 1
Hình đã gửi

#4 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 19 July 2012 - 05:57 PM

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

#5 trungthanh050983

trungthanh050983

    biết pan

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

Đã gửi 20 July 2012 - 11:06 AM

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 đỡ
  • 0

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 20 July 2012 - 11:16 AM

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

  • 2

#7 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 20 July 2012 - 11:18 AM


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

  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 trungthanh050983

trungthanh050983

    biết pan

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

Đã gửi 20 July 2012 - 12:00 PM

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

#9 trungthanh050983

trungthanh050983

    biết pan

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

Đã gửi 27 July 2012 - 02:41 PM

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

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 July 2012 - 02:57 PM

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

#11 trungthanh050983

trungthanh050983

    biết pan

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

Đã gửi 27 July 2012 - 04:02 PM

Bạn thay chổ :
(Rtos (gt1 ent) )
thành :
(Rtos (gt1 ent) 2 2)

OK. Cam on ban rat nhieu.
  • 0

#12 MrHienNo1

MrHienNo1

    Chưa sử dụng CAD

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

Đã gửi 28 July 2012 - 10:19 PM

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

#13 MrHienNo1

MrHienNo1

    Chưa sử dụng CAD

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

Đã gửi 28 July 2012 - 10:20 PM

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

#14 redsea_tq

redsea_tq

    biết lệnh erase

  • Members
  • PipPipPip
  • 107 Bài viết
Điểm đánh giá: 13 (tàm tạm)

Đã gửi 29 July 2012 - 10:10 AM

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

#15 trungthanh.hvac

trungthanh.hvac

    Chưa sử dụng CAD

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

Đã gửi 13 December 2012 - 02:29 PM

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

#16 tonglao09

tonglao09

    biết zoom

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

Đã gửi 05 June 2014 - 05:42 PM

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


  • 0

#17 hieuhx68

hieuhx68

    biết vẽ circle

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

Đã gửi 15 December 2014 - 08:30 PM

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 ạ.


  • 0

#18 hung09kt

hung09kt

    Chưa sử dụng CAD

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

Đã gửi 26 August 2015 - 07:22 AM

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 ạ


  • -1

#19 pphung183

pphung183

    biết dimstyle

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

Đã gửi 26 August 2015 - 12:10 PM

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ư ý  :)


  • 0