Đến nội dung


Hình ảnh
- - - - -

Nhờ lisp tính toán các phép tính giá trị text có phần chữ và phần số


  • Please log in to reply
8 replies to this topic

#1 thinhquoc

thinhquoc

    biết pan

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

Đã gửi 30 August 2013 - 10:47 PM

Em nhờ các cao thủ viết giúp em lisp tính toán với text như này: em có 1 loạt text dạng TD1 , P1, TC1. . . ( Em là dân giao thông mà ), nay muốn các bác viết lisp dạng cộng trừ nhân chia sao cho phần chữ TD, P, TC giữ nguyên còn phần số thì thực hiện phép tính. (Ps: em đã tìm trên diễn đàn rồi nhưng không thấy lisp nào như vậy)


  • 0

#2 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 31 August 2013 - 09:57 AM

(defun LM:EditBox ( string / id )
(and
(< 0 (setq id (load_dialog "ACAD")))
(new_dialog "acad_txtedit" id)
(set_tile "text_edit" string)
(action_tile "text_edit" "(setq string $value)")
(if (zerop (start_dialog)) (setq string nil))
)
(if (< 0 id) (unload_dialog id))
string
)
(defun LM:ParseNumbers ( s )
(
(lambda ( l )
(read
(strcat "("
(vl-list->string
(mapcar
(function
(lambda ( a b c )
(if
(or
(< 47 b 58)
(and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
(and (= 46 b) (< 47 a 58) (< 47 c 58))
)
b 32
)
)
)
(cons nil l) l (append (cdr l) (list nil))
)
)
")"
)
)
)
(vl-string->list s)
)
)
(defun c:ttt (/ ss congthu e el dfx1 chudau chu dxf1Num newdxf1 i)
(setvar "cmdecho" 0)
(command "undo" "BE")
(if (not cal) (arxload "geomcal"))
(setq congthu (LM:EditBox "Nhap cong thuc voi x la phan so Vdu (x+10)*2"))
(setq ss (ssget (list (cons 0 "*TEXT") (cons 1 "P#*,p#*,td#*,TD#*,Td#*,tD#*,TC#*,tc#*,Tc#*,tC#*"))))
(repeat (setq i (sslength ss))
(setq
e (ssname ss (setq i (1- i)))
el (entget e)
dxf1 (cdr (assoc 1 el))
chudau (substr dxf1 1 1)
chu (if (or (= chudau "P") (= chudau "p")) chudau (substr dxf1 1 2))
dxf1Num (itoa (car (LM:ParseNumbers dxf1)))
newdxf1 (vl-string-subst dxf1Num "x" congthu)
newdxf1 (strcat chu (itoa (C:cal newdxf1)))
el (subst (cons 1 newdxf1) (assoc 1 el) el)
)
(entmod el)
)
(command "undo" "E")
(setvar "cmdecho" 1)
(princ "Viet boi DuongBaDiep - cadonline.duyxuyen.vn")
(princ)
)

 

 

- Tên lệnh : TTT

- Nhập công thức với x là phần số lấy từ text để tính toán

Ví dụ: Công thức là (x+10)*2 thì chọn P2 kết quả thành P24


  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#3 thinhquoc

thinhquoc

    biết pan

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

Đã gửi 02 September 2013 - 03:30 PM

thank bác rất nhiều. lisp của bác cơ bản đã giúp được choi công việc của e: Tuy nhiên bác có thể sửa một chút xíu nữa cho e được không: Em là dân giao thông, lâu lâu phải sửa tên cọc, lý trình. lisp của bác đã giải quyết được tên cọc trên trắc dọc. Phiền bác sửa sao cho lisp sử dụng được đối với phần chữ như cọc:TD2; cọc:P2; cọc TC2; và các cọc lẻ Cọc:2 chẳng hạn. (Nếu được bác viết lisp sử dụng mà phần chữ nội dung gì cũng áp dụng được thì càng tốt)


  • 0

#4 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 02 September 2013 - 07:29 PM

Do yêu cầu ban đầu của bạn là sửa cho cọc TD, P va TC nên mói viết vậy

Tôi đã sửa lại để phần chữ bất kỳ đây (Mọi text kết thúc bằng số là OK).

Bạn lưu ý, khi yêu cầu lisp bạn nên gởi file bản vẽ lên để mọi người viết và test nhé

 

(defun LM:EditBox ( string / id )
(and
(< 0 (setq id (load_dialog "ACAD")))
(new_dialog "acad_txtedit" id)
(set_tile "text_edit" string)
(action_tile "text_edit" "(setq string $value)")
(if (zerop (start_dialog)) (setq string nil))
)
(if (< 0 id) (unload_dialog id))
string
)
(defun LM:ParseNumbers ( s )
(
(lambda ( l )
(read
(strcat "("
(vl-list->string
(mapcar
(function
(lambda ( a b c )
(if
(or
(< 47 b 58)
(and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
(and (= 46 b) (< 47 a 58) (< 47 c 58))
)
b 32
)
)
)
(cons nil l) l (append (cdr l) (list nil))
)
)
")"
)
)
)
(vl-string->list s)
)
)
(defun LM:ParseLetter (s)
(setq lst (vl-string->list s))
(vl-list->string (vl-remove-if '(lambda (x) (member x (list 48 49 50 51 52 53 54 55 56 57 58))) lst))
)
(defun c:ttt (/ ss congthu e el dfx1 newdxf1 i)
(setvar "cmdecho" 0)
(command "undo" "BE")
(if (not cal) (arxload "geomcal"))
(setq congthu (LM:EditBox "Nhap cong thuc voi x la phan so Vdu (x+10)*2"))
(setq ss (ssget (list (cons 0 "*TEXT") (cons 1 "*#"))))
(repeat (setq i (sslength ss))
(setq
e (ssname ss (setq i (1- i)))
el (entget e)
dxf1 (cdr (assoc 1 el))
newdxf1 (vl-string-subst (itoa (car (LM:ParseNumbers dxf1))) "x" congthu)
newdxf1 (strcat (LM:ParseLetter dxf1) (itoa (C:cal newdxf1)))
el (subst (cons 1 newdxf1) (assoc 1 el) el)
)
(entmod el)
)
(command "undo" "E")
(setvar "cmdecho" 1)
(princ "Viet boi DuongBaDiep - cadonline.duyxuyen.vn")
(princ)
)


  • 2

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#5 thinhquoc

thinhquoc

    biết pan

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

Đã gửi 02 September 2013 - 09:54 PM

thank bác rất nhiều, lần sau em sẽ rút kinh nghiệm


  • 0

#6 vanhiep1611

vanhiep1611

    Chưa sử dụng CAD

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

Đã gửi 14 May 2014 - 03:49 PM

Xin chào bạn 

hochoaivandot

Hiện công việc của tôi đang cần các ứng dụng như trong lisp của bạn (link dưới)

http://cadonline.duy...lication&lid=17

Bạn có thể chia sẻ được không ?

Nếu được bạn có thể share lên đây cho tôi và anh em cadviet

Cám ơn bạn trước


  • 0

#7 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 107 (tàm tạm)

Đã gửi 15 May 2014 - 08:24 AM

Xin chào bạn 

hochoaivandot

Hiện công việc của tôi đang cần các ứng dụng như trong lisp của bạn (link dưới)

http://cadonline.duy...lication&lid=17

Bạn có thể chia sẻ được không ?

Nếu được bạn có thể share lên đây cho tôi và anh em cadviet

Cám ơn bạn trước

 

Đăng ký thành viên website www.cadonline.duyxuyen.vn. Sau đó đăng nhập. Vào lại Mục giới thiệu ứng dụng (Ngay tại Link bạn ghi trên)

Rồi download về dùng. 

Lisp trên mình sưu tầm nhưng không nhớ tác giả và Link gốc.

Muốn trao đổi những nội dung liên quan trên trang cá nhân của mình, bạn hãy liên hệ qua email. Đừng thảo luận trên cadviet.com người khác đọc không hiểu.

Cảm ơn bạn


  • 1

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 15 May 2014 - 08:44 AM

.........

Hiện công việc của tôi đang cần các ứng dụng như trong lisp của bạn (link dưới)

http://cadonline.duy...lication&lid=17

Bạn có thể chia sẻ được không ?

Nếu được bạn có thể share lên đây cho tôi và anh em cadviet

Cám ơn bạn trước

 

Bạn có thể  sử dụng Chương trình tính toán Cộng trừ Nhân Chia giá trị của Block Attribute; Text với 1 số hoặc 1 biểu thức

 của mình đã viết ở đây :

Bài viết số :1354 

http://www.cadviet.com/forum/topic/13203-viet-lisp-theo-yeu-cau-phan-2/page-68


  • 1

#9 vanhiep1611

vanhiep1611

    Chưa sử dụng CAD

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

Đã gửi 15 May 2014 - 02:22 PM

Cảm ơn các bạn. 

hochoaivandot

 

Tue_NV

Mình sẽ rút kinh nghiệm 


  • 0