Đến nội dung


Hình ảnh
- - - - -

Lisp MATTEXT bị lỗi ???


  • Please log in to reply
30 replies to this topic

#1 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:27 PM

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))
  • 0
Hoàng Giang

#2 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 24 October 2009 - 04:03 PM

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))

  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 October 2009 - 05:08 PM

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
  • 1

#4 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 25 October 2009 - 10:03 AM

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
  • 0
Hoàng Giang

#5 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 25 October 2009 - 11:36 AM

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
  • 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)


#6 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 25 October 2009 - 01:54 PM

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 !
  • 0
Hoàng Giang

#7 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 26 October 2009 - 12:03 PM

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
  • 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)


#8 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 26 October 2009 - 01:09 PM

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 đỡ !
  • 0
Hoàng Giang

#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 26 October 2009 - 01:33 PM

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

  • 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 hhhhgggg

hhhhgggg

    biết dimedit

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

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

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 ạ ???
  • 0
Hoàng Giang

#11 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 26 October 2009 - 02:36 PM

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
  • 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)


#12 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 26 October 2009 - 02:56 PM

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 đỡ !

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#13 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 26 October 2009 - 03:03 PM

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 !
  • 0
Hoàng Giang

#14 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 26 October 2009 - 03:10 PM

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à.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#15 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 October 2009 - 03:24 PM

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] <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
  • 1

#16 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 26 October 2009 - 03:43 PM

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.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#17 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 26 October 2009 - 04:06 PM

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

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ề.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#18 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 26 October 2009 - 04:34 PM

-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ề,
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 26 October 2009 - 04:45 PM

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.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#20 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 26 October 2009 - 04:55 PM

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)
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD