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

Lisp Thống Kế Thép Bằng Block.

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

 

Hay quá a Duy ơi ^^ 

 

Em thấy các giá trị nhập vào bảng thống kê thì nên khống chế giá trị nhập  phải là number và các đường kính thép phải nằm trong tiêu chuẩn (vd 6,8,10..chấp nhận còn 7,9,11,13 thì không được )Như vậy thì tốt hơn a ạ.

 

 

Thanks a!

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

Thực chất lisp này up lên  là  để bạn tham khảo vì thấy bạn cũng đang viết. Mình chỉ viết thế thôi. Không muốn chĩnh sửa gì nửa lười lắm.

  • 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

Em cảm ơn a,lâu ni em cũng đang nghiên cứu cái thống kê này ^^

Giờ Có đoạn Lisp này của a thì còn gì bằng ^^ Hi vọng mót được ít  ^^

Chúc anh mạnh giỏi và thành công trong cuộc sống !

Thâ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

Thấy Bạn duy782006 tặng diễn đàn 1 lisp hết sức công phu, mình cũng viết 1 lisp hỗ trợ sửa Bảng thống kê từ Lisp duy782006 :)

tặng các bạn yêu thích Lisp :) :

(defun c:TKTE (/ cmd GetTLDV GetDai GetTag PutTag ent at obj tn Dai km n k)
(setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0)
(defun GetTLDV(D)
(cond ((= D 6) 0.222) ((= D 8) 0.395) ((= D 10) 0.617) ((= D 12) 0.888) ((= D 14) 1.209)
((= D 16) 1.579) ((= D 18) 1.998) ((= D 20) 2.467) ((= D 22) 2.985) ((= D 24) 3.552)
((= D 25) 3.854) ((= D 26) 4.169) ((= D 28) 4.835) ((= D 30) 5.55) ((= D 32) 6.315)
((= D 34) 7.129) ((= D 36) 7.992) ((= D 40) 9.867) )) ;;;;;
(defun GetDai (obj / Tag Val l lst)
(foreach att (vlax-invoke obj 'GetAttributes) 
(setq Tag (vla-get-TagString att)) (setq Val (vla-get-TextString att))
(if (or (eq Tag "KT1") (eq Tag "KT2") (eq Tag "KT3") (eq Tag "KTA1")
(eq Tag "KTA2") (eq Tag "KTB1") (eq Tag "KTB2") (eq Tag "KTC1") 
(eq Tag "KTC2") ) (setq l (atof Val) lst (cons l lst)) )) lst) ;;;;;
(defun GetTag (obj tag)
(vl-some '(lambda (att) (if (= tag (vla-get-tagstring att)) (vla-get-textstring att)))
(vlax-invoke obj 'getattributes)) ) ;;;;;
(defun PutTag (obj tag tn)
(vl-some '(lambda (att) (if (= tag (vla-get-tagstring att)) (vla-put-textstring att tn)))
(vlax-invoke obj 'getattributes)) ) ;;;;;
(setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) 
(while (and (/= (setq ent (entsel "\nSelect Block Attribute for edit: ")) nil) 
(setq at (car (nentselp (cadr ent))) obj (vlax-ename->vla-object (car ent))) )
(setq tn (lisped (vla-get-TextString (setq at (vlax-ename->vla-object at)))))
(vla-put-TextString at tn) (setq Dai (apply '+ (GetDai obj)))
(PutTag obj "CD" (rtos Dai 2 0))
(setq km (GetTLDV (atoi (GetTag obj "PI")))) (setq n (atof (GetTag obj "SL")))
(setq k (atof (GetTag obj "SCK"))) (setq tn1 (/ (* Dai n k) 1000))
(setq tn2 (* tn1 km)) (PutTag obj "TCDCK" (rtos tn1 2 2)) 
(PutTag obj "TLCK" (rtos tn2 2 2)) (vla-Update obj) ) 
(setvar "cmdecho" cmd) (princ))

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

Trong lisp của duy đã có sửa thống kê rồi mà nhỉ?

Vâng, mình biết là (c:edt) :) . Nhưng thực tế là có rất nhiều kiểu thống kê từ BlockAtt... muôn hình muôn vê... Nếu muốn sửa mà lấy code của Bạn thì chắc là nổ tung đầu để tìm :D . Từ code lisp của mình thì các bạn biết Lisp chỉ cần thay các Tag theo Bản thống kê hiện có là Ok. Ở đây mình lấy Tag  BlockAtt của Bạn làm điển hì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

Không hiều ý bạn lắm.

-Nguyên tắc đặt tên tag của mình là cứ tag bắt đầu bằng KT thì là kích thước. và có hàn com chịu trách nhiệm lọc hết các tag có 2 ký tự bắt đầu là KT và cộng lại là ra giá trị chiều dài thanh.

-Sở dĩ có KT, KTA, KTB, KTC vì là nếu là 3 ký tự đầu là có hàm lọc 3 ký tự đầu dùng để hỏi nhập giá trị 1 lần và gán cho nhiều vị trí nếu tag có ký tự ban đầu theo quy định.

 -Ko có gì phài nổ tung cả chẳng qua mình gom rất nhiều hàm con phục vụ cà hộp thoại, và vân vân nên nó 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

Không hiều ý bạn lắm.

-Nguyên tắc đặt tên tag của mình là cứ tag bắt đầu bằng KT thì là kích thước. và có hàn com chịu trách nhiệm lọc hết các tag có 2 ký tự bắt đầu là KT và cộng lại là ra giá trị chiều dài thanh.

-Sở dĩ có KT, KTA, KTB, KTC vì là nếu là 3 ký tự đầu là có hàm lọc 3 ký tự đầu dùng để hỏi nhập giá trị 1 lần và gán cho nhiều vị trí nếu tag có ký tự ban đầu theo quy định.

 -Ko có gì phài nổ tung cả chẳng qua mình gom rất nhiều hàm con phục vụ cà hộp thoại, và vân vân nên nó thế. 

Bạn xem Link này sẽ hiểu ý mình :)

http://www.cadviet.com/forum/topic/120498-nho-sua-lisp-thong-ke-cot-thep/

Đây là bản vẽ Bảng TK cũng dùng BlockAtt có nhiều Tag và còn nhiều loại nữa .... :)

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 Duy viết lisp này rất hay nhưng cho mình hỏi có cách nào để chọn font chữ và layer cho bảng thống kê theo bản vẽ của mình (font khác font của 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

Cái lisp của bác công nhận nhanh và rất là tiện lợi, kết hợp với lisp của bác @pphung183 thì công việc thống kê khá nhanh. Bác chỉnh sửa thêm đoạn nối thép khi chiều dài nối lớn hơn 11,7 thì tốt biết mấy, em hiện làm thủ công, tổng hợp vẫn đúng :-D

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:capnhattkt ()
(setq daithanhtong 0.0)
(setq dskichthuoc (duy:block_d_att>ds_loctentag dtc "KT"))
(foreach tentag dskichthuoc
(setq daithanhtong (+ daithanhtong (atoi (duy:block_d_att>ten dtc tentag))))
)

(setq pilon (atoi (duy:block_d_att>ten dtc "PI")))

(cond
((> pilon 8) 

(cond
((> (/ daithanhtong 11700) 1) 
(setq daithanhtong (+ daithanhtong (* (fix (/ daithanhtong 11700)) 30 pilon)))
)
)


)
)

(setq soluongthanh (atoi (duy:block_d_att>ten dtc "SL")))
(setq daithanhtongnhan (* soluongthanh daithanhtong))
(setq soluongcaukien (atoi (duy:block_d_att>ten dtc "SCK")))

(setq trongluong (/ (* (/ pilon 2) (/ pilon 2) 3.1416 daithanhtongnhan 7.86) 1000000)  )
(duy:block_s_att dtc "CD" (rtos daithanhtong 2 0))
(duy:block_s_att dtc "TCDCK" (rtos (/ (* daithanhtongnhan soluongcaukien) 1000.0) 2 2))
(duy:block_s_att dtc "TLCK" (rtos (* trongluong soluongcaukien) 2 2))
(duy:rungmh)

(princ)
)

Cũng nhiều bạn yêu cầu dụ này nên mình đã viết rồi. Bạn chép đè lại hàm capnhattkt này vào lisp là ok.

  • 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

Khi viết vì không tính phổ biến và kinh doanh nên không chuẩn bị chức năng này. Chỉ có thể thêm bằng tay của mình. Cần thêm cái nào thì úp lên khi nào rãnh mình thên cho (nhấn mạnh là khi nào rãnh 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

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

×