Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
hhhhgggg

Lisp MATTEXT bị lỗi ???

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

Em mới tải được Lisp MATText trên diễn đàn, nhưng em dùng được đúng 1 lần. Xong lỗi không dùng được nữa,

Nội dung lisp này là: Chọn đối tượng nguồn là Text, Mtext, Dêmmention rùi chọn đối tượng đích. đối tượng đích sẽ có nội dung giống đối tượng nguồn.Bác pro nào sửa giúp em với, bác thêm cả dòng lệnh để Ma đối tượng đích cho nó giống đối tượng nguồn nhé.

Hiện taị nó đang bị lỗi, sau khi chọn đối tượng nguồn thì nó báo :

Select objects: ; error: bad argument type: lselsetp nil

CODE

 

(defun c:mat ()

(command "undo" "be")

(setq donvi (/ (getvar "viewsize") 40))

 

(setq ddd (entsel "\nChon doi tuong mau"))

(while

(or

(null ddd)

(and (/= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))

)

)

(setq ddd (entsel "\nDoi tuong phai la TEXT, MTEXT hoac DIMENSION! Chon lai"))

)

 

(setq DT (car ddd))

(setq DTM (entget DT))

(setq NOIDUNG (cdr (assoc 1 DTM)))

(setq DIEMCHENMAU (cdr (assoc 10 DTM)))

 

(setq diemvt1 (polar DIEMCHENMAU pi donvi))

(setq diemvt2 (polar DIEMCHENMAU (* 2 pi) donvi))

(setq diemvt3 (polar DIEMCHENMAU (/ pi 2) donvi))

(setq diemvt4 (polar DIEMCHENMAU (- 0 (/ pi 2)) donvi))

(grdraw diemvt1 diemvt2 3)

(grdraw diemvt3 diemvt4 3)

 

 

(Princ "\nChon TEXT,MTEXT,DIMENSION muon chinh :")

(setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))

(setq L 0)

(setq M (sslength XX))

(while (< L M)

(setq DTs (ssname XX L))

(setq DTMs (entget DTs))

(setq NOIDUNGM NOIDUNG)

(setq DTMs (subst (cons 1 NOIDUNGM) (assoc 1 DTMs) DTMs))

(entmod DTMs)

 

 

(setq L (1+ L))

)

 

(command ".pan" DIEMCHENMAU DIEMCHENMAU)

(command "undo" "end")

 

 

(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
Em mới tải được Lisp MATText trên diễn đàn, nhưng em dùng được đúng 1 lần. Xong lỗi không dùng được nữa,

Nội dung lisp này là: Chọn đối tượng nguồn là Text, Mtext, Dêmmention rùi chọn đối tượng đích. đối tượng đích sẽ có nội dung giống đối tượng nguồn.Bác pro nào sửa giúp em với, bác thêm cả dòng lệnh để Ma đối tượng đích cho nó giống đối tượng nguồn nhé.

Không biết hhhhgggg có táy máy sửa chồ nào không. Dò lại hơi mệt nên post lại lên đây nếu vẫn bị lổi thì chắc xung đột với cái lisp nào của hhhhgggg rồi.

 

;Viet boi: KTS_DUY BINH SON - QUANG NGAI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

(defun c:mat ()

(command "undo" "be")

(setq donvi (/ (getvar "viewsize") 40))

 

(setq ddd (entsel "\nChon doi tuong mau"))

(while

(or

(null ddd)

(and (/= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))

)

)

(setq ddd (entsel "\nDoi tuong phai la TEXT, MTEXT hoac DIMENSION! Chon lai"))

)

 

(setq DT (car ddd))

(setq DTM (entget DT))

(setq NOIDUNG (cdr (assoc 1 DTM)))

(setq DIEMCHENMAU (cdr (assoc 10 DTM)))

 

(setq diemvt1 (polar DIEMCHENMAU pi donvi))

(setq diemvt2 (polar DIEMCHENMAU (* 2 pi) donvi))

(setq diemvt3 (polar DIEMCHENMAU (/ pi 2) donvi))

(setq diemvt4 (polar DIEMCHENMAU (- 0 (/ pi 2)) donvi))

(grdraw diemvt1 diemvt2 3)

(grdraw diemvt3 diemvt4 3)

 

 

(Princ "\nChon TEXT,MTEXT,DIMENSION muon chinh :")

(setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))

(setq L 0)

(setq M (sslength XX))

(while (< L M)

(setq DTs (ssname XX L))

(setq DTMs (entget DTs))

(setq NOIDUNGM NOIDUNG)

(setq DTMs (subst (cons 1 NOIDUNGM) (assoc 1 DTMs) DTMs))

(entmod DTMs)

 

 

(setq L (1+ L))

)

 

(command ".pan" DIEMCHENMAU DIEMCHENMAU)

(command "undo" "end")

 

(setvar "MODEMACRO" "**DUY782006**")

