Tue_NV
-
Số lượng nội dung
4260 -
Đã tham gia
-
Lần ghé thăm cuối
-
Ngày trúng
288
Bài đăng được đăng bởi Tue_NV
-
-
Chọn text là số
trong AutoLisp
Text thường có 2 dạng : Dạng các ký tự số và dạng các kỹ tự chữ.
Mình muốn xin Lisp khi chọn đối tượng đầu tiên bằng grid thì khi sử dụng Lisp sẽ chọn ra các đối tượng là số.
Và khi chọn đối tượng đầu tiên bằng grid thì khi sử dụng Lisp sẽ chọn ra các đối tượng là chữ.
Mong các anh em trên CADVIET giúp đỡ. Mình đang cần gấp lắm.
-
Mình có 2 cột số : Cột số 1 và cột số 2.
Đoạn lệnh Autolisp tính tích 2 cột số và cho ra cột số thứ 3.
Và sau khi chạy Lisp dưới đây, ta chọn cột 1 và chọn cột 2, nhập điểm chèn ở cột số 3, sẽ cho ra kết quả ở cột 3(là tích của cột 1 và cột 2)
Ý của mình ở đây là : giả sử cột thứ 3 đã có dãy số. Sau khi ta chọn cột 1, cột 2 và ta chọn giá trị thay thế là cột 3 thì các giá trị tích của cột 1 và cột 2 sẽ được thay thế ở cột 3.
Mong các anh em CADVIET giúp đỡ.
Xin chân thành cảm ơn.
http://www.cadviet.com/upfiles/Tich2cotso.zip
;......................................................................... (defun C:Bkl (/ l1 l2 Elist2 Elist1 n n1 n2 k m fp1 fp1 fp P3 l1 l2 yy1 yy2 y1 y2 y tyle ) (setvar "CMDECHO" 0) (princ "\nChon cot 1") (princ) (setq Elist1 (ssget '((0 . "TEXT")))) (princ "\nChon cot 2") (princ) (setq Elist2 (ssget '((0 . "TEXT")))) (setq tyle (getreal "\n Chia cho bao nhieu (1000) : ")) (if (not tyle) (setq tyle 1000.0)) (setq lt (getint "\n Lam tron den may chu so sau dau phay (2) : ")) (if (not lt) (setq lt 2)) (setq P3 (getpoint "\n Cho diem chen")) (setq n1 (sslength Elist1)) (setq n2 (sslength Elist2)) (setq n n1) ;****** ;Case 1 (if (= n1 n2) (progn (repeat n (setq k (- n1 1)) (trich k Elist1) (setq y1 y) (setq fp1 fp) (setq l1 (append (list (list y1 fp1)) l1)) (setq n1 (- n1 1)) );end repeat (repeat n (setq m (- n2 1)) (trich m Elist2) (setq y2 y) (setq fp2 fp) (setq l2 (append (list (list y2 fp2)) l2)) (setq n2 (- n2 1)) );end repeat (setq yy1 1) (while yy1 (setq yy1 (car (car l1))) (setq yy2 1) (repeat n (setq yy2 (car (car l2))) (if (and yy1 yy2 (< (abs (- yy1 yy2)) 2.0)) (progn (setq ff1 (cadr (car l1))) (setq ff2 (cadr (car l2))) (setq ff (/ (* ff1 ff2) tyle)) (Command "Text" "j" "c" (list (car P3) yy1) height "0" (rtos ff 2 lt)) );end progn );end if (setq l2 (append (cdr l2) (list (car l2)))) );end repeat (setq l1 (cdr l1)) );end while );end progn );end if (= n1 n2) ;******** ; CAse 2 (if (= 1 n2) (progn (repeat n (setq k (- n1 1)) (trich k Elist1) (setq y1 y) (setq fp1 fp) (setq l1 (append (list (list y1 fp1)) l1)) (setq n1 (- n1 1)) );end repeat (trich 0 Elist2) (setq y2 y) (setq fp2 fp) (setq l2 (list (list y2 fp2))) (setq ff2 (cadr (car l2))) (setq yy1 1) (while yy1 (setq yy1 (car (car l1))) (repeat n (setq ff1 (cadr (car l1))) (setq ff (/ (* ff1 ff2) tyle)) (Command "Text" "j" "c" (list (car P3) yy1) height "0" (rtos ff 2 lt)) );end repeat (setq l1 (cdr l1)) );end while );end progn );end if (= 1 n2) (princ) ) ;--------------------------------------------------------------------------- (defun trich ( k Elist / stpoint ename infor) (setq ename (ssname Elist k)) (setq infor (entget ename)) (if (= (cdr (assoc 0 infor)) "TEXT" ) (progn (setq fp (read (cdr (assoc 1 infor)))) ;Gia tri cua text (setq stpoint (cdr (assoc 10 infor))) ;Diem chen cua text (setq y (cadr stpoint)) ;Tung do cua text ) ) (setq height (cdr (assoc 40 infor))) ;Chieu cao cua text ) ;--------------------------------------------------------------------------- -
Mình có đôi lời góp ý về phần mềm FASTCAD và NoCAD :
- Mọi người thì có những phong cách vẽ khác nhau, từ cách định dạng Dimstyle, Textstyle đến đường nét, màu sắc của đường vẽ. Trong FASTCAD, đầu tiên vào thanh Menu lệnh gọi KHOITAOBANVE để khởi tạo File BVECHUAN.dwg mà tác giả đã tạo ra. Trong File BVECHUAN.dwg này, tác giả đã định ra các Dimstyle, Textstyle, Layer, BLOCK, với những kiểu cách, màu sắc theo ý của mình. Bạn có thể chỉnh lại các Font chữ, kiểu, màu sắc ở trong Dimstyle, Textstyle theo ý của riêng mình.
- Nhưng trong phần mềm NoCAD thì không có lệnh khởi tạo bản vẽ BVECHUAN.dwg. Mình có góp ý nho nhỏ với tác giả rằng trong phần mềm NoCAD, tác giả nên viết thêm lệnh khởi tạo bản vẽ BVECHUAN.dwg để mọi người có thể thay đổi Font chữ, kiểu, màu sắc ở trong Dimstyle, Textstyle theo ý của riêng mình trong File BVECHUAN.dwg
CHÚC TÁC GIẢ NHIỀU SỨC KHỎE.
-
1
-
Chọn text là số
trong AutoLisp
Đã đăng · Trả lời báo cáo
Đầu tiên, em xin cảm ơn bác Hoành đã hồi âm lại cho em.
Ý của em muốn là chọn đối tượng là số trước để xử lý.
Trong đoạn Code dưới đây ở trên diễn đàn CADVIET để tính tổng các số.
Nếu bảng tính của em chứa cả chữ lẫn số thì khi chọn đối tượng chứa cả chữ lẫn số thì lệnh sẽ không thực thi được .
Và ý của em là đầu tiên mình chọn các đối tượng bằng grid, sau đó em nhờ bác viết dùm em lệnh để chọn ra các đối tượng text là số. Sau đó, dựa trên các đối tượng text số chọn ra đó, ta thực hiện các phép toán số học. Nếu đối tượng có chứa text chữ thì các phép toán số học sẽ không thực thi được và chương trình sẽ báo lỗi. Em nghĩ điều này rất cần cho nhiều người lắm.
Tiện thể, em nhờ bác viết Lisp chọn ra các đối tượng là text chữ sau khi chọn đối tượng bằng Grid.
Mong bác Hoanh giúp đỡ. Cảm ơn bác nhiều lắm.
(defun C:cg()
(setvar "CMDECHO" 0)
(setq pre (getint "\nSo chu so sau dau phay?"))
(command "luprec" pre)
(setq tong 0)
(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 tong (+ ot tong))
)
)
(setq index (+ index 1))
)
(prompt "\n Chon gia tri can thay the")
(SETQ TT (SSGET))
(SETQ QUAN (SSLENGTH TT))
(SETQ INDE 0)
(WHILE (< INDE QUAN)
(IF
(AND(= "TEXT" (CDR (ASSOC 0 (SETQ A (ENTGET (SSNAME TT INDE)))))))
(PROGN
(setq s (entget (SSNAME TT INDE)))
(setq otext (assoc 1 s))
(setq ot (cdr otext))
(setq ot (read (substr ot 1 )))
(setq nt (cons 1 (rtos Tong 2)))
(setq s (subst nt otext s))
(entmod s)
)
)
(setq inde (+ inde 1))
)
)