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.
Đăng nhập để thực hiện theo  
toana3

[Xin] Lisp cộng Dimension

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

toana3    0

Em làm cái quy hoạch thoát nước .Khi ghi chiều dài cống em ghi bằng Dimension .Nghe có lisp tính tổng chiều dài theo Dimension nhưng tìm hoài mà không thấy .Bác nào có hay viết được chỉ giùm em cái .Cảm ơn Cadviet 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
dkkx3a    58

Bạn nói rõ hơn, có phải cộng các số kết quả trong dimension phải không, Các dimension của bạn có ghi chú không?, nói chung là cho anh em xem file cad của bạn thì mới giúp đượ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
thanhlamct    70

Mình thường làm thế này: coppy các Dim ra rồi explode thành các text. Rồi dùng Lisp cộng Text có trong diễn đàn cộng lại là OK.

Nếu có lisp cộng cả Dim nữa thì tuyệt quá. Nhờ các cao thủ.

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ình thường làm thế này: coppy các Dim ra rồi explode thành các text. Rồi dùng Lisp cộng Text có trong diễn đàn cộng lại là OK.

Nếu có lisp cộng cả Dim nữa thì tuyệt quá. Nhờ các cao thủ.

Đây nè bạn :

Bai viet so 2082 - Viet lisp theo yeu cau

  • 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
thanhlamct    70

Cảm ơn bác Tue_NV.

Bác có thể nâng cấp thêm một chút là cộng Dim theo Style được không?

Ví dụ như trong bản vẽ em có nhiều Dim style như trong file em gửi kèm. Em chỉ muốn cộng những Dim của từng Style một thôi.

File: http://www.cadviet.com/upfiles/2/congdim.dwg

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 bác Tue_NV.

Bác có thể nâng cấp thêm một chút là cộng Dim theo Style được không?

Ví dụ như trong bản vẽ em có nhiều Dim style như trong file em gửi kèm. Em chỉ muốn cộng những Dim của từng Style một thôi.

File: http://www.cadviet.com/upfiles/2/congdim.dwg

Bạn thay dòng này trong code :

