Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

Nhờ Sửa Lisp


  • Please log in to reply
5 replies to this topic

#1 TUY DB

TUY DB

    Chưa sử dụng CAD

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

Đã gửi 17 August 2016 - 11:31 PM

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.c...0480_vexa_2.lsp


  • 0

#2 Cuong KTC

Cuong KTC

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 09 December 2016 - 01:57 PM

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


  • -2
Nguyễn Văn Cường (0166. 246. 3865)
Công Ty Cổ Phần Tư Vấn Thiết Kế Xây Dựng Giao Thông KTC

#3 Bee

Bee

    biết lệnh hatchedit

  • Members
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 95 (tàm tạm)

Đã gửi 09 December 2016 - 06:49 PM

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.c...0480_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 đó. ^_^


  • 0

#4 TUY DB

TUY DB

    Chưa sử dụng CAD

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

Đã gửi 10 December 2016 - 01:35 PM

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


  • 0

#5 Bee

Bee

    biết lệnh hatchedit

  • Members
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 95 (tàm tạm)

Đã gửi 12 December 2016 - 10:29 PM

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)
)

  • 0

#6 Bee

Bee

    biết lệnh hatchedit

  • Members
  • PipPipPipPip
  • 260 Bài viết
Điểm đánh giá: 95 (tàm tạm)

Đã gửi 12 December 2016 - 10:33 PM

 

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)
)

  • 0