Đến nội dung


Hình ảnh
- - - - -

Xin lisp tính chiều dài trung bình và DL của thanh thép biến thiên


  • Please log in to reply
47 replies to this topic

#21 ndtnv

ndtnv

    biết lệnh minsert

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

Đã gửi 17 October 2014 - 09:24 AM

Vài góp ý:

1.  dai1, dai2 phải làm tròn trước khi tính ltb

Tốt nhất là lưu dai1, dai2 dưới dạng số nguyên, dùng hàm sau để làm tròn:

 

(fix (+ (* dai 1000) 0.5))

 

2.  Kết quả xuất ra là sl, trong đó 14 là đường kính, không phải số thanh -1

(strcat (itoa sl) "`14,L = " (rtos ltb 2 0)))

 

3. Nên dùng hàm con để lấy dai1, dai2

 

4. Để nhập nhanh hơn, đổi thuật toán thành chọn tất cả các thanh, chương trình sẽ đếm số thanh, tìm dai1, dai2 thay vì phải pick 2 lần và nhập số thanh.

Dùng filter (8 . "Cot thep")


  • 1

#22 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 17 October 2014 - 12:46 PM

^^ thanhks anh ndtnv góp ý, ngành này nhoc cũng ko rành lắm nên chỗ thanh'14 nhoc ko pit là gì cứ nghĩ nó là (- sl 1) kaka, lúc xem file bạn đó trình bày nhoc cũng có ý tưởng như anh vậy, quét chọn rùi tính lun 1 lần, nhưng lại ko nghĩ ra giải thuật để làm vậy ^^, chọn thanh thuộc layer nào đó, lấy đc chiều dài từng line nhưng ko biết lọc min max = cách nào ^^, nên đành viết theo ý chang bạn đó trình bày thấy nó đơn giản hơn :)


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#23 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 18 October 2014 - 11:31 AM

114276_klkjhg.png

Nếu đơn vị tính là container thì lisp.ttl của anh Nhóc sai số sẽ tính bằng đơn vị xe cải tiến 2 bánh, một người kéo hai người đẩy! :) :) :)

Không hiểu bên Xây dựng dư nào, bên Cơ khí, khi cắt thép để đảm bảo kết cấu thì phải cắt thép theo chiều dài trung bình của đoạn thép và cắt vát 23°mới đảm bảo tiết kiệm thép mà không ảnh hưởng đến kết cấu.

 Bọn mình thiết kế tấm BTXM. Tại vị trí khúc cua sẽ có những tấm có hình thù cực kỳ kì dị, không cố định góc vát đâu bạn.

 

Ở lisp này thấy nhoc ko thể  hiện được kí hiệu fi gai (chỉ có ở bigfont) nhỉ? :)

Nếu số luong thanh muốn tính là 100 thì chẳng lẻ có fi gai = 99 :wacko:

Fi gai đã thể hiện ở dấu "`" rồi, khi để font chữ shx sẽ thành dấu hiệu fi 2 gạch là fi gai. Bạn xem trong file đính kèm của mình là thấy.

 

@Nhoc: Giá trị tính ra lúc làm tròn lên, lúc làm tròn xuống. Hình như do chiều dài thanh "nhìn thấy là Lmin=1026 nhưng thật ra vẫn còn một ít sau dấu phảy. Bạn có cách nào để khử giá trị Lmin, Lmax, chỉ lấy đúng 3 số sau dấu phảy được không?


  • 0

#24 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 18 October 2014 - 11:35 AM

^^ thanhks anh ndtnv góp ý, ngành này nhoc cũng ko rành lắm nên chỗ thanh'14 nhoc ko pit là gì cứ nghĩ nó là (- sl 1) kaka, lúc xem file bạn đó trình bày nhoc cũng có ý tưởng như anh vậy, quét chọn rùi tính lun 1 lần, nhưng lại ko nghĩ ra giải thuật để làm vậy ^^, chọn thanh thuộc layer nào đó, lấy đc chiều dài từng line nhưng ko biết lọc min max = cách nào ^^, nên đành viết theo ý chang bạn đó trình bày thấy nó đơn giản hơn :)

