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

xin các pro viết giùm lisp tính trung bình cộng các Dimmension

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

17 giờ trước, thanhdatx2bk đã nói:

TB DIM



(defun c:tbd ( / lst tong averageDim i j)
(vl-load-com)
(command "-style" "TBDim" ".Vntime" "2" "1" "0" "NO" "NO")
(setq lst (acet-ss-to-list (ssget '((0 . "DIMENSION")))))
(setq     tong 0
        j 0)
(foreach i lst
(setq dimValue (cdr (assoc 42 (entget i))))
(setq tong (+ tong dimValue))
(setq j (+ j 1))
)
(setq averageDim (/ tong j))
(command ".-text" (getpoint "Chon diem ghi text") "0" (rtos averageDim 2 2))
)

TBD.lsp

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
1 giờ} trướ}c, doductiep đã nói:

Nên có thêm trường hợp Dim bị sửa số. Và có thêm trường hợp chọn mẫu Text để ghi sẽ tốt hơ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
5 giờ trước, Danh Cong đã nói:

Nên có thêm trường hợp Dim bị sửa số. Và có thêm trường hợp chọn mẫu Text để ghi sẽ tốt hơn.

Khán giả chưa yêu cầu mà chiều theo thì  hơi khó bác ah

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ác Đỗ Đức Tiệp xem lại giúp em với, sao em nhấn lênh tbd , quét chọn 2 dimmension , nó hiện lên các lệnh chọn điểm text, chiều cao text, góc text, sau đó đến enter tex, lúc này mình nhập bao nhiêu là nó ra kết quả đó luôn, ko phải ra trung bình cộng 2 dim em vừa chọn

  • 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
15 giờ trước, thanhdatx2bk đã nói:

Bác Đỗ Đức Tiệp xem lại giúp em với, sao em nhấn lênh tbd , quét chọn 2 dimmension , nó hiện lên các lệnh chọn điểm text, chiều cao text, góc text, sau đó đến enter tex, lúc này mình nhập bao nhiêu là nó ra kết quả đó luôn, ko phải ra trung bình cộng 2 dim em vừa chọn

Góp vui:

(defun c:test (  / DXF GIATRI N NAME OBJ PT SUM TEXT)
  (setq obj (ssget '((0 . "DIMENSION")))
    n (sslength obj)
    Sum 0.0)
  (repeat (sslength obj)
        (progn
          (setq name (ssname obj 0)
              dxf (entget name))
          (if (= (cdr (assoc 1 dxf)) "")     (setq giatri  (cdr (assoc 42 dxf)))
                          (setq giatri (atof (cdr (assoc 1 dxf)))))
          (setq Sum (+ Sum Giatri)) 
        (ssdel name obj)
          );end progn
    );end repeat
    (princ (strcat "\nGia Tri Trung Binh = " (rtos (/ Sum n) 2 2)))
  (setq Text (entget (car (entsel "\nChon Text Mau")))
    pt (getpoint "\nChon Diem Chen Text"))
  (Entmake
    (list
          (cons 0 "Text")
          (cons 1 (strcat "Gia Tri Trung Binh = " (rtos (/ Sum n) 2 2)))
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbText")
          (assoc 8 Text)
          (assoc 7 Text)
          (cons 10 pt)
          (cons 11 pt)
          (assoc 40 Text)
          (assoc 50 Text)
          (assoc 71 Text)
          (assoc 72 Text)
          (cons 73 0)
          ))
    (princ))

  • 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

Cảm ơn bác Danh Cong, thật tuyệt vời, đúng là ra kết quả trung bình. Nhưng em muốn thay đổi cách trình bày kết quả được không bác. 
VD: Quét chọn 2 dimension có kích thước là 1000 và 3000, khi dùng lisp của bác sẽ cho ra kết quả là : Gia tri trung binh = 2000.00
Giờ em muốn thay đổi cách hiển thị kết quả thành: (1000+3000)/2=2000. 
Trông cậy vào bác 
Trân trọng và cảm ơn

  • 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 11/8/2018 tại 17:59, thanhdatx2bk đã nói:

VD: Quét chọn 2 dimension có kích thước là 1000 và 3000, khi dùng lisp của bác sẽ cho ra kết quả là : Gia tri trung binh = 2000.00
Giờ em muốn thay đổi cách hiển thị kết quả thành: (1000+3000)/2=2000. 

Code lại:

(defun c:GTTB ( / DXF GIATRI I LISTNAME N NAME OBJ PT STRINGNAME SUM TEXT)
  (setq obj     (ssget '((0 . "DIMENSION")))
        n     (sslength obj)
        Sum 0.0
    i 1
    Listname '()
    Stringname "")
  (repeat (sslength obj)
        (progn
          (setq name     (ssname obj 0)
                  dxf     (entget name))
          (if (= (cdr (assoc 1 dxf)) "")     (setq giatri  (cdr (assoc 42 dxf)))
                          (setq giatri (atof (cdr (assoc 1 dxf)))))
          (setq Sum (+ Sum Giatri)
        Listname (append Listname (list (rtos Giatri 2 0))))
        (ssdel name obj)
          );end progn
    );end repeat
  ;(princ (strcat "(" Stringname ")/" (rtos n 2 0) (rtos (/ Sum n) 2 2)))
  (setq Stringname (strcat Stringname (nth 0 Listname)))
  (repeat (- n 1)
        (setq Stringname (strcat Stringname "+" (nth i Listname))
          i (+ i 1)))
   (princ Stringname)
        
  (setq Text (entget (car (entsel "\nChon Text Mau")))
    pt (getpoint "\nChon Diem Chen Text"))
  (Entmake
    (list
          (cons 0 "Text")
          (cons 1 (strcat "(" Stringname ")/" (rtos n 2 0) "=" (rtos (/ Sum n) 2 0)))
          (cons 100 "AcDbEntity")
          (cons 100 "AcDbText")
          (assoc 8 Text)
          (assoc 7 Text)
          (cons 10 pt)
          (cons 11 pt)
          (assoc 40 Text)
          (assoc 50 Text)
          (assoc 71 Text)
          (assoc 72 Text)
          (cons 73 0)
          ))
    (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

×