(setq ss (ssget '((0 . "DIMENSION"))))

 

Bằng dòng này :

(setq ss (ssget (list (cons 0 "DIMENSION")

(assoc 3 (entget(car(entsel "\n Pick chon DIMENSION mau :"))))

)

)

)

  • 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
bosstuyentn    1
Em làm cái quy hoạch thoát nước .Khi ghi chiều dài cống em ghi bằng Dimension .Nghe có lisp tính tổng chiều dài theo Dimension nhưng tìm hoài mà không thấy .Bác nào có hay viết được chỉ giùm em cái .Cảm ơn Cadviet rất nhiều .

 

Lần truớc mình cũng tìm lisp tính tổng chiều dài, ko phải đo từng đoạn rùi cộng lại, kể cả cong hay thẳng. không biết có phải bạn tìm cái này ko.

Tinh Tong line

Cách dùng : sau khi load chỉ cần gõ lệnh " tl " và click vào đối tuợng và enter sẽ thông báo chiều dài của đối tuợng

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
tvgtyb08    10

Trước em thấy có lisp Congdim mà giờ không tìm thấy, em chỉ tìm thấy cái này

(defun c:Trudim(/ ss n i S duyet ent sst nt j St duyett entt Skq) (prompt "\n Chon cac Dim lam so bi tru :") (setq ss (ssget '((0 . "DIMENSION")))) (prompt "\n Chon cac Dim lam so tru :") (setq sst (ssget '((0 . "DIMENSION")))) (setq n (sslength ss) i 0 S 0 duyet 0) (setq nt (sslength sst) j 0 St 0 duyett 0) (while (< i n) (setq ent (entget(ssname ss i))) (if (= (cdr(assoc 1 ent)) "") (setq duyet (cdr(assoc 42 ent))) (setq duyet (atof(cdr(assoc 1 ent)))) ) (setq S (+ S duyet)) (setq i (1+ i)) ) (while (< j nt) (setq entt (entget(ssname sst j))) (if (= (cdr(assoc 1 entt)) "") (setq duyett (cdr(assoc 42 entt))) (setq duyett (atof(cdr(assoc 1 entt)))) ) (setq St (+ St duyett)) (setq j (1+ j)) ) (setq Skq (- S St)) (alert (rtos Skq 2 0)) (princ) ) 

Ai có lisp congdim cho em xin với.

Cảm ơ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
phamngoctukts    708

Trước em thấy có lisp Congdim mà giờ không tìm thấy, em chỉ tìm thấy cái này

(defun c:Trudim(/ ss n i S duyet ent sst nt j St duyett entt Skq) (prompt "\n Chon cac Dim lam so bi tru :") (setq ss (ssget '((0 . "DIMENSION")))) (prompt "\n Chon cac Dim lam so tru :") (setq sst (ssget '((0 . "DIMENSION")))) (setq n (sslength ss) i 0 S 0 duyet 0) (setq nt (sslength sst) j 0 St 0 duyett 0) (while (< i n) (setq ent (entget(ssname ss i))) (if (= (cdr(assoc 1 ent)) "") (setq duyet (cdr(assoc 42 ent))) (setq duyet (atof(cdr(assoc 1 ent)))) ) (setq S (+ S duyet)) (setq i (1+ i)) ) (while (< j nt) (setq entt (entget(ssname sst j))) (if (= (cdr(assoc 1 entt)) "") (setq duyett (cdr(assoc 42 entt))) (setq duyett (atof(cdr(assoc 1 entt)))) ) (setq St (+ St duyett)) (setq j (1+ j)) ) (setq Skq (- S St)) (alert (rtos Skq 2 0)) (princ) ) 

Ai có lisp congdim cho em xin với.

Cảm ơn!

Bạn thay dòng này:

(setq Skq (- S St)) thành (setq Skq (+ S St))

  • 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
ketxu    2.652

Bạn thử xem

(defun c:congdim(/ S)
(setq S 0) 
(foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
(setq S (+ S (cdr(assoc 42 (entget x)))))
)  
(alert (rtos S 2 0)) (princ))

  • Vote tăng 3

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
tvgtyb08    10

Bạn thử xem

(defun c:congdim(/ S)
(setq S 0) 
(foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
(setq S (+ S (cdr(assoc 42 (entget x)))))
)  
(alert (rtos S 2 0)) (princ))

Em cảm ơn các anh,

Nếu dùng lisp trudim rồi thay đoạn (setq Skq (- S St)) thành (setq Skq (+ S St)) thì khi bao hết DIM cần cộng lại nó ko ra kết quả mà phải Enter xong chọn tiếp 1 DIM nữa mới tính đượ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

Vì về cơ bản lisp trừ dim nó chọn 2 lần : lần 1 : các dim bị trừ (S), lần 2 : các dim trừ (St). Skq = S bị trừ - S trừ

(setq Skq (- S St))

Nếu thay dấu - thành dấu + thì vẫn phải thực hiện 2 lần chọn như thế, và ra kết quả tổng dim 2 lần chọ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
phamngoctukts    708

Vì về cơ bản lisp trừ dim nó chọn 2 lần : lần 1 : các dim bị trừ (S), lần 2 : các dim trừ (St). Skq = S bị trừ - S trừ

(setq Skq (- S St))

Nếu thay dấu - thành dấu + thì vẫn phải thực hiện 2 lần chọn như thế, và ra kết quả tổng dim 2 lần chọn :)

Hề hề!

Tại dạo này mình bận quá ngại viết lại nên sửa nhanh cho bạn như thế. Muốn chuẩn thì dùng lisp của ketxu bên trên là ngon rồi.

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
tvgtyb08    10

Hề hề!

Tại dạo này mình bận quá ngại viết lại nên sửa nhanh cho bạn như thế. Muốn chuẩn thì dùng lisp của ketxu bên trên là ngon rồi.

Em cảm ơn các anh.

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

cái này ý bác là cộng theo giá trị ghi trong DIMENSION hay giá trị thực tế, gặp bản vẽ ma số thì sao

Mã 42 là giá trị thực tế bạn ạ ^^, còn nếu gặp bản vẽ ma số thì tốt nhất dùng cộng text chứ khỏi cộng dim :)

( có thê kiểm tra mã dxf 1 để làm cơ sở ^^)

 

Sao em không cộng được nhỉ?

Ừ nhỉ, sao thế bạn nhỉ :rolleyes:

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
w1nDream    73

Bác Ketxu hãy phát triển thêm phần cho ghi ra text mới hoặc ghi đè text cũ (có thể lấy 2 số sau dấu phẩy), sau đó thì đổi mầu kết quả để dễ kiểm tra, và lúc đấy không cần phần alert nữa