Mình không cần quét thanh đâu, mình cần pick thanh nên bạn cứ để như lsp đang viết là tốt cho mình rồi.

Cảm ơn bạn!

Giải thích thêm tại sao mình không dùng quét thanh. Vì trên bản vẽ, đôi khi có nhiều thanh trùng 1 vị trí mà người vẽ không kiểm soát được, sẽ dẫn đến sai sót. Thường bọn mình đếm thanh dựa vào Dim, như trong bản vẽ của mình dùng số khoảng cách x khoảng cách giữa 2 thanh cạnh nhau. Vì thế số thanh nhập tay sẽ chuẩn hơn là số thanh quét ra tự động.


  • 0

#25 pphung183

pphung183

    biết dimstyle

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

Đã gửi 18 October 2014 - 11:46 AM

Muốn luôn làm tròn lên bạn sữa :

(if (= (- ltb (fix ltb)) 0.5) thành (if (> (- ltb (fix ltb)) 0.0)

Giá trị Lmin, Lmax, chỉ lấy đúng 3 số sau dấu phảy :

(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2)) thành

(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 3) "~" (rtos (* dai2 1000) 2 3) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))


  • 0

#26 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 18 October 2014 - 12:54 PM

- hi nhoc đã sữa lại theo ý bạn, làm tròn lmin lmax trước rùi mới tính ltb để tránh sai số ko đáng có, bạn test thử vài trường hợp xem có còn sai ko

- nay nhoc mới thấy phần hỏi thêm của bạn nên nhoc viết lun, cai chọn thanh có L ko đổi, chung 1 lsp lệnh ttk


