Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
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
redsea_tq    13

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
lp_hai    207

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
redsea_tq    13

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.

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
Tue_NV    3.841

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
ketxu    2.649
(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
Tue_NV    3.841

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)

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

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

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
redsea_tq    13

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
tonglao09    2

 

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

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

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
pphung183    425

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

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


×