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.
Đăng nhập để thực hiện theo  
NguyenNgocSon

[Nhờ chỉnh sửa] Code lisp ghép chuỗi

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

Em có code lisp sau:

(vla-put-TextString e (itoa(setq i (1+ i))))  )  ))

Giờ em muốn sửa code để thêm 1 ký tự mới vào chuỗi trên như sau:

(vla-put-TextString e (strcat "A" itoa(setq i (1+ i))))  )  )))

Nhưng báo lỗi: error: bad argument type: stringp #<SUBR @084d5384 ITOA>

Nhờ các bác xem giúp?

Cám ơn !

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

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=13203&st=2460
(defun c:dstt (/ doc i ins lst)
 (vl-load-com)
 (defun sort_lst (lst dk)
 (if (= dk "Left")
(vl-sort lst '(lambda (x y)
 	(or (< (car (cadr x)) (car (cadr y)))
  (and (= (car (cadr x)) (car (cadr y)))
   	(< (cadr (cadr x)) (cadr (cadr y))) )) ))
(vl-sort lst '(lambda (x y)
 	(or (> (car (cadr x)) (car (cadr y)))
  (and (= (car (cadr x)) (car (cadr y)))
   	(< (cadr (cadr x)) (cadr (cadr y))) )) ))) )

 (if (ssget '((0 . "TEXT,mtext")))
(progn
 	(initget 0 "Left Right")
 	(setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
	(cond (tp) ((setq tp "Right"))  )
	">: "  ) )  )
  	(tp)  )  )
 	(setq sbd (cond ((getint (strcat "\nVao so bat dau <"
	(itoa (cond (sbd) ((setq sbd 1)) ) )
	">: " ) ) )
    	(sbd) )  )  
 	(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
 	(vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
  (setq ins (vlax-get e 'InsertionPoint))
  (setq ins (vlax-get e 'TextAlignmentPoint)) )
(setq lst (cons (list e ins )lst)))
 	(setq i (1- sbd)
	lst (sort_lst lst tp )
	lst (append (mapcar 'car lst) )  )
 	(foreach e lst
(vla-put-TextString e (itoa(setq i (1+ i))))  )  ))
 (princ))

Mình có lisp này tải trên diễn đàn. Giờ mình muốn thêm tổng số đối tượng text được chọn sau hàm vla-put-TextString mà không biết code thế nào?

Ví dụ: số đối tượng chọn là 5 => lisp ĐSTT:1/05,2/05,3/05,4/05,5/05

Ví dụ: số đối tượng chọn là 12 => lisp ĐSTT:1/12,...,12/12

Cám ơn !

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
Doan Van Ha    2.676

Mình có lisp này tải trên diễn đàn. Giờ mình muốn thêm tổng số đối tượng text được chọn sau hàm vla-put-TextString mà không biết code thế nào?

Ví dụ: số đối tượng chọn là 5 => lisp ĐSTT:1/05,2/05,3/05,4/05,5/05

Ví dụ: số đối tượng chọn là 12 => lisp ĐSTT:1/12,...,12/12

Cám ơn !

Thay

(vla-put-TextString e (itoa (setq i (1+ i)))))))

Bằng

(vla-put-TextString e (strcat (itoa (setq i (1+ i))) "/" (if (< (length lst) 10) (strcat "0" (itoa (length lst))) (itoa (length lst))))))))

  • 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