(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
Không biết hhhhgggg có táy máy sửa chồ nào không. Dò lại hơi mệt nên post lại lên đây nếu vẫn bị lổi thì chắc xung đột với cái lisp nào của hhhhgggg rồi.

Chào anh Duy

Cho phép Tue_NV góp ý trong đoạn code của anh 1 tý nhé :

1. DIMENSION : chỉ đúng với DIM độ chế, chứ DIMENSION với kích thước thật của nó (thì không còn đúng nữa. Anh xem lại điểm này và bổ sung vào code 1 tý nhé

2. Với dòng code này :

(and (/= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))

)

Tue_NV thấy hơi dài. Anh có thể thay thế bằng code này :

(wcmatch (cdr(assoc 0 (entget (car ddd)))) "*TEXT,DIMENSION")

-> return T -> nếu đối tượng là TEXT, MTEXT, DIMENSION

-> return nil -> nếu đối tượng không phải là TEXT, MTEXT, DIMENSION

  • 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
Chào anh Duy

Cho phép Tue_NV góp ý trong đoạn code của anh 1 tý nhé :

1. DIMENSION : chỉ đúng với DIM độ chế, chứ DIMENSION với kích thước thật của nó (thì không còn đúng nữa. Anh xem lại điểm này và bổ sung vào code 1 tý nhé

2. Với dòng code này :

(and (/= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))

)

Tue_NV thấy hơi dài. Anh có thể thay thế bằng code này :

(wcmatch (cdr(assoc 0 (entget (car ddd)))) "*TEXT,DIMENSION")

-> return T -> nếu đối tượng là TEXT, MTEXT, DIMENSION

-> return nil -> nếu đối tượng không phải là TEXT, MTEXT, DIMENSION

huhu ! lisp của anh duy hay thật nhưng em ko thể dùng được, Ko phải là sai code mà chẳng bit làm sao ý. Nó vẫn báo lỗi

Select objects: ; error: bad argument type: lselsetp nil

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
huhu ! lisp của anh duy hay thật nhưng em ko thể dùng được, Ko phải là sai code mà chẳng bit làm sao ý. Nó vẫn báo lỗi

Select objects: ; error: bad argument type: lselsetp nil

bạn thử sửa lại:

(defun c:mat (/ donvi ddd DT DTM NOIDUNG DIEMCHENMAU diemvt1 diemvt2 diemvt3 diemvt4 xx L M DTs DTMs NOIDUNG)

....

);_ end defun

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ử sửa lại:

(defun c:mat (/ donvi ddd DT DTM NOIDUNG DIEMCHENMAU diemvt1 diemvt2 diemvt3 diemvt4 xx L M DTs DTMs NOIDUNG)

....

);_ end defun

Em đã sửa lại như vậy rồi, nhưng vẫn lỗi:

Select objects: ; error: bad argument type: lselsetp nil

Nhờ cao thủ sửa giúp em vớ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
Em đã sửa lại như vậy rồi, nhưng vẫn lỗi:

Select objects: ; error: bad argument type: lselsetp nil

Nhờ cao thủ sửa giúp em với !

bạn đổi hết tên các biến thành các tên khác xem sao -- hy vọng là sẽ đượ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
bạn đổi hết tên các biến thành các tên khác xem sao -- hy vọng là sẽ được

Em đã đổi tên biến, dùng tính năng thay thế trong Word cho khỏi nhầm nhưng vẫn lỗi:

CODE

(defun c:mat (/ donvi ddd DT K6 K K1 k7 k3 k4 k5 xx L M DTs K6s K)

(command "undo" "be")

(setq donvi (/ (getvar "viewsize") 40))

 

(setq ddd (entsel "\nChon doi tuong mau"))

(while

(or

(null ddd)

(and (/= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))

)

)

(setq ddd (entsel "\nDoi tuong phai la TEXT, MTEXT hoac DIMENSION! Chon lai"))

)

 

(setq DT (car ddd))

(setq K6 (entget DT))

(setq K (cdr (assoc 1 K6)))

(setq K1 (cdr (assoc 10 K6)))

 

(setq k7 (polar K1 pi donvi))

(setq k3 (polar K1 (* 2 pi) donvi))

(setq k4 (polar K1 (/ pi 2) donvi))

(setq k5 (polar K1 (- 0 (/ pi 2)) donvi))

(grdraw k7 k3 3)

(grdraw k4 k5 3)

 

 

(Princ "\nChon TEXT,MTEXT,DIMENSION muon chinh :")

(setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))

(setq L 0)

(setq M (sslength XX))

(while (< L M)

(setq DTs (ssname XX L))

(setq K6s (entget DTs))

(setq KM K)

(setq K6s (subst (cons 1 KM) (assoc 1 K6s) K6s))

(entmod K6s)

 

 

(setq L (1+ L))

)

 

(command ".pan" K1 K1)

(command "undo" "end")

 

(setvar "MODEMACRO" "**DUY782006**")

(Princ))

 

Lỗi thông báo:

Command:MAT

Chon doi tuong mau

Chon TEXT,MTEXT,DIMENSION muon chinh :

Select objects: ; error: bad argument type: lselsetp nil

Nhờ các cao thủ giúp đỡ !

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
Em đã đổi tên biến, dùng tính năng thay thế trong Word cho khỏi nhầm nhưng vẫn lỗi:

CODE