;; ham luu gia tri
(defun getvalue ( a giatri dongnhac / astr) 
(or a (setq a giatri))
(cond
((= (type a) 'INT) (setq a (cond ((getint (strcat "\n" dongnhac "(" (itoa a) ") :")))(a))))
((= (type a) 'REAL) (setq a (cond ((getreal (strcat "\n" dongnhac "(" (rtos a 2 0) ") :")))(a))))
((= (type a) 'STR) (setq a (cond ((= "" (setq astr (getstring T (strcat "\n" dongnhac " (" a "): ")))) a) (astr))))
))
;;;;

  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#27 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 18 October 2014 - 01:00 PM

Muốn luôn làm tròn lên bạn sữa :

(if (= (- ltb (fix ltb)) 0.5) thành (if (> (- ltb (fix ltb)) 0.0)

Giá trị Lmin, Lmax, chỉ lấy đúng 3 số sau dấu phảy :

(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2)) thành

(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 3) "~" (rtos (* dai2 1000) 2 3) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))

- anh Phung chắc hiểu nhầm ý bạn đó, ý bạn là khi chọn lmin lmax có thể có nhiều hơn 3 số lẽ, vd: 1.23432543, sau khi chọn thì làm tròn lên lun tới 3 số thui rùi *1000 để ra mm, chứ như anh viết có thể nó ra 1458.xxx~2890.xxx ^^


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#28 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 18 October 2014 - 01:22 PM

- hi nhoc đã sữa lại theo ý bạn, làm tròn lmin lmax trước rùi mới tính ltb để tránh sai số ko đáng có, bạn test thử vài trường hợp xem có còn sai ko

- nay nhoc mới thấy phần hỏi thêm của bạn nên nhoc viết lun, cai chọn thanh có L ko đổi, chung 1 lsp lệnh ttk

(defun c:TTL (/ old lmax lmin ename1 ename2 info1 sl info2 dai1 dai2 ltb ldelta e1 e2) ;
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai be nhat:")
(setq lmin (ssget "+.:E:S" '((0 . "LINE"))))
(if lmin
 (progn
    (setq ename1 (ssname lmin 0)
	      info1 (entget ename1)
		  dai1 (distof (rtos (distance (cdr (assoc 10 info1)) (cdr (assoc 11 info1))) 2 3))
	 )
  )
)  
 ;=========================================================
(prompt "Chon thanh co chieu dai lon nhat:")
(setq lmax (ssget "+.:E:S" '((0 . "LINE"))))
(if lmax
 (progn
    (setq ename2 (ssname lmax 0)
	      info2 (entget ename2)
		  dai2  (distof (rtos (distance (cdr (assoc 10 info2)) (cdr (assoc 11 info2))) 2 3))
	 )
  )
)  
;===========================================================
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq ltb (distof (rtos (/ (+ dai1 dai2) 2.0) 2 3)))
(if (= (- ltb (fix ltb)) 0.5)
(setq ltb (+ ltb 0.5))
ltb
)
(setq ldelta (* (/ (- dai2 dai1) (- sl 1)) 1000))
;==============================================================
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e1)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`14,L =" (rtos (* ltb 1000) 2 0))) (assoc 1 e1) e1))
;===============================================================
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e2)) "DIMENSION")
(prompt "doi tuong ban chon ko phai la dim, ban chon lai hen!!!")
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
)
(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))
;======================================================================
(setvar "osmode" old)
(princ "\n")
(princ)
)
;===============================chon thanh co chieu dai ko doi edit vao text co san
(defun c:ttk(/ lx ename3 info3 dai3 e3 old sl)
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai khong doi:")
(setq lx (ssget "+.:E:S" '((0 . "LINE"))))
(if lx
 (progn
    (setq ename3 (ssname lx 0)
	      info3 (entget ename3)
		  dai3 (distof (rtos (distance (cdr (assoc 10 info3)) (cdr (assoc 11 info3))) 2 3))
	 )
  )
)
(setq sl (getint "\nSo luong thanh mun tinh:"))
;====================================================
 (setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e3)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`14,L =" (rtos (* dai3 1000) 2 0))) (assoc 1 e3) e3))
(setvar "osmode" old)
(princ "\n")
(princ)
)

 Lsp đã hoàn chỉnh. Cảm ơn bạn rất nhiều!

 

Trong Lisp "ttk", nếu muốn chọn đường kính thép (hiện ở đây đang là fi 14), bạn cho thêm câu lệnh hỏi "Nhập đường kính thép" (8, 10, 12, 14, 16,...) rồi mới đến các lệnh khác, bạn sửa giúp mình thêm lệnh này được không? Tks.


  • 0

#29 pphung183

pphung183

    biết dimstyle

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

Đã gửi 18 October 2014 - 01:33 PM

Ah, không hiểu ý diễn đạt  Lmin, Lmax, :) , Nhưng nếu nhoc ko sữa

(if (= (- ltb (fix ltb)) 0.5) thành (if (> (- ltb (fix ltb)) 0.0

thì những số lẻ thập phân của ltb : 0.1 0.2 0.3 0.4 0.44 0.48 ... không làm tròn lên thì cũng không trúng ý chủ thớt :D


  • 0

#30 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 18 October 2014 - 03:00 PM

- cái if nhoc làm biếng xóa ^^ chứ ko cần nó nữa vì nhoc đã làm tròn lấy 3 số lẻ từ thằng lmin, lmax,  LTB phần thô trước tính theo m, đến cuối khi in ra nhoc mới * cho 1000 để đổi ra mm ^^

 

 Lsp đã hoàn chỉnh. Cảm ơn bạn rất nhiều!

 

Trong Lisp "ttk", nếu muốn chọn đường kính thép (hiện ở đây đang là fi 14), bạn cho thêm câu lệnh hỏi "Nhập đường kính thép" (8, 10, 12, 14, 16,...) rồi mới đến các lệnh khác, bạn sửa giúp mình thêm lệnh này được không? Tks.

 

 

- để nhoc ngâm thử xem, ý bạn là cái biến fi ấy sẽ lưu lại dùng cho lệnh TTL lun phải ko


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#31 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 18 October 2014 - 09:17 PM

- cái if nhoc làm biếng xóa ^^ chứ ko cần nó nữa vì nhoc đã làm tròn lấy 3 số lẻ từ thằng lmin, lmax,  LTB phần thô trước tính theo m, đến cuối khi in ra nhoc mới * cho 1000 để đổi ra mm ^^

 

 

 

- để nhoc ngâm thử xem, ý bạn là cái biến fi ấy sẽ lưu lại dùng cho lệnh TTL lun phải ko

Không, biến fi mình chỉ dùng cho ttk thôi. Mình sẽ dùng cho thống kê thép trong cống, rãnh, các công trình thoát nước nói chung để thống kê thép cho nhanh vì trong các công trinh thoát nước thì sử dụng nhiều loại thép có đường kính khác nhau.

Lsp bạn viết trên (cả ttl và ttk) mình dùng cho thiết kế thép cho tấm BTXM, thép của tấm BTXM không thay đổi đường kính.

Cảm ơn bạn!


  • 0

#32 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 18 October 2014 - 09:56 PM

- ek sr bạn, nhoc tính edit lại thêm vô phần nhập đường kính thép mà lỗi gì đó lúc save changes mất tiu code rùi ^^, bạn tải chưa úp lên lại nhoc thêm vô tí ^^, ah cái đường kinh ấy bạn có dùng tính gì ko để nhoc áp kiểu cho nó là dạng text trong lsp lun nếu ko dùng nó để tính toán gì khác


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#33 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 20 October 2014 - 07:53 AM

- ek sr bạn, nhoc tính edit lại thêm vô phần nhập đường kính thép mà lỗi gì đó lúc save changes mất tiu code rùi ^^, bạn tải chưa úp lên lại nhoc thêm vô tí ^^, ah cái đường kinh ấy bạn có dùng tính gì ko để nhoc áp kiểu cho nó là dạng text trong lsp lun nếu ko dùng nó để tính toán gì khác

Đây là lsp mình tải về: http://www.cadviet.c...hep_ttl_ttk.lsp

 

Bạn làm cái mới cho mình từ lsp "ttk" là được.

Đầu vào

1. Chọn thanh thép để lấy chiều dài (chiều dài đã chọn trong bản vẽ là m)

2. Nhập số lượng thanh

3. Nhập đường kính thép 

 

Kết quả

Chọn text ghi kết quả L: Số lượng thanh_đường kính thép_, L= chiều dài thanh thép đã chọn ở trên và làm tròn đến mm.

 

Cảm ơn bạn!


  • 0

#34 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 October 2014 - 08:30 AM

- hi bạn úp lên nguồn khác hộ mình hen, tải trực tiếp file lsp lên trang cadviet ko tải đc, hoặc bạn nén file đó thành .rar hay . zip rùi up lên = 4rum thì tải đc


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#35 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 20 October 2014 - 09:51 AM

- hi bạn úp lên nguồn khác hộ mình hen, tải trực tiếp file lsp lên trang cadviet ko tải đc, hoặc bạn nén file đó thành .rar hay . zip rùi up lên = 4rum thì tải đc

 

Mình nén thành rar rồi đấy:

http://www.cadviet.c...p_ttl_ttk_1.rar


  • 0

#36 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 October 2014 - 10:07 AM

hi hi, của bạn đây ^^

(defun c:TTL (/ old lmax lmin ename1 ename2 info1 sl info2 dai1 dai2 ltb ldelta e1 e2) ;
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai be nhat:")
(setq lmin (ssget "+.:E:S" '((0 . "LINE"))))
(if lmin
 (progn
    (setq ename1 (ssname lmin 0)
	      info1 (entget ename1)
		  dai1 (distof (rtos (distance (cdr (assoc 10 info1)) (cdr (assoc 11 info1))) 2 3))
	 )
  )
)  
 ;=========================================================
(prompt "Chon thanh co chieu dai lon nhat:")
(setq lmax (ssget "+.:E:S" '((0 . "LINE"))))
(if lmax
 (progn
    (setq ename2 (ssname lmax 0)
	      info2 (entget ename2)
		  dai2  (distof (rtos (distance (cdr (assoc 10 info2)) (cdr (assoc 11 info2))) 2 3))
	 )
  )
)  
;===========================================================
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq ltb (distof (rtos (/ (+ dai1 dai2) 2.0) 2 3)))
(if (= (- ltb (fix ltb)) 0.5)
(setq ltb (+ ltb 0.5))
ltb
)
(setq ldelta (* (/ (- dai2 dai1) (- sl 1)) 1000))
;==============================================================
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e1)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`14, L=" (rtos (* ltb 1000) 2 0))) (assoc 1 e1) e1))
;===============================================================
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e2)) "DIMENSION")
(prompt "doi tuong ban chon ko phai la dim, ban chon lai hen!!!")
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
)
(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))
;======================================================================
(setvar "osmode" old)
(princ "\n")
(princ)
)
;===============================chon thanh co chieu dai ko doi edit vao text co san
(defun c:ttk(/ lx ename3 info3 dai3 e3 old sl dk)
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai khong doi:")
(setq lx (ssget "+.:E:S" '((0 . "LINE"))))
(if lx
 (progn
    (setq ename3 (ssname lx 0)
	      info3 (entget ename3)
		  dai3 (distof (rtos (distance (cdr (assoc 10 info3)) (cdr (assoc 11 info3))) 2 3))
	 )
  )
)
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq dk (getint "\nNhap duong kinh Thep:"))
;====================================================
 (setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e3)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`" (itoa dk) ", L=" (rtos (* dai3 1000) 2 0))) (assoc 1 e3) e3))
(setvar "osmode" old)
(princ "\n")
(princ)
)


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#37 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 20 October 2014 - 10:21 AM

hi hi, của bạn đây ^^

(defun c:TTL (/ old lmax lmin ename1 ename2 info1 sl info2 dai1 dai2 ltb ldelta e1 e2) ;
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai be nhat:")
(setq lmin (ssget "+.:E:S" '((0 . "LINE"))))
(if lmin
 (progn
    (setq ename1 (ssname lmin 0)
	      info1 (entget ename1)
		  dai1 (distof (rtos (distance (cdr (assoc 10 info1)) (cdr (assoc 11 info1))) 2 3))
	 )
  )
)  
 ;=========================================================
(prompt "Chon thanh co chieu dai lon nhat:")
(setq lmax (ssget "+.:E:S" '((0 . "LINE"))))
(if lmax
 (progn
    (setq ename2 (ssname lmax 0)
	      info2 (entget ename2)
		  dai2  (distof (rtos (distance (cdr (assoc 10 info2)) (cdr (assoc 11 info2))) 2 3))
	 )
  )
)  
;===========================================================
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq ltb (distof (rtos (/ (+ dai1 dai2) 2.0) 2 3)))
(if (= (- ltb (fix ltb)) 0.5)
(setq ltb (+ ltb 0.5))
ltb
)
(setq ldelta (* (/ (- dai2 dai1) (- sl 1)) 1000))
;==============================================================
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e1)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`14, L=" (rtos (* ltb 1000) 2 0))) (assoc 1 e1) e1))
;===============================================================
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e2)) "DIMENSION")
(prompt "doi tuong ban chon ko phai la dim, ban chon lai hen!!!")
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
)
(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))
;======================================================================
(setvar "osmode" old)
(princ "\n")
(princ)
)
;===============================chon thanh co chieu dai ko doi edit vao text co san
(defun c:ttk(/ lx ename3 info3 dai3 e3 old sl dk)
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai khong doi:")
(setq lx (ssget "+.:E:S" '((0 . "LINE"))))
(if lx
 (progn
    (setq ename3 (ssname lx 0)
	      info3 (entget ename3)
		  dai3 (distof (rtos (distance (cdr (assoc 10 info3)) (cdr (assoc 11 info3))) 2 3))
	 )
  )
)
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq dk (getint "\nNhap duong kinh Thep:"))
;====================================================
 (setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e3)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`" (itoa dk) ", L=" (rtos (* dai3 1000) 2 0))) (assoc 1 e3) e3))
(setvar "osmode" old)
(princ "\n")
(princ)
)

Bạn ơi dùng Lsp báo lỗi như sau:

 

Chon thanh co chieu dai khong doi:
Select objects:
 
So luong thanh mun tinh:4
Nhap duong kinh Thep:8
chon text ghi ket qua L khong doi:
; error: bad argument type: numberp: nil

Chon thanh co chieu dai khong doi:

Select objects:

 

So luong thanh mun tinh:4

Nhap duong kinh Thep:8

chon text ghi ket qua L khong doi:

; error: bad argument type: numberp: nil

 

Mình muốn trong câu lệnh nhập đường kính thép thêm fi của thép nữa bằng tiền tố "`" (tương đương fi gai) hoặc "~" (tương đương fi thường) có được không?

Hiện lsp chỉ cho phép nhập đường kính thép là số. Nếu muốn thêm ký hiệu fi gai hoặc fi thường thì trong câu lệnh nhập đường kính phải cho phép nhập thêm tiền tố ` hoặc ~.


  • 0

#38 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 October 2014 - 11:16 AM

- nhoc đã sửa lại rùi, nhoc nghĩ cái đường kính bạn nhập là số ^^, giờ chuyển lại thành dạng text, khi lsp hỏi nhập đường kính thì bạn nhập sao cũng đc

- Vd: nhap duong kinh thep:`14 hay ~14 đều đc, dạng dữ liệu nhập là dạng chuỗi thì bạn nhập gì cũng đc, dài thòng lòng cũng đc ^^

(defun c:TTL (/ old lmax lmin ename1 ename2 info1 sl info2 dai1 dai2 ltb ldelta e1 e2) ;
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai be nhat:")
(setq lmin (ssget "+.:E:S" '((0 . "LINE"))))
(if lmin
 (progn
    (setq ename1 (ssname lmin 0)
	      info1 (entget ename1)
		  dai1 (distof (rtos (distance (cdr (assoc 10 info1)) (cdr (assoc 11 info1))) 2 3))
	 )
  )
)  
 ;=========================================================
(prompt "Chon thanh co chieu dai lon nhat:")
(setq lmax (ssget "+.:E:S" '((0 . "LINE"))))
(if lmax
 (progn
    (setq ename2 (ssname lmax 0)
	      info2 (entget ename2)
		  dai2  (distof (rtos (distance (cdr (assoc 10 info2)) (cdr (assoc 11 info2))) 2 3))
	 )
  )
)  
;===========================================================
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq ltb (distof (rtos (/ (+ dai1 dai2) 2.0) 2 3)))
(if (= (- ltb (fix ltb)) 0.5)
(setq ltb (+ ltb 0.5))
ltb
)
(setq ldelta (* (/ (- dai2 dai1) (- sl 1)) 1000))
;==============================================================
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e1)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`14, L=" (rtos (* ltb 1000) 2 0))) (assoc 1 e1) e1))
;===============================================================
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e2)) "DIMENSION")
(prompt "doi tuong ban chon ko phai la dim, ban chon lai hen!!!")
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
)
(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))
;======================================================================
(setvar "osmode" old)
(princ "\n")
(princ)
)
;===============================chon thanh co chieu dai ko doi edit vao text co san
(defun c:ttk(/ lx ename3 info3 dai3 e3 old sl dk)
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai khong doi:")
(setq lx (ssget "+.:E:S" '((0 . "LINE"))))
(if lx
 (progn
    (setq ename3 (ssname lx 0)
	      info3 (entget ename3)
		  dai3 (distof (rtos (distance (cdr (assoc 10 info3)) (cdr (assoc 11 info3))) 2 3))
	 )
  )
)
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq dk (getstring "\nNhap duong kinh Thep:"))
;====================================================
 (setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e3)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) dk ", L=" (rtos (* dai3 1000) 2 0))) (assoc 1 e3) e3))
(setvar "osmode" old)
(princ "\n")
(princ)
)

P/s: nhoc đã test rùi ok, ko có lỗi gì hết, có thể là lúc chọn text để thay đổi bạn chưa chọn gì hết nhấn enter lun hay nhấn chuột phải lun nên nó báo lỗi


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#39 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 20 October 2014 - 12:03 PM

- nhoc đã sửa lại rùi, nhoc nghĩ cái đường kính bạn nhập là số ^^, giờ chuyển lại thành dạng text, khi lsp hỏi nhập đường kính thì bạn nhập sao cũng đc

- Vd: nhap duong kinh thep:`14 hay ~14 đều đc, dạng dữ liệu nhập là dạng chuỗi thì bạn nhập gì cũng đc, dài thòng lòng cũng đc ^^

(defun c:TTL (/ old lmax lmin ename1 ename2 info1 sl info2 dai1 dai2 ltb ldelta e1 e2) ;
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai be nhat:")
(setq lmin (ssget "+.:E:S" '((0 . "LINE"))))
(if lmin
 (progn
    (setq ename1 (ssname lmin 0)
	      info1 (entget ename1)
		  dai1 (distof (rtos (distance (cdr (assoc 10 info1)) (cdr (assoc 11 info1))) 2 3))
	 )
  )
)  
 ;=========================================================
(prompt "Chon thanh co chieu dai lon nhat:")
(setq lmax (ssget "+.:E:S" '((0 . "LINE"))))
(if lmax
 (progn
    (setq ename2 (ssname lmax 0)
	      info2 (entget ename2)
		  dai2  (distof (rtos (distance (cdr (assoc 10 info2)) (cdr (assoc 11 info2))) 2 3))
	 )
  )
)  
;===========================================================
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq ltb (distof (rtos (/ (+ dai1 dai2) 2.0) 2 3)))
(if (= (- ltb (fix ltb)) 0.5)
(setq ltb (+ ltb 0.5))
ltb
)
(setq ldelta (* (/ (- dai2 dai1) (- sl 1)) 1000))
;==============================================================
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e1)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`14, L=" (rtos (* ltb 1000) 2 0))) (assoc 1 e1) e1))
;===============================================================
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e2)) "DIMENSION")
(prompt "doi tuong ban chon ko phai la dim, ban chon lai hen!!!")
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
)
(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))
;======================================================================
(setvar "osmode" old)
(princ "\n")
(princ)
)
;===============================chon thanh co chieu dai ko doi edit vao text co san
(defun c:ttk(/ lx ename3 info3 dai3 e3 old sl dk)
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai khong doi:")
(setq lx (ssget "+.:E:S" '((0 . "LINE"))))
(if lx
 (progn
    (setq ename3 (ssname lx 0)
	      info3 (entget ename3)
		  dai3 (distof (rtos (distance (cdr (assoc 10 info3)) (cdr (assoc 11 info3))) 2 3))
	 )
  )
)
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq dk (getstring "\nNhap duong kinh Thep:"))
;====================================================
 (setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e3)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) dk ", L=" (rtos (* dai3 1000) 2 0))) (assoc 1 e3) e3))
(setvar "osmode" old)
(princ "\n")
(princ)
)

P/s: nhoc đã test rùi ok, ko có lỗi gì hết, có thể là lúc chọn text để thay đổi bạn chưa chọn gì hết nhấn enter lun hay nhấn chuột phải lun nên nó báo lỗi

Mình biết tại sao bị lỗi rồi. Đối tượng trong thanh trong lsp của bạn là Line, còn đối tượng mình muốn chọn là Polyline nên báo lỗi. Bạn sửa lại đối tượng thanh là Polyline được không vì thanh thép nhiều khi bị uốn theo chiều dài loằng ngoằng (chữ U, chữ nhật) chứ không phải chỉ có 1 đường thẳng. Tks.


  • 0

#40 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 October 2014 - 12:52 PM

- ok nhoc đã sữa lại lệnh ttk, có thể chọn line or pline đều đc ^^

(vl-load-com)
;==================
(defun c:TTL (/ old lmax lmin ename1 ename2 info1 sl info2 dai1 dai2 ltb ldelta e1 e2) ;
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai be nhat:")
(setq lmin (ssget "+.:E:S" '((0 . "LINE"))))
(if lmin
 (progn
    (setq ename1 (ssname lmin 0)
	      info1 (entget ename1)
		  dai1 (distof (rtos (distance (cdr (assoc 10 info1)) (cdr (assoc 11 info1))) 2 3))
	 )
  )
)  
 ;=========================================================
(prompt "Chon thanh co chieu dai lon nhat:")
(setq lmax (ssget "+.:E:S" '((0 . "LINE"))))
(if lmax
 (progn
    (setq ename2 (ssname lmax 0)
	      info2 (entget ename2)
		  dai2  (distof (rtos (distance (cdr (assoc 10 info2)) (cdr (assoc 11 info2))) 2 3))
	 )
  )
)  
;===========================================================
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq ltb (distof (rtos (/ (+ dai1 dai2) 2.0) 2 3)))
(if (= (- ltb (fix ltb)) 0.5)
(setq ltb (+ ltb 0.5))
ltb
)
(setq ldelta (* (/ (- dai2 dai1) (- sl 1)) 1000))
;==============================================================
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e1)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e1 (entget (car (entsel "\nchon text ghi ket qua L trung binh:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) "`14, L=" (rtos (* ltb 1000) 2 0))) (assoc 1 e1) e1))
;===============================================================
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e2)) "DIMENSION")
(prompt "doi tuong ban chon ko phai la dim, ban chon lai hen!!!")
(setq e2 (entget (car (entsel "\nchon dim ghi ket qua L delta:"))))
(princ "\n")
)
(entmod (subst (cons 1 (strcat (rtos (* dai1 1000) 2 0) "~" (rtos (* dai2 1000) 2 0) ", \U+0394L=" (rtos ldelta 2 0))) (assoc 1 e2) e2))
;======================================================================
(setvar "osmode" old)
(princ "\n")
(princ)
)
;===============================chon thanh co chieu dai ko doi edit vao text co san
(defun c:ttk(/ lx ename3 info3 dai3 e3 old sl dk)
(setq old (getvar "osmode"))
(setvar "osmode" 0)
(prompt "Chon thanh co chieu dai khong doi:")
(setq lx (ssget "+.:E:S" '((0 . "*LINE"))))
(if lx
 (progn
     (setq dai3 0.0)
	 (while (setq ename3 (ssname lx 0))
           (setq dai3 (+ dai3 (Length1 ename3)))
		   (ssdel ename3 lx))
	     (setq dai3 (distof (rtos dai3 2 3)))
	 )
  )
(setq sl (getint "\nSo luong thanh mun tinh:"))
(setq dk (getstring "\nNhap duong kinh Thep:"))
;====================================================
 (setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
(while (/= (cdr (assoc 0 e3)) "TEXT")
(prompt "Ban chon ko phai la text, ban chon lai hen!!!")
(setq e3 (entget (car (entsel "\nchon text ghi ket qua L khong doi:"))))
(princ "\n")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(entmod (subst (cons 1 (strcat (itoa sl) dk ", L=" (rtos (* dai3 1000) 2 0))) (assoc 1 e3) e3))
(setvar "osmode" old)
(princ "\n")
(princ)
)
;=============================================
(defun Length1(e) 
(vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;=========================================================


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^