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  
TUY DB

Nhờ Sửa Lisp

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

Nhờ chỉnh sửa giúp lisp vẽ nhanh thép hình L:

Chào mọi người trên diễn đàn, mình  có sưu tầm được 1 lisp vẽ xà thép hình L, dùng để thiết kế các bộ xà bằng thép hình L. Nội dung lisp như sau: gõ lệnh tk, nhập bề rộng loại thép góc, nhập kích thước trục bu lông, nhập chiều dài đầu thanh, chọn điểm đầu, chọn điểm cuối sẽ vẽ được 1 thanh xà thép hình L. Nhưng các đường line chỉ được gọi ra thông qua màu sắc được quy định trong lisp. Vậy mình muốn nhờ chỉnh sửa lại để các đường line đó sẽ thuộc 1 layer mình có thể đặt tên bất kỳ để có thể dễ dàng quản lý. Cảm ơn mọi người! Dưới đây mình đính kèm theo lisp:

http://www.cadviet.com/upfiles/6/150480_vexa_2.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

Mình có sưu tầm được 1 lisp cộng các số text rồi viết ra kết quả đè lên 1 text khác. tên lệnh: CS
Nhưng gặp phải các khó khăn sau:
+ Kết quả viết ra nó có chưa 1 số sau dấu thập phân, mình muốn thay đổi thì sửa ở dòng lệnh nào.
+ Mình muốn sau mỗi lần nhấp vô các text cần cộng nó hiện kết quả ngay ở dòng Command cho mình thấy. Ví dụ có text 2 3 6 7, sau khi nhấp vô số 2 và 3, dưới command cho kết quả là 5, nhấp thêm số 6 thì command cho là 11....
+ Tốt nhất khi ghi kết quả, mình muốn nó tạo ra 1 text mới với cao chữ là 2 thay vì ghi đè lên text có sẵn, anh em nào sửa giúp mình với

NỘI DUNG LISP:
;;;Created by "NXT "

