Đến nội dung


Hình ảnh
- - - - -

Lisp MATTEXT bị lỗi ???


  • Please log in to reply
30 replies to this topic

#21 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 27 October 2009 - 07:17 AM

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

#22 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 29 October 2009 - 11:28 AM

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

  • 0

#23 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 29 October 2009 - 01:00 PM

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

#24 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 29 October 2009 - 01:17 PM

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

  • 2

#25 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 29 October 2009 - 09:05 PM

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

#26 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 - 09:39 PM

ok ! Good ! Chuẩn ko cần chỉnh !


Sao không bấm THANK nhỉ??? :tongue2:
  • 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)


#27 bktec84

bktec84

    biết vẽ arc

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

Đã gửi 23 November 2009 - 11:17 AM

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

Anh cho hỏi sao em chay lisp thì báo là: Error: Bad functione: nil
Em rất cần cái lisp này của anh nhưng không chay được mong anh kiểm tra lại và giải thích dùm.
  • 0

#28 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 November 2009 - 11:37 AM

Anh cho hỏi sao em chay lisp thì báo là: Error: Bad functione: nil
Em rất cần cái lisp này của anh nhưng không chay được mong anh kiểm tra lại và giải thích dùm.


Thế này nhé bạn nhấn nút Reply bài viết của anh giabach hoặc nhấn nút Edit bài viết của bạn (ngay trên bài viết này) -> Chép hết code (không sót nhé) về chạy là được

@ Ban Quản trị : Nhờ BQT sửa lại chức năng DownLoad Lisp file để cho anh em CADVIET dùng, chứ để lỗi như thế này thì vất vả quá.:cheers:
  • 0

#29 dkkx3a

dkkx3a

    biết lệnh trim

  • Members
  • PipPipPip
  • 190 Bài viết
Điểm đánh giá: 57 (tàm tạm)

Đã gửi 23 November 2009 - 05:46 PM

Thế này nhé bạn nhấn nút Reply bài viết của anh giabach hoặc nhấn nút Edit bài viết của bạn (ngay trên bài viết này) -> Chép hết code (không sót nhé) về chạy là được

@ Ban Quản trị : Nhờ BQT sửa lại chức năng DownLoad Lisp file để cho anh em CADVIET dùng, chứ để lỗi như thế này thì vất vả quá.



Em là thành viên mới của diễn đàn, khi xem mục "Viết LISP theo yêu cầu P1" thì muốn copy LISP về dùng thì bị lỗi này làm LISP không chạy được, mà cũng ko Repply được nên "pó tay" không biết sao thử LSP và lưu về dùng. Đề nghị Các BQT lưu ý xem xét, cho phép Repply (nhưng ko cho gởi bài viết mới) để những anh em đi sau có thể tham khảo được các LISP trong các mục bị khoá, chứ không "trâu chậm ún nước đục wá". Cảm ơn BQT.
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#30 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 November 2009 - 11:50 PM

trong khi chờ ban quản trị xử được vụ này, các bạn thử dùng trình duyệt opera xem sao. Mình dùng opera chưa bao giờ bị dính lỗi này cả. cái này mình cũng chỉ phỏng đoán thôi, các bạn thử xem.. 1 công đôi việc, Opera dùng hay lắm
  • 0

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


#31 binhyenlinh

binhyenlinh

    biết zoom

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

Đã gửi 11 May 2010 - 12:40 AM

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

Thank you very much.....!!! mình tìm cái líp này vất vả từ lâu. làm kết cấu tuyệt vời.hi
  • 0