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

[Yêu cầu] lisp cộng trừ nhân chia text

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

;----------------------------------------------------
;--------Nguyen The Anh-Road No2-RECO-TEDI-----------
;--------Standard command for edit section-----------
;----------------------------------------------------
(setq #tyle 0.001)
(setq tle 1)
(setq #height 0.34)
(setq #widthfactor 1)
(setvar "dimzin" 0)
;----------------------------------------------------
(defun c:setup()
        (if (not (and (/= #tyle 0) (/= #tyle nil))) (setq #tyle n1))
    (setq xau (strcat "New Scale (1/<" (rtos (/ 1 #tyle) 2 0) ">): "))
    (setq h1 (getreal xau))
    (if h1 (setq #tyle h1) (setq h1 #tyle))
(if (null #tyle) (setq #tyle (getreal "\Ty le (1/<1000>) :")))
 (if (null #tyle) (setq #tyle 0.001)) 
    (setq tle (/ 1 #tyle))
    (setq tle (/ tle 1000))
(setq #height (entsel "\nText lam mau:"))
    (if (null #height) (princ)
     (progn
      (setq ds (entget (car #height)))
      (setq #height (cdr (assoc 40 ds)))
      (setq #widthfactor (/ (distance (cdr (assoc 10 ds)) (cdr (assoc 11 ds)) ) 2)) 
     ) 
    )
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------==================
;=====Area for scale================================
;==========================================
(defun c:Ac ( / po ent dt dtc tle1)  
   (Start)
   (setq osmd1 (getvar "osmode"))
   (setvar "osmode" 0)
    (setq po (getpoint "/Chon 1 diem trong:") 
          dtc 0)
    (setvar "osmode" osmd1)
    (while po
       (command"bpoly" po "")
       (setq ent (entlast))
       (command"area" "e" ent)
       (setq dt (getvar "area")
	     dtc (+ dtc dt))
       (command "erase" ent "")
       (setvar "osmode" 0)
       (setq po (getpoint "/Diem trong tiep/<Enter> de ket thuc: "))
       (setvar "osmode" osmd1)       
    )
(setvar "osmode" 0)   
(setq dc (getpoint "/Diem dat Text:"))
(setq dt (rtos (* dtc tle tle) 2 2))
(setq dt1 dt)
(command ".text" dc #height "0" dt1)
(setvar "osmode" osmd1)
    (kthuc)
    (princ)
)
;------------------------------------------
;--------------==========------------------
;-------------Lenght for grow grass -----------
;==========================================
;-----------------------------------------=
(defun c:tca ()
 (start)
 (setvar "osmode" 33)
 (setq tco 0)
 (setq poo (getpoint "\<Start Point>:"))
 (setvar "osmode" 0)
(while poo
  (setq p1 poo)
  (setvar "osmode" 33)
  (setq p2 (getpoint "\<Second Point>:"))
  (setq kca (distance p1 p2))
  (setq tco (+ kca tco))
  (setq poo (getpoint "\<Enter> Stop/<Next Point>:"))
)
;*** End while ***
 (setq tco (* tco tle))
 (setq text1 (rtos tco 2 2))
 (setq dc (getpoint "\<Insert>:"))
 (command ".text" dc #height "0" text1)
 (kthuc)
 (princ)
)
;--------------------------------------
;======================================
;--------------------------------------
(defun laygiatri (  ds1  / gt1  gt) 
(setq 	gt1 (cdr (assoc 1 (entget ds1)))
	gt	(rtos (read gt1) 2 2)
)
)
;------------------------------------------------
(defun laygiatritru (  ds1 ds2  / gt1 gt2 gt) 
(setq 	gt1 (cdr (assoc 1 (entget ds1)))
	gt2  (cdr (assoc 1 (entget ds2)))
	gt	(rtos (- (read gt1 ) (read gt2)) 2 2)
)
)
;-------------------------------------------------
(defun laygiatritong (  ds1 ds2  / gt1 gt2 gt) 
(setq 	gt1 (cdr (assoc 1 (entget ds1)))
	gt2  (cdr (assoc 1 (entget ds2)))
	gt	(rtos (+ (read gt1 ) (read gt2)) 2 2)
)
)
;--------------------------------------------------
(defun layso ( thongbao / gtri a kq)
(setq a (entsel thongbao))
(and
	(/= a  nil)
	(= (type (setq gtri (assoc  1 (entget (car a))))) 'STR)
	(= (type (read gtri)) 'REAL)
)
 (setq kq gtri)
)
;---------------------------------------------------
;---------------------------------------------------
;---------------------------------------------------
;-------Thay Text cho Text--------------------------
;---------------------------------------------------
;---------------------------------------------------
;(defun c:sa ( / ds1 ds3 gt ds dsach)
;(setq
;	ds1 (car (entsel "\n Chi Text gia tri: "))
;	ds3 (car (entsel "\n Chi Text muon thay: " ))
;	ds  (entget ds3)
;	gt  (cons 1 (laygiatri ds1 )) 
;)
;	(entdel ds3)
;		(foreach tam 	ds
;			(if (/= (car tam)	1)	(setq dsach 	(append dsach (list tam)))
;						(setq dsach 	(append dsach (list gt)))
;			)
;		)
;	(entmake dsach)
;(princ)
;)
;------------------------------------------
(defun c:sa ()
 (setvar "Cmdecho" 0)
 (prompt "\n<<   Select Data             >>")
 (setq sstcong (entsel))
        (setq sdk (entget (car sstcong)))
        (if (= (cdr (assoc 0 sdk)) "TEXT")
            (setq tckl (cdr (assoc 1 sdk)))
            (prompt "\n<< ERROR : Nothing Text Selected. >>")
        )
 (prompt "\n<<   Select Text To Copy.  >>")
 (setq tcong (ssget))
 (setq sslen (sslength tcong))
      (while (> sslen 0)
        (setq stc (entget (ssname tcong (setq sslen (1- sslen)))))
        (if (= (cdr (assoc 0 stc)) "TEXT")
            (entmod (subst (cons 1 tckl) (assoc 1 Stc) Stc))
            (prompt "\n<< ERROR : Nothing Text Selected. >>")
        )
      )
  (setvar "Cmdecho" 1)
)
;------------------------------------------
;------------------------------------------
;------------------------------------------
;--------Tru 2 Text va thay Text-----------
;==========================================
;==========================================
;------------------------------------------
(defun c:Ta ( / ds1 ds2 ds3 gt ds dsach)
(setq
	ds1 (car (entsel "\nGia tri bi tru: "))
	ds2 (car (entsel "\nLuong can tru: " ))
	ds3 (car (entsel "\n Thay Text: " ))
	ds  (entget ds3)
	gt  (cons 1 (laygiatritru ds1 ds2))
)
	(entdel ds3)
		(foreach tam 	ds
			(if (/= (car tam)	1)	(setq dsach 	(append dsach (list tam)))
						(setq dsach 	(append dsach (list gt)))
			)
		)
	(entmake dsach)
(princ)
)
;----------------------------------------------------------
;----------------------------------------------------------
;----------------------------------------------------------
;--------------Sum value text---------------------------
;----------------------------------------------------------
;==========================================================
(defun c:ca ( / ds1 ds2 ds3 gt ds dsach)
(setq
	ds1 (car (entsel "\n Gia tri 1: "))
	ds2 (car (entsel "\n Gia tri 2: " ))
	ds3 (car (entsel "\n Thay Text/Gia tri: " ))
	ds  (entget ds3)
	gt  (cons 1 (laygiatritong ds1 ds2))
)
	(entdel ds3)
		(foreach tam 	ds
			(if (/= (car tam)	1)	(setq dsach 	(append dsach (list tam)))
						(setq dsach 	(append dsach (list gt)))
			)
		)
	(entmake dsach)
(princ)
)
;---------------Ham goc----------------------
(defun start ()
 (setq osmd (getvar "osmode"))
 (setq tex (getvar "texteval"))
 (setq cmd (getvar "cmdecho"))
 (setq angb (getvar "angbase"))
 (setq angd (getvar "angdir"))
 (setvar "texteval" 1)
)
(defun kthuc ()
 (setvar "osmode" osmd)
 (setvar "texteval" tex)
 (setvar "cmdecho" cmd)
 (setvar "angbase" angb)
 (setvar "angdir" angd)
 (princ)
)
;---------------------------------------------
;-----Evelation - Edit from "SuaTN.lsp"----
;----------------------------------------------
(defun c:cda ()
   (start)
   (setvar "osmode" 33)
   (setq p111 (getpoint "\nChon diem chuan :"))
   (setq c1 "caodo")
   (while (not (numberp c1))
   (setq c1 (car (entsel "\nChi cho text cao do cua diem chuan:")))
   (if (null c1) (princ)
     (if (/= (assoc 1 (entget c1)) nil)
      (setq c1 (read (cdr (assoc 1 (entget c1)))))
     )
   )
   )
  (setvar "osmode" 33)  
  (setq p211 (getpoint p111 "\nDiem can tinh : "))
   (while p211
    (setq px (* (- (cadr p211) (cadr p111)) tle))  
    (setq tet (+ c1 px))
    (setq tet (rtos tet 2 2))
    (setvar "osmode" 0)
    (setq dc (getpoint p211 "\nDiem chen : "))
    ;(setq dc (mapcar '- dc (list 0.0 #widthfactor)))
    ;(setq dc1 (mapcar '+ dc (list 0.0 (* #widthfactor 2.0)) ))
    (command "text" dc #height 90 tet "" "")
    (setvar "osmode" 33)  
    (setq p211 (getpoint p111 "\nDiem can tinh/<Enter> for End: "))
   );End While
  (setvar "osmode" 0)
 (kthuc)
 (princ)
)
;--------------------------------------------
;-----------Khoang cach le------------------
;--------------------------------------------
(defun c:kca ()
 (start)
 (setvar "osmode" 1)
 (setq p3 (getpoint "\nChon diem thu nhat : ")) 
 (while p3
  (setq p4 (getpoint p3 "\nChon diem thu hai : "))
  (setvar "osmode" 0)
  (setq kca (abs (- (car p3) (car p4))))
  (setq kca2 (abs (* kca tle)))
  (setq text (rtos kca2 2 2)) 
  (setq dc (getpoint "\nDiem chen : "))
 (if (>= kca2 1.0) (princ) 
                   (progn 
                   (if (>= kca 2.23)
                                  (setq height 2)
                                  (setq height (* kca 0.78))  
                   )                
                   (setq ddtext1 (list (+ (car dc) (/ height 2)) (- (cadr dc) 2.0)))
                   (setq ddtext2 (list (+ (car dc) (/ height 2)) (+ (cadr dc) 2.0)))
                   (command "text" dc #height 90 text "" "")
                   );end progn
  );end if
  (if (< kca2 1.0) (princ)
        (progn
        (setq ddtext1 (list (- (car dc) (/ kca 2.1)) (- (cadr dc) 1.0))); ***Tu 1m den 1.5m ***
        (setq ddtext2 (list (+ (car dc) (/ kca 2.1)) (- (cadr dc) 1.0)))
        (if (>= kca 7.5) (setq ddtext1 (list (- (car dc) 3.4) (- (cadr dc) 1.0))))
        (if (>= kca 7.5) (setq ddtext2 (list (+ (car dc) 3.4) (- (cadr dc) 1.0))))
        (command "text" dc #height 0 text "" "")
        )
  );end if
  (setvar "osmode" 1)
  (setq p3 (getpoint "\nChon diem thu nhat/<Enter> for End: ")) 
 );end while
 (setvar "osmode" 0)
  (kthuc)
 (princ)
)
;-------------------------------------
;--------------Nang Text 3D for SDSK---------------
;------------------------------------
(defun c:movet (/ ss ee e l k cd p)
   (command "UNDO" "begin")
   (setq ss (ssget))
   (if ss (progn
      (setq l (sslength ss))
      (setq k 0)
      (repeat l
         (setq e (ssname  ss k))
         (setq k (+ k 1))
         (setq ee (entget e))
         (if (= (cdr (assoc 0 ee) ) "TEXT")
             (progn
                (setq p (cdr (assoc 10 ee) ))
                (setq cd (cdr (assoc 1 ee)))
                (setq cd (atof cd))
                (setq p (list (car p) (cadr p) cd ))
                (setq ee (subst (cons 10 p) (assoc 10 ee) ee))
                (entmod ee)
                (entupd e)
             ) 
         ) 
      )  
   ))
   (command "UNDO" "end")   
)
;-------------------------------------------
;;;;;;;;;;;;;;;;;;;;;;
;;;;Tinh cong don;;;;;
;;;;;;;;;;;;;;;;;;;;;;
(defun c:ss()
 (setvar "CMDECHO" 0)
 (setvar "DIMZIN" 0)
 ;(setq pre (getint "\nSo chu so sau dau phay?"))
 (command "luprec" 2)  
 (setq co (getreal "\nGia tri can cong them:"))
 (SETQ TH (SSGET))
 (SETQ QUANT (SSLENGTH TH))
  (SETQ INDEX 0)
  (WHILE (< INDEX QUANT)
  (IF 
	  (AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TH INDEX)))))))      
     (PROGN
		 (setq s (entget (SSNAME TH INDEX)))
		   (setq otext (assoc 1 s))
		   (setq ot (cdr otext))
		   (setq ot (read (substr ot 1 )))
		   (setq nt (cons 1 (rtos (+ ot co) 2 2)))  
		   (setq s (subst nt otext s))
		   (entmod s)
     )
  	)
  (setq index (+ index 1))
 )
)

 

- bạn up code dạng này ko tải để xem đc, nhưng nhoc đoán mò là, bạn xem trong lsp dòng nào có hàm (rtos (.....) 2 2) thì cứ chuyển số 2 cuối thành 3 là đc =>

(rtos (....) 2 3)

Cảm ơn bạn nhé, lisp như thế này ạ. vì nó nhiều lệnh quá.

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 laygiatritru (  ds1 ds2  / gt1 gt2 gt) 
(setq gt1 (cdr (assoc 1 (entget ds1)))
gt2  (cdr (assoc 1 (entget ds2)))
gt (rtos (- (read gt1 ) (read gt2)) 2 3)
)
)
(defun laygiatritru (  ds1 ds2  / gt1 gt2 gt) 
(setq 	gt1 (cdr (assoc 1 (entget ds1)))
	gt2  (cdr (assoc 1 (entget ds2)))
	gt	(rtos (- (read gt1 ) (read gt2)) 2 3)
)
) 

 

- Nếu bạn chỉ mún phép trừ ra 3 số thập phân thì bạn kím cái hàm này (laygiatritru),  sửa dòng gt (rtos (.......) 2 3)

- số cuối cùng trong hàm (rtos) đó là số quyết định số thập phân mún lấy bao nhiêu, nếu không có để số cuối cùng đó chỉ để mỗi số 2 kia thì mặc định nó sẽ lấy theo units bạn set hiện tại trên bản vẽ là lấy bao nhiêu số thập phân

- cái trên là nhoc đã sữa cho bạn lệnh trừ ra 3 số thập phân rùi

  • 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

 

(defun laygiatritru (  ds1 ds2  / gt1 gt2 gt) 
(setq gt1 (cdr (assoc 1 (entget ds1)))
gt2  (cdr (assoc 1 (entget ds2)))
gt (rtos (- (read gt1 ) (read gt2)) 2 3)
)
)
(defun laygiatritru (  ds1 ds2  / gt1 gt2 gt) 
(setq 	gt1 (cdr (assoc 1 (entget ds1)))
	gt2  (cdr (assoc 1 (entget ds2)))
	gt	(rtos (- (read gt1 ) (read gt2)) 2 3)
)
) 

 

- Nếu bạn chỉ mún phép trừ ra 3 số thập phân thì bạn kím cái hàm này (laygiatritru),  sửa dòng gt (rtos (.......) 2 3)

- số cuối cùng trong hàm (rtos) đó là số quyết định số thập phân mún lấy bao nhiêu, nếu không có để số cuối cùng đó chỉ để mỗi số 2 kia thì mặc định nó sẽ lấy theo units bạn set hiện tại trên bản vẽ là lấy bao nhiêu số thập phân

- cái trên là nhoc đã sữa cho bạn lệnh trừ ra 3 số thập phân rùi

 một lần nữa cảm ơn bạn rất nhiều.

Ps diễn đàn hình như gõ tiếng việt bị lỗi thì phải, cứ nhảy lui con trỏ .

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 này bổ sung thêm phần ghi kết quả vào 1 text có sẵn .

 

(defun c:tinh()
(vl-load-com)
(initget 1 "+ - * /")
(setq ptinh (getkword "Chon phep tinh <+ - * />: "))

(cond ((= ptinh "+") ;;; cong
(prompt "\nChon text de cong:")
(setq ss (ssget '((0 . "TEXT")))
kqua 0)
(while (and ss (> (sslength ss) 0))
(setq kqua (+ kqua (atof (cdr (assoc 1 (entget (setq ent (ssname ss 0))))))))
(ssdel ent ss))
(princ kqua))

((= ptinh "*") ;;;nhan
(prompt "\nChon text de nhan:")
(setq ss (ssget '((0 . "TEXT")))
kqua 1)
(while (and ss (> (sslength ss) 0))
(setq kqua (* kqua (atof (cdr (assoc 1 (entget (setq ent (ssname ss 0))))))))
(ssdel ent ss))
(princ kqua))

((= ptinh "-") ;;;tru
(setq sobitru (car (entsel "\nChon so bi tru:"))
sotru (car (entsel "\nChon so tru:\n"))
kqua (- (atof (cdr (assoc 1 (entget sobitru))))
(atof (cdr (assoc 1 (entget sotru))))))
(princ kqua))

((= ptinh "/") ;;;chia
(setq sobichia (car (entsel "\nChon so bi chia:"))
sochia (car (entsel "\nChon so chia:\n"))
kqua (/ (atof (cdr (assoc 1 (entget sobichia))))
(atof (cdr (assoc 1 (entget sochia))))))
(princ kqua))
)
(if (not ssle) (setq ssle 0))
(setq obj (vlax-ename->vla-object (car (entsel "\nChon text de ghi ket qua:")))
ssle1 (getint (strcat "\nSo so le <" (itoa ssle) ">: ")))
(if ssle1 (setq ssle ssle1))
(vla-put-TextString obj (rtos kqua 2 ssle))
(princ)
)

Cái này tốt rồi nhưng bạn làm sao để mỗi lần mình làm nhiều lần nó có thể nhớ được thao tác mình làm trc đó làm mặc định được không? Cứ mỗi lần bấm 1 phép tính là cứ phải chọn lại phép tính " cộng, trừ, nhân, chia" thì hơi bất tiện xíu, thanks

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 thử cái này xem sao.

Đối với phép + và * bạn có thể chọn 1 lúc nhiều số, còn - và / thì chỉ có 2 số thôi.

 

 

(defun c:tinh()
  (initget 1 "+ - * /")
  (setq ptinh (getkword "Chon phep tinh : "))
  
  (cond ((= ptinh "+")  ;;; cong
	 (prompt "\nChon text de cong:")
	 (setq ss (ssget '((0 . "TEXT")))
	       tong 0)
	 (while (and ss (> (sslength ss) 0))
	   (setq tong (+ tong (atof (cdr (assoc 1 (entget (setq ent (ssname ss 0))))))))
	   (ssdel ent ss))
	 (princ tong))
	
	((= ptinh "*")  ;;;nhan
	 (prompt "\nChon text de nhan:")
	 (setq ss (ssget '((0 . "TEXT")))
	       tong 1)
	 (while (and ss (> (sslength ss) 0))
	   (setq tong (* tong (atof (cdr (assoc 1 (entget (setq ent (ssname ss 0))))))))
	   (ssdel ent ss))
	 (princ tong))

	((= ptinh "-")  ;;;tru
	 (setq sobitru (car (entsel "\nChon so bi tru:"))
	       sotru (car (entsel "\nChon so tru:\n"))
	       kq (- (atof (cdr (assoc 1 (entget sobitru))))
		     (atof (cdr (assoc 1 (entget sotru))))))	  
	 (princ kq))

	((= ptinh "/")  ;;;chia
	 (setq sobichia (car (entsel "\nChon so bi chia:"))
	       sochia (car (entsel "\nChon so chia:\n"))
	       kq (/ (atof (cdr (assoc 1 (entget sobichia))))
		     (atof (cdr (assoc 1 (entget sochia))))))	  
	 (princ kq))	
  )  
  (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

Bác có thể giúp em là lúc xuất kết quả ra text có sẵn thì khi chọn text nó sẽ thêm số lượng vào đầu text chứ không phải xóa dòng text đó để thêm số lượng vào,hoặc là xuất ra kết quả bằng thông báo được không. Cám ơn bác nhìu.

  • 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

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


×