Em nghĩ với các Lisp khác cũng vậy nên có lựa chọn và cách thay đổi kết quả để kiểm soát tốt hơn.TKs

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

Phần này trên 4r nhiều quá r mà, bạn cứ tìm lisp nào đó có hàm ghi text, sửa text mà dùng thui. ngày xưa mình k biết j về lisp cũng phải lần mò, hồi là ra, chứ gọi là phát triển ngại quá, khì

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
w1nDream    73

Tks bác đã để ý.Em cũng thử copy các đoạn mã gắn vào nhưng do mù tịt về lisp nên chưa ra được kết quả.

Nếu được bác làm VD cho e 1 cái rồi bôi màu đoạn code và hướng dẫn e 1 tí thì tuyệt.Em cũng hay thích chế các lisp từ lisp có sẵn để phù hợp với công việc của mình nhưng tài năng có hạn nên đôi lúc cũng là ăn may mới được.^^.mong bác và mọi người đừng cười.Hj

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

w1nDream không có gì khó đâu, mình cũng sửa lisp thôi mà, cái yêu cầu của bạn giống lisp tb hôm qua, bạn dựa vào đó sửa nhé

Mạo phép anh em tôi sửa như sau

Như vậy sự khác nhau ở đây:

;(alert (rtos S 2 0)) - Bo cai này

(Luachon S) - Them hàm này vào

Như vậy các lần sau bạn copy hàm Luachon vào lisp vào chỗ nào có kết quả thì hàm là:

(Luachon kq)

(defun c:congdim(/ S)
(setq S 0)
(foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
(setq S (+ S (cdr(assoc 42 (entget x)))))
) 
;(alert (rtos S 2 0))
(Luachon S)
(princ))
;Doan ma lua chon ghi ket qua
(defun Luachon(tbinh)
(setq Kieu (strcase (getstring "\nGhi ra Text co san <Co>/Khong: ")))
(Cond
((/= Kieu "K")
 (setq elst (entget (car (entsel "\n Thay cho so: "))))
 (setq elst (subst (cons 1 (rtos tbinh 2 2)) (assoc 1 elst) elst))
;; doan ma lisp chuyen mau ket qua tinh
(if (assoc 62 elst)
(setq elst (subst (cons 62 80) (assoc 62 elst) elst))
(setq elst (append elst (list (cons 62 80))))
)
(entmod elst)
(princ)
)
((= Kieu "K")
;--------------------------------------------
(setq point (getpoint "\n Chon diem ghi ket qua: "))
(setq th (getvar "textsize"))
(setq th (getstring (strcat "\nChieu cao chu <"(rtos th)"> :")))
(command "TEXT" point th 0 (rtos tbinh 2 2))
;(alert (strcat "Chieu dai trung binh cac doan vua chon: "(rtos tbinh 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
w1nDream    73

TKS anh Sơn nhé.Để em thử.Hj.Nhân tiện anh xem lại hộ em cái Lisp DAI nhé.Nó đang không ghi được kết quả anh à

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

Bạn nói rõ hơn, có phải cộng các số kết quả trong dimension phải không, Các dimension của bạn có ghi chú không?, nói chung là cho anh em xem file cad của bạn thì mới giúp được, ............!

mình vẽ shop muốn cộng tổng dim ghi vào text để ra chiều dài thanh thép tổng để thợ biết nó dài bao nhiêu.

153411_untitled.png

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

Chào các bác, bác nào có thể chỉnh giúp em từ lisp congdim bên trên sao cho giá trị được lấy là giá trị đã được làm tròn theo thiết lập trong dimstyle và chia cho 1000 (để đổi sang đơn vị m). Như lisp bên trên có hạn chế VD đường dim có chiều dài thực tế 1502 , nhưng khi thiết lập làm tròn trong dim Round off = 5 thì khi dim ra giá trị dim là 1500, khi ta dùng lisp cộng dim thì giá trị nó vẫn lấy là 1502, ở đây e muốn giá trị nó phải lấy là 1,5 ( giá trị cần lấy là 1500 mm và đã chia cho 1000 để quy đổi ra m ). Bác nào viết giùm em, e xin cảm ơn và hậu tạ :3

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

Đăng nhập để thực hiện theo  

×