Tue_NV    3.841

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=13203&st=2460
(defun c:dstt (/ doc i ins lst)
 (vl-load-com)
 (defun sort_lst (lst dk)
 (if (= dk "Left")
(vl-sort lst '(lambda (x y)
 	(or (< (car (cadr x)) (car (cadr y)))
  (and (= (car (cadr x)) (car (cadr y)))
   	(< (cadr (cadr x)) (cadr (cadr y))) )) ))
(vl-sort lst '(lambda (x y)
 	(or (> (car (cadr x)) (car (cadr y)))
  (and (= (car (cadr x)) (car (cadr y)))
   	(< (cadr (cadr x)) (cadr (cadr y))) )) ))) )

 (if (ssget '((0 . "TEXT,mtext")))
(progn
 	(initget 0 "Left Right")
 	(setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
(cond (tp) ((setq tp "Right"))  )
">: "  ) )  )
  	(tp)  )  )
 	(setq sbd (cond ((getint (strcat "\nVao so bat dau <"
(itoa (cond (sbd) ((setq sbd 1)) ) )
">: " ) ) )
		(sbd) )  )  
 	(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
 	(vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
  (setq ins (vlax-get e 'InsertionPoint))
  (setq ins (vlax-get e 'TextAlignmentPoint)) )
(setq lst (cons (list e ins )lst)))
 	(setq i (1- sbd)
lst (sort_lst lst tp )
lst (append (mapcar 'car lst) )  )
 	(foreach e lst
(vla-put-TextString e (itoa(setq i (1+ i))))  )  ))
 (princ))

Mình có lisp này tải trên diễn đàn. Giờ mình muốn thêm tổng số đối tượng text được chọn sau hàm vla-put-TextString mà không biết code thế nào?

Ví dụ: số đối tượng chọn là 5 => lisp ĐSTT:1/05,2/05,3/05,4/05,5/05

Ví dụ: số đối tượng chọn là 12 => lisp ĐSTT:1/12,...,12/12

Cám ơn !

Bạn tham khảo :


(defun c:dstt (/ doc i ins lst)
 (vl-load-com)
 (defun sort_lst (lst dk)
 (if (= dk "Left")
(vl-sort lst '(lambda (x y)
  (or (< (car (cadr x)) (car (cadr y)))
  (and (= (car (cadr x)) (car (cadr y)))
    (< (cadr (cadr x)) (cadr (cadr y))) )) ))
(vl-sort lst '(lambda (x y)
  (or (> (car (cadr x)) (car (cadr y)))
  (and (= (car (cadr x)) (car (cadr y)))
    (< (cadr (cadr x)) (cadr (cadr y))) )) ))) )

 (if (ssget '((0 . "TEXT,mtext")))
(progn
  (initget 0 "Left Right")
  (setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
 (cond (tp) ((setq tp "Right"))  )
 ">: "  ) )  )
   (tp)  )  )
  (setq sbd (cond ((getint (strcat "\nVao so bat dau <"
 (itoa (cond (sbd) ((setq sbd 1)) ) )
 ">: " ) ) )
     (sbd) )  )  
  (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  (vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
  (setq ins (vlax-get e 'InsertionPoint))
  (setq ins (vlax-get e 'TextAlignmentPoint)) )
(setq lst (cons (list e ins )lst)))
  (setq i (1- sbd)
 lst (sort_lst lst tp )
 lst (append (mapcar 'car lst) )  )
  (foreach e lst
(vla-put-TextString e (strcat (itoa(setq i (1+ i))) "/" (them0 (itoa (length lst)))) ) )  ))
 (princ))
(defun them0 (str)
(if (< (atof str) 10) (strcat "0" str) str)
)

  • 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
Doan Van Ha    2.676

Cám ơn bác nhiều. Nhân tiện bác cho e hỏi nếu muốn đánh STT theo chiều: từ trái qua phải , rồi từ trên xuống dưới thì ntn ah ?

Thân !

Thay 2 dòng

(< (cadr (cadr x)) (cadr (cadr y)))

bằng dấu ngược lại (tức là thay < bởi >)

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
Doan Van Ha    2.676

Mình thử thay như trên, thấy không đúng thứ tự trên ?

Bạn có thay đủ cả 2 dòng không? Xem lại cẩn thận đi.

Nếu không được thì post bản vẽ lên

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
Doan Van Ha    2.676
(defun c:dstt (/ doc i ins lst)
(vl-load-com)
(defun sort_lst (lst dk)
 (if (= dk "Left")
  (vl-sort lst '(lambda (x y)
	(or
 	(> (cadr (cadr x)) (cadr (cadr y)))
 	(and
  	(= (cadr (cadr x)) (cadr (cadr y)))
  	(< (car (cadr x)) (car (cadr y)))))))	;>
  (vl-sort lst '(lambda (x y)
	(or
 	(> (cadr (cadr x)) (cadr (cadr y)))
 	(and
  	(= (cadr (cadr x)) (cadr (cadr y)))
  	(< (car (cadr x)) (car (cadr y)))))))))	;>
 (if (ssget '((0 . "TEXT,mtext")))
(progn
 	(initget 0 "Left Right")
 	(setq tp (cond ((getkword (strcat "\nBat dau tu: [Left/Right] <"
	(cond (tp) ((setq tp "Right")))
	">: "  ) )  )
  	(tp)  )  )
 	(setq sbd (cond ((getint (strcat "\nVao so bat dau <"
	(itoa (cond (sbd) ((setq sbd 1))))
	">: " )))
		(sbd))) 
 	(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
 	(vlax-for e (vla-get-ActiveSelectionSet doc)
(if (= (vla-get-Alignment e) 0)
  (setq ins (vlax-get e 'InsertionPoint))
  (setq ins (vlax-get e 'TextAlignmentPoint)))
(setq lst (cons (list e ins )lst)))
 	(setq i (1- sbd)
	lst (sort_lst lst tp )
	lst (append (mapcar 'car lst)))
 	(foreach e lst
;(vla-put-TextString e (itoa (setq i (1+ i)))))))
(vla-put-TextString e (strcat (itoa (setq i (1+ i))) "/" (if (< (length lst) 10) (strcat "0" (itoa (length lst))) (itoa (length lst))))))))
 (princ))

  • Vote tăng 2

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ám ơn Bác.Em đã chỉnh sửa được rồi

là như này:

(vl-sort lst '(lambda (x y)
  (or (> (cadr (cadr x)) (cadr (cadr y)))
  (and (= (cadr (cadr x)) (cadr (cadr y)))
	(< (car (cadr x)) (car (cadr y))) )) ))

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
Doan Van Ha    2.676

Cám ơn Bác.Em đã chỉnh sửa được rồi

là như này:

(vl-sort lst '(lambda (x y)
  (or (> (cadr (cadr x)) (cadr (cadr y)))
  (and (= (cadr (cadr x)) (cadr (cadr y)))
(< (car (cadr x)) (car (cadr y))) )) ))

Bạn phải sửa cả 2 dòng (vl-sort...), chứ chỉ sửa 1 dòng (vl-sort...) là không ổn đấy nhé!

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
Doan Van Ha    2.676

Cái vụ này,nếu muốn đánh STT cho cả Text,lần Mtext có lẽ là do hàm vla-put-TextString đúng ko?

Lisp này không dùng được cho Mtext. Lý do là hàm vla-get-Alignment chỉ dùng được cho Text.

Muốn dùng được cho mtext phải sửa lisp theo cách khác.

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

Đăng nhập để thực hiện theo  

×