(defun c:mat (/ donvi ddd DT K6 K K1 k7 k3 k4 k5 xx L M DTs K6s K)

 

Select objects: ; error: bad argument type: lselsetp nil

Nhờ các cao thủ giúp đỡ !

 

còn ddd và xx kìa đổi thử luôn xem sao

 

bạn lỗi lúc nào: ngay lúc gõ lệnh hay sau khi chọn đối tượng muốn chỉnh

 

không được thì bạn sử dụng tam cái này:

(defun C:MATCH-TEXT (/ RESOBJS BJS SS OLDVARS STR SLST ELE)
(setq *ERROR* (defun MATCH-TEXT-ERR (MSG)
			(cond ((wcmatch MSG "Function cancelled") (princ " User abort"))
				  ((wcmatch MSG "quit / exit abort") (princ " exit command!"))
				  (t (progn (princ MSG) (princ)))
			);_ end cond
			(setq OLDCMD (getvar "CMDECHO"))
			(setvar "CMDECHO" 0)
			(command ".undo" "end" ".undo" "")
			(setvar "CMDECHO" OLDCMD)
			(if OBJS
			 (redraw OBJS 4)
			);_ end if
			(if OLDVARS
			 (mapcar 'setvar '("CMDECHO") OLDVARS)
			);_ end if
			(setq *ERROR* NIL)
		   );_ end defun
);_ end setq
(if (not vlax-ename->vla-object)
 (vl-load-com)
);_ end if
(setq OLDVARS (mapcar 'getvar '("CMDECHO")))
(setvar "CMDECHO" 0)
(command ".undo" "begin")
(setq RESOBJS t)
(while RESOBJS
 (while (null (setq OBJS (car (nentsel "\nSelect source text: ")))) (princ "\n Nothing selected!"))
 (if (wcmatch (vla-get-objectname (vlax-ename->vla-object OBJS)) "*Text,*Attribute")
  (progn (setq STR (vla-get-textstring (vlax-ename->vla-object OBJS))) (setq RESOBJS NIL))
  (progn (alert "Select Text/Mtext/Attribute") (setq RESOBJS t))
 );_ end if
);_ end while
(redraw OBJS 3)
(princ "\nSelect destination text: ")
(while (null (setq SS (ssget '((0 . "*TEXT"))))) (princ "\nSelect destination text: "))
(setq SLST (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))))
(foreach ELE SLST (vla-put-textstring ELE STR))
(redraw OBJS 4)
(setq *ERROR* NIL)
(command ".undo" "end")
(mapcar 'setvar '("CMDECHO") OLDVARS)
(princ)
);_ end defun

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òn ddd và xx kìa đổi thử luôn xem sao

 

bạn lỗi lúc nào: ngay lúc gõ lệnh hay sau khi chọn đối tượng muốn chỉnh

 

không được thì bạn sử dụng tam cái này:

(defun C:MATCH-TEXT (/ RESOBJS BJS SS OLDVARS STR SLST ELE)
(setq *ERROR* (defun MATCH-TEXT-ERR (MSG)
			(cond ((wcmatch MSG "Function cancelled") (princ " User abort"))
				  ((wcmatch MSG "quit / exit abort") (princ " exit command!"))
				  (t (progn (princ MSG) (princ)))
			);_ end cond
			(setq OLDCMD (getvar "CMDECHO"))
			(setvar "CMDECHO" 0)
			(command ".undo" "end" ".undo" "")
			(setvar "CMDECHO" OLDCMD)
			(if OBJS
			 (redraw OBJS 4)
			);_ end if
			(if OLDVARS
			 (mapcar 'setvar '("CMDECHO") OLDVARS)
			);_ end if
			(setq *ERROR* NIL)
		   );_ end defun
);_ end setq
(if (not vlax-ename->vla-object)
 (vl-load-com)
);_ end if
(setq OLDVARS (mapcar 'getvar '("CMDECHO")))
(setvar "CMDECHO" 0)
(command ".undo" "begin")
(setq RESOBJS t)
(while RESOBJS
 (while (null (setq OBJS (car (nentsel "\nSelect source text: ")))) (princ "\n Nothing selected!"))
 (if (wcmatch (vla-get-objectname (vlax-ename->vla-object OBJS)) "*Text,*Attribute")
  (progn (setq STR (vla-get-textstring (vlax-ename->vla-object OBJS))) (setq RESOBJS NIL))
  (progn (alert "Select Text/Mtext/Attribute") (setq RESOBJS t))
 );_ end if
);_ end while
(redraw OBJS 3)
(princ "\nSelect destination text: ")
(while (null (setq SS (ssget '((0 . "*TEXT"))))) (princ "\nSelect destination text: "))
(setq SLST (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))))
(foreach ELE SLST (vla-put-textstring ELE STR))
(redraw OBJS 4)
(setq *ERROR* NIL)
(command ".undo" "end")
(mapcar 'setvar '("CMDECHO") OLDVARS)
(princ)
);_ end defun

Cái lisp kia, dòng thông báo lỗi đó xuất hiện sau khi chọn đối tượng nguồn. Lisp mới này ko chạy được với Dim ạ ???

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 lisp kia, dòng thông báo lỗi đó xuất hiện sau khi chọn đối tượng nguồn.

Có phải sau khi chọn xong đối tượng nguồn bạn nhấn enter không??? nếu đúng thì đừng nhấn enter mà tiếp tục chọn luôn đới tượng muốn chỉnh sửa, còn không thì minh2 bó tay rồi.

 

...Lisp mới này ko chạy được với Dim ạ ???.

"*Text,*Attribute" --> "*Text,*Attribute,*Dimension"

(0 . "*TEXT") --> (0 . "*TEXT,DIMENSION")

 

chưa test với các đối tuong la2 DIMENSION

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
Em đã đổi tên biến, dùng tính năng thay thế trong Word cho khỏi nhầm nhưng vẫn lỗi:

CODE

(defun c:mat (/ donvi ddd DT K6 K K1 k7 k3 k4 k5 xx L M DTs K6s K)

(command "undo" "be")

(setq donvi (/ (getvar "viewsize") 40))

 

(setq ddd (entsel "\nChon doi tuong mau"))

(while

(or

(null ddd)

(and (/= "TEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "MTEXT" (cdr (assoc 0 (entget (car ddd))))) (/= "DIMENSION" (cdr (assoc 0 (entget (car ddd)))))

)

)

(setq ddd (entsel "\nDoi tuong phai la TEXT, MTEXT hoac DIMENSION! Chon lai"))

)

 

(setq DT (car ddd))

(setq K6 (entget DT))

(setq K (cdr (assoc 1 K6)))

(setq K1 (cdr (assoc 10 K6)))

 

(setq k7 (polar K1 pi donvi))

(setq k3 (polar K1 (* 2 pi) donvi))

(setq k4 (polar K1 (/ pi 2) donvi))

(setq k5 (polar K1 (- 0 (/ pi 2)) donvi))

(grdraw k7 k3 3)

(grdraw k4 k5 3)

(Princ "\nChon TEXT,MTEXT,DIMENSION muon chinh :")

(setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))

(setq L 0)

(setq M (sslength XX))

(while (

(setq DTs (ssname XX L))

(setq K6s (entget DTs))

(setq KM K)

(setq K6s (subst (cons 1 KM) (assoc 1 K6s) K6s))

(entmod K6s)

(setq L (1+ L))

)

 

(command ".pan" K1 K1)

(command "undo" "end")

 

(setvar "MODEMACRO" "**DUY782006**")

(Princ))

 

Lỗi thông báo:

Command:MAT

Chon doi tuong mau

Chon TEXT,MTEXT,DIMENSION muon chinh :

Select objects: ; error: bad argument type: lselsetp nil

Nhờ các cao thủ giúp đỡ !

Chào bạn hhhhgggg,

Mình thấy trong đoạn lisp trên của bạn có hàm (command ".pan" K1 K1) hình như là thừa, không cần thiết bạn ạ.

Cái lỗi lselsetp nil có vẻ là do cái hàm (setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION")))) gây ra bạn ạ.

Bạn hãy coi lại chỗ này và viết tách bạch ra thử xem sao nhé:

(setq xx (ssget '((0 . "TEXT) (0 . "MTEXT") (0 . "DIMENSION"))))

hoặc:

(setq xx (ssget (list (0 . "TEXT" (0 . "MTEXT) (0 . "DIMENSION"))))

 

Cái này mình cũng chưa rõ vì sao nhưng có một số trường hợp không thay thế hàm (list ..) bằng hàm quote '() được bạn ạ. Cũng như mình chưa rõ lắm về cái việc gộp các list trong danh sách lựa chọn của hàm (ssget) . Vì thế theo mình bạn cứ thử viết chính tắc một chút xem có còn bị lỗi nữa không.

Chúc bạn vui.

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
Chào bạn hhhhgggg,

Mình thấy trong đoạn lisp trên của bạn có hàm (command ".pan" K1 K1) hình như là thừa, không cần thiết bạn ạ.

Cái lỗi lselsetp nil có vẻ là do cái hàm (setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION")))) gây ra bạn ạ.

Bạn hãy coi lại chỗ này và viết tách bạch ra thử xem sao nhé:

(setq xx (ssget '((0 . "TEXT) (0 . "MTEXT") (0 . "DIMENSION"))))

hoặc:

(setq xx (ssget (list (0 . "TEXT" (0 . "MTEXT) (0 . "DIMENSION"))))

 

Cái này mình cũng chưa rõ vì sao nhưng có một số trường hợp không thay thế hàm (list ..) bằng hàm quote '() được bạn ạ. Cũng như mình chưa rõ lắm về cái việc gộp các list trong danh sách lựa chọn của hàm (ssget) . Vì thế theo mình bạn cứ thử viết chính tắc một chút xem có còn bị lỗi nữa không.

Chúc bạn vui.

Bác Bình à . Cái lisp này ko phải do em viết, Em không biết viết lisp. Em tải được lisp này của bác Duy trên diễn đàn.Nhưng nó chỉ chạy được đúng lần đầu tiên. Xong là lỗi luôn.Bác xem sửa ntn thì sửa giúp em vớ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
Chào bạn hhhhgggg,

Mình thấy trong đoạn lisp trên của bạn có hàm (command ".pan" K1 K1) hình như là thừa, không cần thiết bạn ạ.

Cái lỗi lselsetp nil có vẻ là do cái hàm (setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION")))) gây ra bạn ạ.

Bạn hãy coi lại chỗ này và viết tách bạch ra thử xem sao nhé:

(setq xx (ssget '((0 . "TEXT) (0 . "MTEXT") (0 . "DIMENSION"))))

hoặc:

(setq xx (ssget (list (0 . "TEXT" (0 . "MTEXT) (0 . "DIMENSION"))))

 

Cái này mình cũng chưa rõ vì sao nhưng có một số trường hợp không thay thế hàm (list ..) bằng hàm quote '() được bạn ạ. Cũng như mình chưa rõ lắm về cái việc gộp các list trong danh sách lựa chọn của hàm (ssget) . Vì thế theo mình bạn cứ thử viết chính tắc một chút xem có còn bị lỗi nữa không.

Chúc bạn vui.

-Cái lisp này lòa của Duy viết đới. Bình thường chạy tốt no vấn đề nên hum biết là ấy sài bị sao chắc là xung đột <_< .

-Còn cái (command ".pan" K1 K1) là vì trước đó có grdraw chính là vẽ ra cái vectơ nên cẩn thận dùng pan để mất cái vecto này đi ấy mà.

  • 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
Chào bạn hhhhgggg,

Mình thấy trong đoạn lisp trên của bạn có hàm (command ".pan" K1 K1) hình như là thừa, không cần thiết bạn ạ.

Cái lỗi lselsetp nil có vẻ là do cái hàm (setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION")))) gây ra bạn ạ.

Bạn hãy coi lại chỗ này và viết tách bạch ra thử xem sao nhé:

(setq xx (ssget '((0 . "TEXT) (0 . "MTEXT") (0 . "DIMENSION"))))

hoặc:

(setq xx (ssget (list (0 . "TEXT" (0 . "MTEXT) (0 . "DIMENSION"))))

2 đoạn Lisp viết tách bạch của bạn phamthanhBinh bị sai mất rồi. Bạn xem lại 1 tý nhé

 

Dòng này của anh Duy không bị lỗi:

(setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))

 

Có lẽ là hhhhgggg đã ấn phím Enter khi đã Chon doi tuong mau : xong

hhhhgggg làm thế này nhé :

 

Command: mat : gõ MAT

undo Enter the number of operations to undo or

[Auto/Control/BEgin/End/Mark/Back] : be

Command:

Chon doi tuong mau : -> chọn đối tượng mẫu

Chon TEXT,MTEXT,DIMENSION muon chinh : Chọn tiếp đối tượng thay đổi

Select objects: Specify opposite corner: 2 found

 

Select objects:

.pan Specify base point or displacement: Specify second point:

Command: undo Enter the number of operations to undo or

[Auto/Control/BEgin/End/Mark/Back] : end

 

Code của anh Duy chạy ổn, chỉ có điều chưa có tác dụng đối với DIMENSION có kích thước thật như Tue_NV đã phân tích ở trên

Hy vọng hhhhgggg chạy thành công với đoạn code của anh Duy

  • 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
Code của anh Duy chạy ổn, chỉ có điều chưa có tác dụng đối với DIMENSION có kích thước thật như Tue_NV đã phân tích ở trên

Hy vọng hhhhgggg chạy thành công với đoạn code của anh Duy

Hôm trước Tue_NV đã nói cái này 1 lần nhưng so với thực tể sử dụng mình thấy hợp lý nên chưa có nghiên cứu chỉnh. Mục đích chỉ là ma giá trị của dim độ chế hoặc trả các dim bị độ chề trở về ban đầu thôi. Nếu đối tượng nguồn là dim ko độ chế thì các dim đích sẽ quay về lại giá trị thật. Nói về hạn chế thì lisp này còn nhiều hạn chế nhưng mình cũng lười cập nhật:

-Khi chọn đối tượng nguồn thì mình làm dấu bằng cách đánh 1 dáu + lên nó (bằng vecto). Mình thấy hình như có hàm hiligt hay gì đó làm việc này chuyên nghiệp hơn.

-Đã thử cho các Block thược tính nhưng chưa được.

*Bạn nào hoàn thiện thêm cho lisp thì mình 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
2 đoạn Lisp viết tách bạch của bạn phamthanhBinh bị sai mất rồi. Bạn xem lại 1 tý nhé

 

Dòng này của anh Duy không bị lỗi:

(setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))

 

Có lẽ là hhhhgggg đã ấn phím Enter khi đã Chon doi tuong mau : xong

hhhhgggg làm thế này nhé :

 

Command: mat : gõ MAT

undo Enter the number of operations to undo or

[Auto/Control/BEgin/End/Mark/Back] : be

Command:

Chon doi tuong mau : -> chọn đối tượng mẫu

Chon TEXT,MTEXT,DIMENSION muon chinh : Chọn tiếp đối tượng thay đổi

Select objects: Specify opposite corner: 2 found

 

Select objects:

.pan Specify base point or displacement: Specify second point:

Command: undo Enter the number of operations to undo or

[Auto/Control/BEgin/End/Mark/Back] : end

 

Code của anh Duy chạy ổn, chỉ có điều chưa có tác dụng đối với DIMENSION có kích thước thật như Tue_NV đã phân tích ở trên

Hy vọng hhhhgggg chạy thành công với đoạn code của anh Duy

Hề hề,

Ý bác Tue_NV nói có phải là sai do mình gõ thiếu một cái ngoặc kép sau "TEXT ở dòng code trên, một cái ngoặc kép sau "MTEXT ở dòng code dưới và một ngoặc đơn sau "TEXT" ở dòng code dưới không ạ???

Lỗi này thì đúng là do mình hơi ẩu, xin nhận khuyết điểm và sửa lại thế này:

(setq xx (ssget (list (0 . "TEXT") (0 . "MTEXT") (0 . "DIMENSION"))))

hoặc: (setq xx (ssget '((0 . "TEXT") (0 . "MTEXT") (0 . "DIMENSION"))))

Còn cái việc tách bạch ra theo mình thì chắc không sai, phải không bác Tuệ.??? Sở dĩ mình đoán vậy là do như đã nói mình chưa thực sự hiểu hết sự khác nhau giữa hai hàm (list...) và hàm quote '(). Thực tế trong quá trình tham khảo, đi mót của các bác, mình thấy có lúc thì chúng có thể thay thế nhau, nhưng có lúc thì không thay thế được. Do vậy mình muốn các bác giải thích giùm mấy cái chỗ đó rõ hơn thôi. Rất mong các bác chỉ giúp.

Thank các bác dài dài mà. Hề hề.

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 lisp này lòa của Duy viết đới. Bình thường chạy tốt no vấn đề nên hum biết là ấy sài bị sao chắc là xung đột <_ .>

-Còn cái (command ".pan" K1 K1) là vì trước đó có grdraw chính là vẽ ra cái vectơ nên cẩn thận dùng pan để mất cái vecto này đi ấy mà.

Hề hề,

Ới bác Duy ơi, bác đừng giận mình chi tội nghiệp nghe bác. Chả là cái hàm (grdraw) này mình có thấy nó trong Help rồi, cũng hiểu nó tí ti nhưng chả hiểu bác dùng nó ở đây với mục đích chi, chắc bác định đánh dấu cái Text bác đã sửa, nhưng sau đó bác lại xóa dấu đi bằng cái thằng pan. Vậy thì có thể xóa béng nó đi được không nhỉ vì cái nhiệm vụ chính của lisp này chỉ là thay đổi cái nội dung text thôi mà.

Thú thực là mình cũng chưa chạy thử cái líp này đâu, chỉ đọc code và đoán mò vậy nên có sai bác cũng đừng giận nha. Chung quy cũng chỉ tại cái nghề mót mà nó ra vậy, mong bác thông cảm nha.

Chào bác và chúc bác vạn sự bằng an. Hề hề,

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
Hề hề,

Ới bác Duy ơi, bác đừng giận mình chi tội nghiệp nghe bác. Chả là cái hàm (grdraw) này mình có thấy nó trong Help rồi, cũng hiểu nó tí ti nhưng chả hiểu bác dùng nó ở đây với mục đích chi, chắc bác định đánh dấu cái Text bác đã sửa, nhưng sau đó bác lại xóa dấu đi bằng cái thằng pan. Vậy thì có thể xóa béng nó đi được không nhỉ vì cái nhiệm vụ chính của lisp này chỉ là thay đổi cái nội dung text thôi mà.

Thú thực là mình cũng chưa chạy thử cái líp này đâu, chỉ đọc code và đoán mò vậy nên có sai bác cũng đừng giận nha. Chung quy cũng chỉ tại cái nghề mót mà nó ra vậy, mong bác thông cảm nha.

Chào bác và chúc bác vạn sự bằng an. Hề hề,

-Về cái (grdraw) thì bác biết tác dụng rồi nên nói vào cái lisp của em nhé.

-Khi chọn cái đối tượng nguồn thì nó làm dấu cái đối tượng nguồn chứng tỏ là chọn được rồi ấy mà , bó nó đi thì cũng được nhưng vì chọn bằng entsel thì cái đối tượng được chọn hắn không có mờ đi người dủng sẽ phân vân không biet1 chọn đúng đối tượng chưa.

  • 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

Chào Anh Duy.

Em cũng hay sư dụng lisp này của anh và thấy chưa bao giờ gặp lỗi với nó cả. Tuy nhiên lisp của anh mỗi lần chạy chỉ cho phép matchop giá trị của một đối tượng. Liệu anh có thể cải tiến nó để nó có thể matchop giá trị của một tập hợp đối tượng cho một tập hợp khác tương ứng về số phần tử không?

Ý tưởng của em là thế này:

- nếu ta chọn một đối tượng nguồn duy nhất thì lisp sẽ có thể matchop giá trị cho n đối tượng đích mà ta chọn sau đó.

- nếu ta chọn một tập hợp đối tượng là đối tượng nguồn thì đối tượng đích phải có số phần tử bằng đối tượng nguồn, (nếu không sẽ thông báo tập hợp đối tượng nguồn và đích không phù hợp)

khi đó việc sắp xếp các phần tử trong 2 tập hợp nguồn và đích tuân theo luật uu tiên từ trên xuống dưới, từ trái qua phải: đối tượng đầu tiên là đối tượng có Y lớn nhất, đối tượng cuối có Y nhỏ nhất. Nếu các đối tượng cùng có tọa độ Y bằng nhau thì đối tượng đầu tiên là đối tượng có X nhỏ nhất, đối tượng cuối có X lớn nhất)

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
2 đoạn Lisp viết tách bạch của bạn phamthanhBinh bị sai mất rồi. Bạn xem lại 1 tý nhé

 

Dòng này của anh Duy không bị lỗi:

(setq xx (ssget '((0 . "TEXT,MTEXT,DIMENSION"))))

 

Có lẽ là hhhhgggg đã ấn phím Enter khi đã Chon doi tuong mau : xong

hhhhgggg làm thế này nhé :

 

Command: mat : gõ MAT

undo Enter the number of operations to undo or

[Auto/Control/BEgin/End/Mark/Back] <1>: be

Command:

Chon doi tuong mau : -> chọn đối tượng mẫu

Chon TEXT,MTEXT,DIMENSION muon chinh : Chọn tiếp đối tượng thay đổi

Select objects: Specify opposite corner: 2 found

 

Select objects:

.pan Specify base point or displacement: Specify second point:

Command: undo Enter the number of operations to undo or

[Auto/Control/BEgin/End/Mark/Back] <1>: end

 

Code của anh Duy chạy ổn, chỉ có điều chưa có tác dụng đối với DIMENSION có kích thước thật như Tue_NV đã phân tích ở trên

Hy vọng hhhhgggg chạy thành công với đoạn code của anh Duy

Cảm ơn bác Tuệ nhé ! Em chạy được rùi ! mà đúng là lisp này chưa có tác dụng với kích Dim kích thước thật ! Hy vọng là bác Duy lúc nào rảnh thì bổ sung cho hoàn thiện ! Với lại, em có ý kiến là liệu mình có nên thêm luôn chức năng Ma vào ko ? để cho lisp trở thành Ma cả nội dung lần giá trị ! ta sẽ tách ra thành 2 lisp, 1 chỉ Ma nội dung và 1 Ma cả nội dung lẫn thuộc tính. Như thế tiện dụng hơ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
Chọn đối tượng nguồn là Text, Mtext, Dêmmention rùi chọn đối tượng đích. đối tượng đích sẽ có nội dung giống đối tượng nguồn.

Bác thêm cả dòng lệnh để Ma đối tượng đích cho nó giống đối tượng nguồn nhé.

............

Lisp Match Text : đối tượng đích sẽ có giá trị (hay chiều dài) của đối tượng nguồn

- đối tượng nguồn : TEXT, MTEXT, DIMENSION, MULTILEADER, ATTDEF, ATTRIB, LINE, PLINE, ARC, CIRCLE, ELLIPSE

+ với đối tượng TEXT, MTEXT, DIMENSION, MULTILEADER, ATTDEF, ATTRIB : lấy giá trị Text của đối tượng nguồn

+ với đối tượng LINE, PLINE, ARC, CIRCLE, ELLIPSE : lấy chiều dài của đối tượng nguồn (làm tròn đến hàng đơn vị)

 

- đối tượng đích : TEXT, MTEXT, DIMENSION, MULTILEADER, ATTDEF

 

Chú ý : khi chọn đối tuợng nguồn là DIMENSION hay ATTRIB nếu muốn lấy giá trị Text bạn phải pick vào Text đó, t/hợp bạn pick vào đuờng gióng của DIMENSION, Lisp sẽ lấy chiều dài của đuờng gióng đó.

(defun C:mat(/ ent typ nd ss)
 (command "_.undo" "_begin")
 (or vlax-ename->vla-object (vl-load-com))
 (while
   (not
     (and (setq ent (car (nentsel "\nChon doi tuong de lay Text hay Chieu dai :")))
   (setq ent (vlax-ename->vla-object ent))
   (setq typ (vla-get-ObjectName ent))
   (cond
     ((wcmatch typ "*Text,*MLeader,*Attribute")
      (setq nd (vla-get-TextString ent)) )
     ((wcmatch typ "*AttributeDefinition")
      (setq nd (vla-get-TagString ent)) )
     ((wcmatch typ "*Line,*Spline,*Polyline,*Arc,*Circle,*Ellipse")
      (setq nd (rtos (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 2 0)) )
     (t nil)
     ); cond
   ))
   (princ "\nDoi tuong chon khong hop le, Chon lai : "))  
 (princ (strcat"\nChon doi tuong de thay the gia tri Text <" nd "> :" ))
 (if (setq ss (ssget (list (cons 0 "*TEXT,*DIMENSION,MULTILEADER,ATTDEF")) ))
   (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (setq ent (vlax-ename->vla-object ent)
    typ (vla-get-ObjectName ent))
     (cond
((wcmatch typ "*Text,*MLeader")	      (vla-put-TextString ent nd) )
((wcmatch typ "*Dimension*")          (vla-put-TextOverride ent nd) )
((wcmatch typ "*AttributeDefinition") (vla-put-TagString ent nd) )
); cond
     )
   )
 (command "_.undo" "_end")
 (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
Lisp Match Text : đối tượng đích sẽ có giá trị (hay chiều dài) của đối tượng nguồn

- đối tượng nguồn : TEXT, MTEXT, DIMENSION, MULTILEADER, ATTDEF, ATTRIB, LINE, PLINE, ARC, CIRCLE, ELLIPSE

+ với đối tượng TEXT, MTEXT, DIMENSION, MULTILEADER, ATTDEF, ATTRIB : lấy giá trị Text của đối tượng nguồn

+ với đối tượng LINE, PLINE, ARC, CIRCLE, ELLIPSE : lấy chiều dài của đối tượng nguồn (làm tròn đến hàng đơn vị)

 

- đối tượng đích : TEXT, MTEXT, DIMENSION, MULTILEADER, ATTDEF

 

Chú ý : khi chọn đối tuợng nguồn là DIMENSION hay ATTRIB nếu muốn lấy giá trị Text bạn phải pick vào Text đó, t/hợp bạn pick vào đuờng gióng của DIMENSION, Lisp sẽ lấy chiều dài của đuờng gióng đó.

(defun C:mat(/ ent typ nd ss)
 (command "_.undo" "_begin")
 (or vlax-ename->vla-object (vl-load-com))
 (while
   (not
     (and (setq ent (car (nentsel "\nChon doi tuong de lay Text hay Chieu dai :")))
   (setq ent (vlax-ename->vla-object ent))
   (setq typ (vla-get-ObjectName ent))
   (cond
     ((wcmatch typ "*Text,*MLeader,*Attribute")
      (setq nd (vla-get-TextString ent)) )
     ((wcmatch typ "*AttributeDefinition")
      (setq nd (vla-get-TagString ent)) )
     ((wcmatch typ "*Line,*Arc,*Circle,*Ellipse")
      (setq nd (rtos (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 2 0)) )
     (t nil)
     ); cond
   ))
   (princ "\nDoi tuong chon khong hop le, Chon lai : "))  
 (princ (strcat"\nChon doi tuong de thay the gia tri Text <" nd "> :" ))
 (if (setq ss (ssget (list (cons 0 "*TEXT,*DIMENSION,MULTILEADER,ATTDEF")) ))
   (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (setq ent (vlax-ename->vla-object ent)
    typ (vla-get-ObjectName ent))
     (cond
((wcmatch typ "*Text,*MLeader")	      (vla-put-TextString ent nd) )
((wcmatch typ "*Dimension*")          (vla-put-TextOverride ent nd) )
((wcmatch typ "*AttributeDefinition") (vla-put-TagString ent nd) )
); cond
     )
   )
 (command "_.undo" "_end")
 (princ)
)

Bác GIA_BACH chình lisp khá là hoàn thiện, nhưng mà với Line,ARC, PL thì nó lấy độ dài và ko lấy đằng sau dấu phẩy 1 số nào, như thế thì kém chính xác, Lisp này em thấy rất bồ kết sau khi bác GIA_Bach chỉnh lại.Bác chỉnh thêm phần làm tròn 2 chữ số sau dấu phẩ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
.........

nhưng mà với Line,ARC, PL thì nó lấy độ dài và ko lấy đằng sau dấu phẩy 1 số nào,

..........

Bác chỉnh thêm phần làm tròn 2 chữ số sau dấu phẩy ?

Update theo yêu cầu: số số lẻ do nguời dùng nhập.

(defun C:mat(/ ent typ nd ss ssle)
 (command "_.undo" "_begin")
 (or vlax-ename->vla-object (vl-load-com))
 (while
   (not
     (and (setq ent (car (nentsel "\nChon doi tuong de lay Text hay Chieu dai :")))
   (setq ent (vlax-ename->vla-object ent))
   (setq typ (vla-get-ObjectName ent))
   (cond
     ((wcmatch typ "*Text,*MLeader,*Attribute")
      (setq nd (vla-get-TextString ent)) )
     ((wcmatch typ "*AttributeDefinition")
      (setq nd (vla-get-TagString ent)) )
     ((wcmatch typ "*Line,*Spline,*Polyline,*Arc,*Circle,*Ellipse")
      (or *ssle* (setq *ssle* 0))
      (initget 4)
      (setq ssle (getint (strcat "\nSo so le <" (itoa *ssle*) ">: ")))
      (if ssle (setq *ssle* ssle))
      (setq nd (rtos (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 2 *ssle*)) )
     (t nil)
     ); cond
   ))
   (princ "\nDoi tuong chon khong hop le, Chon lai : "))  
 (princ (strcat"\nChon doi tuong de thay the gia tri Text <" nd "> :" ))
 (if (setq ss (ssget (list (cons 0 "*TEXT,*DIMENSION,MULTILEADER,ATTDEF")) ))
   (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (setq ent (vlax-ename->vla-object ent)
    typ (vla-get-ObjectName ent))
     (cond
((wcmatch typ "*Text,*MLeader")	      (vla-put-TextString ent nd) )
((wcmatch typ "*Dimension*")          (vla-put-TextOverride ent nd) )
((wcmatch typ "*AttributeDefinition") (vla-put-TagString ent nd) )
); cond
     )
   )
 (command "_.undo" "_end")
 (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
Update theo yêu cầu: số số lẻ do nguời dùng nhập.

(defun C:mat(/ ent typ nd ss ssle)
 (command "_.undo" "_begin")
 (or vlax-ename->vla-object (vl-load-com))
 (while
   (not
     (and (setq ent (car (nentsel "\nChon doi tuong de lay Text hay Chieu dai :")))
   (setq ent (vlax-ename->vla-object ent))
   (setq typ (vla-get-ObjectName ent))
   (cond
     ((wcmatch typ "*Text,*MLeader,*Attribute")
      (setq nd (vla-get-TextString ent)) )
     ((wcmatch typ "*AttributeDefinition")
      (setq nd (vla-get-TagString ent)) )
     ((wcmatch typ "*Line,*Spline,*Polyline,*Arc,*Circle,*Ellipse")
      (or *ssle* (setq *ssle* 0))
      (initget 4)
      (setq ssle (getint (strcat "\nSo so le <" (itoa *ssle*) ">: ")))
      (if ssle (setq *ssle* ssle))
      (setq nd (rtos (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 2 *ssle*)) )
     (t nil)
     ); cond
   ))
   (princ "\nDoi tuong chon khong hop le, Chon lai : "))  
 (princ (strcat"\nChon doi tuong de thay the gia tri Text <" nd "> :" ))
 (if (setq ss (ssget (list (cons 0 "*TEXT,*DIMENSION,MULTILEADER,ATTDEF")) ))
   (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
     (setq ent (vlax-ename->vla-object ent)
    typ (vla-get-ObjectName ent))
     (cond
((wcmatch typ "*Text,*MLeader")	      (vla-put-TextString ent nd) )
((wcmatch typ "*Dimension*")          (vla-put-TextOverride ent nd) )
((wcmatch typ "*AttributeDefinition") (vla-put-TagString ent nd) )
); cond
     )
   )
 (command "_.undo" "_end")
 (princ)
)

ok ! Good ! Chuẩn ko cần chỉ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

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  

×