(defun C:CS (/ mysset counter number_total number name_ent cur_ent text_origin
number_total number_total_text LOOP result result_text text_modified old new)
(setvar "CMDECHO" 0)
;***************************************************************************************
(princ "\nSelect text objects for addition")
(setq mysset (ssget))
(if (/= mysset nil)
(progn
(setq counter 0)
(setq number_total 0.00)
(setq number 0.00)
(while (< counter (sslength mysset)) 
(setq name_ent (ssname mysset counter))
(setq cur_ent (entget name_ent))
(if (or 1f642.png(= (cdr (assoc '0 cur_ent)) "TEXT")
1f642.png(= (cdr (assoc '0 cur_ent)) "MTEXT")
)
(progn
(setq text_origin (cdr (assoc 1 cur_ent)))
(setq number (distof text_origin 2));doi chuoi thanh so thuc
(if 1f642.png(= number nil)
(setq number 0.00)

(setq number_total (+ number number_total)) 
)
)
(if 1f642.png(= (cdr (assoc '0 cur_ent)) "DIMENSION")
(progn
(setq text_origin (cdr (assoc 42 cur_ent)))
(setq number (/ text_origin 100.0))
(if 1f642.png(= number nil)
(setq number 0.00)

(setq number_total (+ number number_total)) 
)
)
(setq counter (+ counter 1))
)
(setq number_total_text (rtos number_total));;doi so thuc thanh chuoi
)
(princ "\nThanks a lot and back to you !")
)
;***************************************************************************************
(setq LOOP T)
(while 1f642.png(= LOOP T)
(while (null (setq result (nentsel "\nSelect text for result: ")))
(princ "Nothing selected !")
); bat buoc user phai chon mot doi tuong

;-----------------------------------------------------------------------
;lam noi bat doi tuong nguon bang ham redraw
(redraw (car result) 3)
(setq result_text (entget (car result)))
(if (or 1f642.png(= (cdr (assoc '0 result_text)) "TEXT")
1f642.png(= (cdr (assoc '0 result_text)) "MTEXT")
1f642.png(= (cdr (assoc '0 result_text)) "DIMENSION")
)
(progn
(setq text_origin (cdr (assoc 1 result_text)));Dong text can thay doi...
(setq text_modified number_total_text) ;Duoc thay doi boi...
(setq old (cons 1 text_origin))
(setq new (cons 1 text_modified))
(entmod (subst new old result_text))
(setq LOOP nil)
)
(progn
(princ "Please select text object !")
(setq LOOP T);Neu doi tuong khong phai la text thi vong lap se tiep tuc
) ;cho den khi chon duoc text
)

);Ket thuc viec chon doi text result
;***************************************************************************************
;Tra ve lai trang thai cu cho doi text result
(redraw (car result) 4)
(princ)
);end program

  • Vote giảm 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

Nhờ chỉnh sửa giúp lisp vẽ nhanh thép hình L:

Chào mọi người trên diễn đàn, mình  có sưu tầm được 1 lisp vẽ xà thép hình L, dùng để thiết kế các bộ xà bằng thép hình L. Nội dung lisp như sau: gõ lệnh tk, nhập bề rộng loại thép góc, nhập kích thước trục bu lông, nhập chiều dài đầu thanh, chọn điểm đầu, chọn điểm cuối sẽ vẽ được 1 thanh xà thép hình L. Nhưng các đường line chỉ được gọi ra thông qua màu sắc được quy định trong lisp. Vậy mình muốn nhờ chỉnh sửa lại để các đường line đó sẽ thuộc 1 layer mình có thể đặt tên bất kỳ để có thể dễ dàng quản lý. Cảm ơn mọi người! Dưới đây mình đính kèm theo lisp:

http://www.cadviet.com/upfiles/6/150480_vexa_2.lsp

Thêm dòng (command "-layer" "set" "NAME_LAYER" "") trước lệnh vẽ line là line vẽ ra sẽ thuộc layer đó. ^_^

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êm dòng (command "-layer" "set" "NAME_LAYER" "") trước lệnh vẽ line là line vẽ ra sẽ thuộc layer đó. ^_^

Em cảm ơn a. Do em chưa biết gì về lisp nên khi em thực hiện như anh hướng dẫn lại không vẽ được. Em nhờ a hướng dẫn chi tiết hơn một chút nữa được khô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

Em cảm ơn a. Do em chưa biết gì về lisp nên khi em thực hiện như anh hướng dẫn lại không vẽ được. Em nhờ a hướng dẫn chi tiết hơn một chút nữa được không ạ.

Sao lại ko được.?

 

Ví dụ TK đây:

(defun C:tk ()
  (setq v (getvar "osmode"))
  (setq B (getint "\nNhap be rong loai thep goc:"))
  (setq a (getint "Nhap kich thuoc truc bu long:"))
  (setq dauthanh (getint "Nhap chieu dai dau thanh:"))
  (setq pt1 (getpoint "Diem dau : "))
  (setq pt2 (getpoint "Diem cuoi : " pt1))
  (command "osnap" "none")
  (command "-layer" "set" "1" "");vị trí bất kỳ trước command line là đc mà.
  (setq goc (angle pt1 pt2))
  (setq pt3 (polar pt2 goc dauthanh))
  (setq pt4 (polar pt1 goc (* dauthanh -1)))
  (setq pt5 (polar pt3 (+ (/ PI 2) goc) a))
  (setq pt6 (polar pt3 (- goc (/ PI 2)) (- B a)))
  (setq pt7 (polar pt4 (- goc (/ PI 2)) (- B a)))
  (setq pt8 (polar pt4 (+ (/ PI 2) goc) a))
  (setq pt9 (polar pt3 (+ (/ PI 2) goc) (- a (/ (* B 15) 100))))
  (setq pt10 (polar pt4 (+ (/ PI 2) goc) (- a (/ (* B 15) 100))))
  (if (> a 0)
    (progn
      (command "color" 1)
      (command "line" pt1 pt2 "")
      (setq truc (ssget "L"))
      (command "chprop" truc "" "lt" "center" "")
    )
  )
  (command "color" 7)
  (command "pline" pt5 pt6 pt7 pt8 "close")
  (command "color" 2)
  (command "line" pt10 pt9 "")
  (setq denta (ssget "L"))
  (command "chprop" denta "" "lt" "hidden" "")
  (command "color" 7)
  (if (> dauthanh 0)
    (progn
      (command "color" 7)
      (command "circle" pt1 10)
      (command "circle" pt2 10)
    )
  )
  (setvar "osmode" v)
)

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 có sưu tầm được 1 lisp cộng các số text rồi viết ra kết quả đè lên 1 text khác. tên lệnh: CS

Nhưng gặp phải các khó khăn sau:

+ Kết quả viết ra nó có chưa 1 số sau dấu thập phân, mình muốn thay đổi thì sửa ở dòng lệnh nào.

+ Mình muốn sau mỗi lần nhấp vô các text cần cộng nó hiện kết quả ngay ở dòng Command cho mình thấy. Ví dụ có text 2 3 6 7, sau khi nhấp vô số 2 và 3, dưới command cho kết quả là 5, nhấp thêm số 6 thì command cho là 11....

+ Tốt nhất khi ghi kết quả, mình muốn nó tạo ra 1 text mới với cao chữ là 2 thay vì ghi đè lên text có sẵn, anh em nào sửa giúp mình với

NỘI DUNG LISP:

;;;Created by "NXT "

(defun C:CS (/ mysset counter number_total number name_ent cur_ent text_origin

number_total number_total_text LOOP result result_text text_modified old new)

(setvar "CMDECHO" 0)

;***************************************************************************************

(princ "\nSelect text objects for addition")

(setq mysset (ssget))

(if (/= mysset nil)

(progn

(setq counter 0)

(setq number_total 0.00)

(setq number 0.00)

(while (< counter (sslength mysset)) 

(setq name_ent (ssname mysset counter))

(setq cur_ent (entget name_ent))

(if (or 1f642.png(= (cdr (assoc '0 cur_ent)) "TEXT")

1f642.png(= (cdr (assoc '0 cur_ent)) "MTEXT")

)

(progn

(setq text_origin (cdr (assoc 1 cur_ent)))

(setq number (distof text_origin 2));doi chuoi thanh so thuc

(if 1f642.png(= number nil)

(setq number 0.00)

(setq number_total (+ number number_total)) 

)

)

(if 1f642.png(= (cdr (assoc '0 cur_ent)) "DIMENSION")

(progn

(setq text_origin (cdr (assoc 42 cur_ent)))

(setq number (/ text_origin 100.0))

(if 1f642.png(= number nil)

(setq number 0.00)

(setq number_total (+ number number_total)) 

)

)

(setq counter (+ counter 1))

)

(setq number_total_text (rtos number_total));;doi so thuc thanh chuoi

)

(princ "\nThanks a lot and back to you !")

)

;***************************************************************************************

(setq LOOP T)

(while 1f642.png(= LOOP T)

(while (null (setq result (nentsel "\nSelect text for result: ")))

(princ "Nothing selected !")

); bat buoc user phai chon mot doi tuong

;-----------------------------------------------------------------------

;lam noi bat doi tuong nguon bang ham redraw

(redraw (car result) 3)

(setq result_text (entget (car result)))

(if (or 1f642.png(= (cdr (assoc '0 result_text)) "TEXT")

1f642.png(= (cdr (assoc '0 result_text)) "MTEXT")

1f642.png(= (cdr (assoc '0 result_text)) "DIMENSION")

)

(progn

(setq text_origin (cdr (assoc 1 result_text)));Dong text can thay doi...

(setq text_modified number_total_text) ;Duoc thay doi boi...

(setq old (cons 1 text_origin))

(setq new (cons 1 text_modified))

(entmod (subst new old result_text))

(setq LOOP nil)

)

(progn

(princ "Please select text object !")

(setq LOOP T);Neu doi tuong khong phai la text thi vong lap se tiep tuc

) ;cho den khi chon duoc text

)

);Ket thuc viec chon doi text result

;***************************************************************************************

;Tra ve lai trang thai cu cho doi text result

(redraw (car result) 4)

(princ)

);end program

 

sao lại pót kèm topic khác nhỉ ^_^

Giờ rảnh rang , ko thấy ai nghịch thì mình nghịch vây.

Thấy bạn viết đc lisp nên mình làm cái ví dụ này (chưa đúng hết các trường hợp con trỏ chuột ở các vị trí menu.......) bạn có thể nghiên cứu thêm cho hoàn thiện. Good luck.

(defun c:test (/)

  (if (setq text (car (entsel "\nChon text dau tien: "))
	    loop t
      )
    (progn
      (setq sum 0)
      (setq num (distof (cdr (assoc 1 (entget text)))))
      (if (not (null num))
	(setq sum (+ sum num))
	(princ "\nTEXT chon khong phai la number!")
      )
      (while (and (setq gr (grread t 15 2)) loop)
	(cond
	  ((= (car gr) 5)
	   (and txt (entdel txt) (setq txt nil))
	   (if (cadr gr)
	     (progn
	       (setq pt	(polar (cadr gr)
			       (* pi 1.5)
			       (* 2 (cdr (assoc 40 (entget text))))
			)
	       )
	       (redraw text 3)
	       (setq
		 txt (entmakex
		       (list
			 '(0 . "TEXT")
			 '(100 . "AcDbEntity")
			 '(100 . "AcDbText")
			 (assoc 40 (entget text))
			 (cons 10 pt)
			 (cons 1 (strcat "Tong la: " (rtos sum 2 2)))
		       )
		     )			;entmakex_txt_sum
	       )
	     )
	   )
	  )				;cond gr 5
	  ((= (car gr) 3)
	   (if (and (setq ent (car (nentselp (cadr gr))))
		    (vl-position
		      (cdr (assoc 0 (entget ent)))
		      '("MTEXT" "TEXT")
		    )
	       )
	     (progn
	       (redraw ent 3)
	       (setq num (distof (cdr (assoc 1 (entget ent)))))
	       (if (not (null num))
		 (progn
		   (setq
		     pt1
		      (polar (cadr gr)
			     (* pi 1.5)
			     (* 2 (cdr (assoc 40 (entget text))))
		      )
		   )
		   (setq sum (+ sum num))
		   (and txt (entdel txt) (setq txt nil))
		   (setq
		     txt (entmakex
			   (list
			     '(0 . "TEXT")
			     '(100 . "AcDbEntity")
			     '(100 . "AcDbText")
			     (assoc 40 (entget text))
			     (cons 10 pt1)
			     (cons
			       1
			       (strcat "Tong la: " (rtos sum 2 2))
			     )

			   )
			 )		;entmakex_txt_sum
		   )

		 )			;progn
		 (princ "\nTEXT chon khong phai la number!")
	       )
	     )				;progn
	     (princ "\nBan chon khong phai la TEXT!")
	   )				;if
	  )				;cond gr 3
	  (t
	   (and txt (entdel txt) (setq txt nil))
	   (setq loop nil)
	  )				
	)				;COND
      )
    )					;progn
  )					;if
  (command "regen")
  (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

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

×