Đến nội dung


Hình ảnh
- - - - -

From: Lisp công trừ trong text


  • Please log in to reply
18 replies to this topic

#1 MTRUNGTDH

MTRUNGTDH

    biết pan

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

Đã gửi 23 October 2009 - 01:01 PM

Bạn nào có Lisp mà có thể tự động cộng trừ các giá trị tẽt trong CAD một giá trị lẻ như lệnh TCOUNT (nhưng lẹnh này chỉ áp dụng với giá trị cộng trừ là số chẳn. Bản vẻ của mình có nhiều giá trị cần cộng trừ thêm một giá trị nếu dủng ED thì lâu quá.
Cảm ơn truớc mọi người.
mtrungtdh@gmail.com
  • 1

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 23 October 2009 - 02:10 PM

Bạn nào có Lisp mà có thể tự động cộng trừ các giá trị tẽt trong CAD một giá trị lẻ như lệnh TCOUNT (nhưng lẹnh này chỉ áp dụng với giá trị cộng trừ là số chẳn. Bản vẻ của mình có nhiều giá trị cần cộng trừ thêm một giá trị nếu dủng ED thì lâu quá.
Cảm ơn truớc mọi người.
mtrungtdh@gmail.com

Bạn hãy chịu khó kiếm trên diễn đàn này nhé. Các lísp loại này đã có khá nhiều bài viết rồi đó bạn ạ. Do không biết bạn cần cụ thể ra sao nên tốt nhất là bạn phải nêu rõ yêu cầu và cho ví dụ cụ thể mới có thể viết được bạn ạ.
Trong các lisp sẵn có trên diễn đàn, nếu bạn thấy có cái nào gần giống với cái bạn cần thì hãy post lên và nói rõ chỗ chưa đạt yêu cầu của bạn, mọi người sẽ giúp bạn hiệu chỉnh lại cho phù hợp.
Chúc bạn vui khi tham gia diễn đàn,.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 MTRUNGTDH

MTRUNGTDH

    biết pan

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

Đã gửi 23 October 2009 - 07:59 PM

Bạn hãy chịu khó kiếm trên diễn đàn này nhé. Các lísp loại này đã có khá nhiều bài viết rồi đó bạn ạ. Do không biết bạn cần cụ thể ra sao nên tốt nhất là bạn phải nêu rõ yêu cầu và cho ví dụ cụ thể mới có thể viết được bạn ạ.
Trong các lisp sẵn có trên diễn đàn, nếu bạn thấy có cái nào gần giống với cái bạn cần thì hãy post lên và nói rõ chỗ chưa đạt yêu cầu của bạn, mọi người sẽ giúp bạn hiệu chỉnh lại cho phù hợp.
Chúc bạn vui khi tham gia diễn đàn,.

Ý mình là muốn trừ đi tất cả các số đuợc chọn một giá trị nào đó (cũng gần tuơng tự như đánh số thứ tự)
ví dụ: có các sô : 45.24 ; 55.67 ;78.53
giờ mình muốn trừ đi các số trên một giá trị là 0.2:
kết quả cuối cùng các số đuợc chọn là: 45.04 ; 55.47 ; 78.33
Nếu dùng lisp đánh số thứ tự thì chỉ tính đuợc cho các số nguyên thôi.
  • 0

#4 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 23 October 2009 - 09:14 PM

Ý mình là muốn trừ đi tất cả các số đuợc chọn một giá trị nào đó (cũng gần tuơng tự như đánh số thứ tự)
ví dụ: có các sô : 45.24 ; 55.67 ;78.53
giờ mình muốn trừ đi các số trên một giá trị là 0.2:
kết quả cuối cùng các số đuợc chọn là: 45.04 ; 55.47 ; 78.33
Nếu dùng lisp đánh số thứ tự thì chỉ tính đuợc cho các số nguyên thôi.

bạn dùng thử lisp này
(defun C:TRU (/ OLDDIMZIN SS SOTRU DSSBT SBT)
(vl-load-com)
(setq OLDIMZIN (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
(princ "\nChon cac so bi tru")
(setq SS (ssget '((0 . "TEXT"))))
(if _SOTRU
(progn
(initget 4)
(if (null (setq SOTRU (getreal (strcat "\nNhap so tru: <" (rtos _SOTRU) "> "))))
(setq SOTRU _SOTRU)
)
)
(progn
(initget (+ 1 4))
(setq SOTRU (getreal "\nNhap so tru: "))
)
)
(setq DSSBT (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))))
(foreach SBT DSSBT (vla-put-textstring SBT (rtos (- (atof (vla-get-textstring SBT)) SOTRU))))
(setq _SOTRU SOTRU)
(setvar "DIMZIN" OLDIMZIN)
(princ)
)

  • 1

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#5 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 24 October 2009 - 01:10 PM

Bạn dùng thử cái này nhé, Lisp này cho phép cộng thêm 1 giá trị vào Text
CODE
;;;=========== Cong Text voi so =======

(defun c:add ()
(setvar "CMDECHO" 0)
;Lay gia tri cua text thu nhat:
(setq s (entget (car (entsel "\n Select Text number: "))))
(setq otext (assoc 1 s))
(setq ot (cdr otext))
(setq ot (read (substr ot 1)))

;Lay gia tri cua text thu hai:
(command "luprec" pre)
(if ot1 (setq ot2 (getreal (strcat "\n + them: <" (rtos ot1) ">:")))
(setq ot1 (getreal "\nValue Add :" )))

(if ot2 (setq ot1 ot2))



(setq giatri (entget (car (entsel "\n Select Text to results: "))))
(command "luprec" "2")
(setq gia (assoc 1 giatri))
;(setq gia (rtos gia 2 2))
(setq nt1 (cons 1 (rtos (+ ot ot1) 2 2)))
(setq giatri (subst nt1 gia giatri))
(entmod giatri)
(princ)
)
  • -1
Hoàng Giang

#6 MTRUNGTDH

MTRUNGTDH

    biết pan

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

Đã gửi 28 October 2009 - 04:32 PM

Bạn dùng thử cái này nhé, Lisp này cho phép cộng thêm 1 giá trị vào Text
CODE
;;;=========== Cong Text voi so =======

(defun c:add ()
(setvar "CMDECHO" 0)
;Lay gia tri cua text thu nhat:
(setq s (entget (car (entsel "\n Select Text number: "))))
(setq otext (assoc 1 s))
(setq ot (cdr otext))
(setq ot (read (substr ot 1)))

;Lay gia tri cua text thu hai:
(command "luprec" pre)
(if ot1 (setq ot2 (getreal (strcat "\n + them: <" (rtos ot1) ">:")))
(setq ot1 (getreal "\nValue Add :" )))

(if ot2 (setq ot1 ot2))
(setq giatri (entget (car (entsel "\n Select Text to results: "))))
(command "luprec" "2")
(setq gia (assoc 1 giatri))
;(setq gia (rtos gia 2 2))
(setq nt1 (cons 1 (rtos (+ ot ot1) 2 2)))
(setq giatri (subst nt1 gia giatri))
(entmod giatri)
(princ)
)



Cảm ơn bạn nhiều lắm, mình đang cần lisp trừ đi một giá trị, nếu bạn sửa lại đoạn code trên để có tính năng trừ đi một số thì quá tốt, ai biết thì giúp mình với nha! thanks!
  • 0

#7 MTRUNGTDH

MTRUNGTDH

    biết pan

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

Đã gửi 28 October 2009 - 04:36 PM

bạn dùng thử lisp này

(defun C:TRU (/ OLDDIMZIN SS SOTRU DSSBT SBT)
(vl-load-com)
(setq OLDIMZIN (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
(princ "\nChon cac so bi tru")
(setq SS (ssget '((0 . "TEXT"))))
(if _SOTRU
(progn
(initget 4)
(if (null (setq SOTRU (getreal (strcat "\nNhap so tru: <" (rtos _SOTRU) "> "))))
(setq SOTRU _SOTRU)
)
)
(progn
(initget (+ 1 4))
(setq SOTRU (getreal "\nNhap so tru: "))
)
)
(setq DSSBT (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))))
(foreach SBT DSSBT (vla-put-textstring SBT (rtos (- (atof (vla-get-textstring SBT)) SOTRU))))
(setq _SOTRU SOTRU)
(setvar "DIMZIN" OLDIMZIN)
(princ)
)



không biết sao mình dùng thử lisp trên thì bị báo lỗi, nhờ bạn xem lại hộ mình với. Thanks!
  • 0

#8 MTRUNGTDH

MTRUNGTDH

    biết pan

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

Đã gửi 28 October 2009 - 04:37 PM

không biết sao mình dùng thử lisp trên thì bị báo lỗi "Chon cac so bi tru; error: too many arguments", nhờ bạn xem lại giúp mình với. Thanks!


  • 0

#9 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 28 October 2009 - 05:00 PM

không biết sao mình dùng thử lisp trên thì bị báo lỗi, nhờ bạn xem lại hộ mình với. Thanks!

Mình đã kiểm tra rồi nhưng không thấy lỗi

Command: TRU
Chon cac so bi tru
Select objects: Specify opposite corner: 4 found
Select objects:
Nhap so tru: <0.500> .2


Để mình thử máy khác xem sao
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 28 October 2009 - 05:12 PM


Chào MTRUNGTDH
 Code có tính năng cộng ; trừ ; nhân ; chia Text với 1 số chỉ trong 1 Code Lisp duy nhất.
Bạn vào đây xem nhé :
Hướng dẫn sử dụng Code đó nằm ở đây :

Bài viết số 90, bài viết số 96- Viết Lisp theo yêu cầu phần 2
Và code đó nằm ở đây :

Bài viết số 105

 


  • 0

#11 MTRUNGTDH

MTRUNGTDH

    biết pan

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

Đã gửi 29 October 2009 - 07:55 AM

bạn dùng thử lisp này

(defun C:TRU (/ OLDDIMZIN SS SOTRU DSSBT SBT)
(vl-load-com)
(setq OLDIMZIN (getvar "DIMZIN"))
(setvar "DIMZIN" 0)
(princ "\nChon cac so bi tru")
(setq SS (ssget '((0 . "TEXT"))))
(if _SOTRU
(progn
(initget 4)
(if (null (setq SOTRU (getreal (strcat "\nNhap so tru: <" (rtos _SOTRU) "> "))))
(setq SOTRU _SOTRU)
)
)
(progn
(initget (+ 1 4))
(setq SOTRU (getreal "\nNhap so tru: "))
)
)
(setq DSSBT (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))))
(foreach SBT DSSBT (vla-put-textstring SBT (rtos (- (atof (vla-get-textstring SBT)) SOTRU))))
(setq _SOTRU SOTRU)
(setvar "DIMZIN" OLDIMZIN)
(princ)
)



Nhờ bạn xem giúp mình khi dùng lisp trên thì bị báo lỗi (; error: bad argument type: lselsetp nil) khi nhập số trừ. Thanks!
  • 0

#12 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 29 October 2009 - 02:47 PM

Nhờ bạn xem giúp mình khi dùng lisp trên thì bị báo lỗi (; error: bad argument type: lselsetp nil) khi nhập số trừ. Thanks!

Không thấy lỗi bạn ơi!
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#13 banbe0274

banbe0274

    biết vẽ pline

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

Đã gửi 10 July 2014 - 05:15 PM

Nhờ Các Bác viết giúp cho lisp  (+-*/)  vào cụm text có chứa cả chữ lẫn số như ví dụ sau:http://www.cadviet.c...72353_vidu1.dwg


  • 0

#14 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 11 July 2014 - 10:30 AM

Bạn thử cái này. Khi nó hỏi "Phep tinh:" thì bạn gõ vào, thí dụ "+2" hay "-3" , "*4", "/5" thì nó sẽ đổi.

Cái này chỉ dùng với text, không dùng cho mtext và nếu trong chữ có nhiều số thì chỉ đổi số đầu tiên.

(defun C:ctnc(/ tg obj nd so nd1)
  (setvar 'dimzin 8)
  (setq tg (getstring "\nPhep tinh:" ))  
  (foreach v (vl-remove-if 'listp (mapcar 'cadr (ssnamex  (ssget (list '(0 . "TEXT") )))))
    (setq nd (vla-get-TextString (setq obj (vlax-ename->vla-object v)))
 so (rtos (atof (vl-list->string (mapcar '(lambda(x) (if (or (= 46 x) (<= 48 x 57)) x 32)) (vl-string->list nd)))))
 nd1 (rtos (cal (strcat so tg)))
 nd (vl-string-subst nd1 so nd)
    )
    (vla-put-TextString obj nd)
   )
)

  • 0

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 11 July 2014 - 12:06 PM

Tôi đang dùng Cad2007. Không biết Cad đời cao thế nào, chứ với Cad<=2007, nếu lisp có dùng hàm CAL mà thiếu dòng load lệnh Cal, hoặc mở Cad mà chưa dùng lệnh Cal 1 lần thì lisp trên sẽ báo lỗi: ; error: no function definition: CAL

Tôi có nhắc điều này với Tot77 1 lần rồi.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#16 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 11 July 2014 - 12:34 PM

Trước tôi dùng 2004 cũng chẳng thấy báo lỗi, giờ 2010 cũng vậy. Tôi nghĩ hàm và lệnh cal thì cad tự động load vì nó đã trở thành hàm và lệnh cơ bản của cad. Tôi chưa thấy trường hợp nào báo lỗi, trừ phi file arx bị mất.


  • 0

#17 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 11 July 2014 - 12:38 PM

Tôi đang dùng Cad2007. Không biết Cad đời cao thế nào, chứ với Cad<=2007, nếu lisp có dùng hàm CAL mà thiếu dòng load lệnh Cal, hoặc mở Cad mà chưa dùng lệnh Cal 1 lần thì lisp trên sẽ báo lỗi: ; error: no function definition: CAL

Tôi có nhắc điều này với Tot77 1 lần rồi.

 

 

Trước tôi dùng 2004 cũng chẳng thấy báo lỗi, giờ 2010 cũng vậy. Tôi nghĩ hàm và lệnh cal thì cad tự động load vì nó đã trở thành hàm và lệnh cơ bản của cad. Tôi chưa thấy trường hợp nào báo lỗi, trừ phi file arx bị mất.

Cad2010 của tôi lại báo lỗi : error: no function definition: CAL

 

Chắc Cad của Tot77 có set gì đó trong file acad.lsp (acad2010.lsp)


  • 0

#18 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 11 July 2014 - 12:46 PM

Vậy các bạn thêm dòng (arxload "geomcal.arx") vào file trên vậy.


  • 0

#19 banbe0274

banbe0274

    biết vẽ pline

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

Đã gửi 12 July 2014 - 09:54 AM

Thank Bac tot77


  • 0