Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp chọn nhanh block cùng nội dung ATT


  • Please log in to reply
22 replies to this topic

#1 victor85

victor85

    biết lệnh stretch

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

Đã gửi 04 July 2012 - 10:15 AM

Các bác viết dùm mình lisp chọn nhanh block cùng tên và có cùng nội dung attribute với
Lisp như sau:
select_block_attribute.lsp: Lệnh sba
+Chọn block với att mẫu.
+Chọn vùng chứa các block cần chọn.
-> Kết quả chọn được các block chứa att cùng nội dung mong muốn ạ.
  • 0

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 04 July 2012 - 10:35 AM

Các bác viết dùm mình lisp chọn nhanh block cùng tên và có cùng nội dung attribute với
Lisp như sau:
select_block_attribute.lsp: Lệnh sba
+Chọn block với att mẫu.
+Chọn vùng chứa các block cần chọn.
-> Kết quả chọn được các block chứa att cùng nội dung mong muốn ạ.

Hề hề hề,
Bạn hỏi không rõ ràng minh bạch gì cả. Một block có thể chứa nhiều thuộc tính (attribute) chứ không phải chỉ có một thuộc tính. Vậy bạn muốn chọn các block có tất cả các thuộc tình giống nhau và các giá trị của các thuộc tính này cũng giống nhau hay chỉ cần có một thuộc tính có giá trị giống nhau là Ok??? Bản thân một thuộc tính cũng có nhiều đặc tính riêng tỷ như mầu săc, kích thước chẳng hạn.... vậy bạn chỉ muốn tìm những thuộc tính giống nhau về giá trị hay là giống cả các đặc tính khác nữa???
Rất mong bạn có thể nói rõ hơn yêu cầu của mình và hãy gửi bản vẽ kèm theo nếu bạn muốn có lisp đúng với yêu cầu.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 04 July 2012 - 11:11 AM

Chắc bạn cần cái giống như thế này, Mình post hình để mọi người giúp bạn chứ mình không share tiện ích này.
Bạn có thể xem chi tiết hơn ở http://cadonline.duy...lication&lid=48
Hình đã gửi
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#4 victor85

victor85

    biết lệnh stretch

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

Đã gửi 04 July 2012 - 11:22 AM

Hề hề hề,
Bạn hỏi không rõ ràng minh bạch gì cả. Một block có thể chứa nhiều thuộc tính (attribute) chứ không phải chỉ có một thuộc tính. Vậy bạn muốn chọn các block có tất cả các thuộc tình giống nhau và các giá trị của các thuộc tính này cũng giống nhau hay chỉ cần có một thuộc tính có giá trị giống nhau là Ok??? Bản thân một thuộc tính cũng có nhiều đặc tính riêng tỷ như mầu săc, kích thước chẳng hạn.... vậy bạn chỉ muốn tìm những thuộc tính giống nhau về giá trị hay là giống cả các đặc tính khác nữa???
Rất mong bạn có thể nói rõ hơn yêu cầu của mình và hãy gửi bản vẽ kèm theo nếu bạn muốn có lisp đúng với yêu cầu.


Mình chỉ cần giống nhau về thuộc tính giá trị nội dung của attribute thôi. Các thuộc tính khác trùng nhau hay khác nhau ko quan tâm.
  • 0

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 04 July 2012 - 11:26 AM

Mình chỉ cần giống nhau về thuộc tính giá trị nội dung của attribute thôi. Các thuộc tính khác trùng nhau hay khác nhau ko quan tâm.

Cùng Tag; hay cùng Value; hay cả cùng Tag và Value?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#6 victor85

victor85

    biết lệnh stretch

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

Đã gửi 04 July 2012 - 12:05 PM

value ấy.
  • 0

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 04 July 2012 - 12:07 PM

value ấy.

Hề hề hề,
hãy gửi bản vẽ lên...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 04 July 2012 - 12:29 PM

value ấy.

Có lẽ bạn không mặn mà với câu trả lời hay sao ấy?
Value giống nhau nhưng Tag khác nhau thì có chọn không? Nếu Block_Att có nhiều Tag thì khi lấy mẫu nó sẽ chọn Tag nào?...
Tốt nhất là gởi bản vẽ lên và diễn đạt luôn trên đó bạn ạ.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 04 July 2012 - 12:40 PM

Theo ketxu thì :
- Nentsel để lấy nội dung Att và tên Block
- Chọn vùng Insert và mã dxf 66 = 1
- Kiểm tra toàn bộ Att trong mỗi Insert, nếu có nội dung trùng thì SSadd
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#10 victor85

victor85

    biết lệnh stretch

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

Đã gửi 04 July 2012 - 12:46 PM

em xin lỗi các bác, nãy vội đi có việc quá nên trả lời hơi gấp. Đúng là cần cả chung value và tag. vì có thể có nhiều att trong block mà khi vô tình trùng nhau sẽ loạn. điều kiện lựa chọn của mình sẽ chặt chẽ hơn.
  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 04 July 2012 - 02:25 PM

Lisp chọn các Block theo: NameBlock + TagAtt + ValueAtt

;Doan Van Ha - CADViet.com - Ngay 04/7/2012
;Muc dich: Chon cac Blocks theo NameBlock, TagAtt, ValueAtt.
(defun C:HA( / ent ass blk entlst)
(vl-load-com)
(if
(and
(setq ent (car (nentsel "\nPick chon Att trong Block mau: ")))
(= "ATTRIB" (cdr (assoc 0 (entget ent)))))
(progn
(setq ass (cons (cdr (assoc 2 (entget ent))) (cdr (assoc 1 (entget ent)))))
(setq blk (cdr (assoc 2 (entget (cdr (assoc 330 (entget ent)))))))
(setq ss (ssadd))
(princ "\nChon cac Block_Att...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list '(0 . "INSERT") '(66 . 1) (cons 2 blk)))))))
(foreach ent entlst
(if (member ass (GetAtt (vlax-ename->vla-object ent)))
(setq ss (ssadd ent ss))))
(sssetfirst nil ss))))
(defun GetAtt (obj)
(mapcar '(lambda (att) (cons (vla-get-TagString att) (vla-get-TextString att))) (vlax-invoke obj 'GetAttributes)))
P/S: đã hiệu chỉnh để tránh chọn nhầm đối tượng
  • 4

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 victor85

victor85

    biết lệnh stretch

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

Đã gửi 04 July 2012 - 02:57 PM

Hic, lỗi bác ạ. Không biết có phải do mình add quá nhiều lisp nữa không.



Pick chon Att cua Block mau:
Chon cac Block_Att...
Select objects: Specify opposite corner: 71 found

Select objects:
(nil <Selection set: 22b2f>)

Bác xem có giúp được với lỗi của em không. Nếu ko được thì thôi vậy. Dùng find của cad cũng tạm được bác ạ.
  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 04 July 2012 - 03:02 PM

Lỗi gì thế? Nó báo đã chọn được cơ mà?
Bạn thêm cho tôi dòng (vl-load-com) vào đầu lisp nhé!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#14 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 04 July 2012 - 03:06 PM

Thêm 1 chút kiểm tra lúc pick nentsel
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 04 July 2012 - 03:35 PM

Có thể bạn đã pick vào block chứ không pick đúng vào att. Tôi đã bổ sung trên link cũ.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#16 victor85

victor85

    biết lệnh stretch

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

Đã gửi 04 July 2012 - 03:43 PM

Đã ok rồi bác ạ, Cảm ơn bác Doan Van Ha nhiều nhé. Tiếc là chưa dùng được với dynamic block. :D
  • 0

#17 790312

790312

    biết lệnh fillet

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

Đã gửi 20 June 2013 - 08:39 PM

Lisp chọn các Block theo: NameBlock + TagAtt + ValueAtt

;Doan Van Ha - CADViet.com - Ngay 04/7/2012
;Muc dich: Chon cac Blocks theo NameBlock, TagAtt, ValueAtt.
(defun C:HA( / ent ass blk entlst)
(vl-load-com)
(if
  (and
   (setq ent (car (nentsel "\nPick chon Att trong Block mau: ")))
   (= "ATTRIB" (cdr (assoc 0 (entget ent)))))
  (progn
   (setq ass (cons (cdr (assoc 2 (entget ent))) (cdr (assoc 1 (entget ent)))))
   (setq blk (cdr (assoc 2 (entget (cdr (assoc 330 (entget ent)))))))
   (setq ss (ssadd))
   (princ "\nChon cac Block_Att...")
   (setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list '(0 . "INSERT") '(66 . 1) (cons 2 blk)))))))
   (foreach ent entlst
	(if (member ass (GetAtt (vlax-ename->vla-object ent)))
	(setq ss (ssadd ent ss))))
   (sssetfirst nil ss))))
(defun GetAtt (obj)
(mapcar '(lambda (att) (cons (vla-get-TagString att) (vla-get-TextString att))) (vlax-invoke obj 'GetAttributes)))
P/S: đã hiệu chỉnh để tránh chọn nhầm đối tượng

Bác Hà thêm giùm sau khi chọn các block có valua cần chọn thì nó ẩn các đối tượng khác đi,chỉ hiện các block này thôi!Cảm ơn bác nhiều.


  • 0

#18 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 20 June 2013 - 09:06 PM

Bác Hà thêm giùm sau khi chọn các block có valua cần chọn thì nó ẩn các đối tượng khác đi,chỉ hiện các block này thôi!Cảm ơn bác nhiều.

Ẩn rồi sau đó bạn phải cho hiện lại chứ nhỉ? Trên CV tôi có lisp ẩn/hiện đối tượng rồi. Bạn search nhé!


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#19 790312

790312

    biết lệnh fillet

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

Đã gửi 20 June 2013 - 09:11 PM

Ẩn rồi sau đó bạn phải cho hiện lại chứ nhỉ? Trên CV tôi có lisp ẩn/hiện đối tượng rồi. Bạn search nhé!

Đó là lisp ẩn hiện đối tượng theo layer bác ah.Bác có lisp nào ẩn hiện đối tượng đã chọn không?Thanks.


  • 0

#20 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 20 June 2013 - 09:27 PM

Tôi quên link rồi. Cái này nhớ ra là của ai đó, tôi chỉ biên tập lại thôi  :lol:  Tôi post lên lại vậy.

;---------- AN & HIEN. free lisp from cadviet.com
;---------- AN DOI TUONG DUOC CHON, HIEN PHAN CON LAI
(defun C:AN (/ sset count elem)
 (defun DXF (id obj)
  (cdr (assoc id (entget obj))))
 (prompt "\nChon cac doi tuong de an: ")
 (cond
  ((setq sset (ssget))
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 1) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 1)))))
     (prompt "\nDoi tuong nay thuoc lop bi khoa. Khong the an no.")))))
 (princ))
;---------- HIEN DOI TUONG DUOC CHON, AN PHAN CON LAI
(defun C:HIEN (/ sset0 sset count elem)
 (setq sset (cadr (ssgetfirst)))
 (prompt "\nChon cac doi tuong de hien: ")
 (if (null sset)
  (setq sset (ssget)))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 1) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 1)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
;---------- HIEN TAT CA DOI TUONG
(defun C:HIENTC (/ WhatNextsset count elem)
 (defun DXF (Id Obj)
  (cdr (assoc Id (entget Obj))))
 (cond
  ((setq sset (ssget "_X" '((60 . 1))))
   (initget "Yes No")
   (setq WhatNext
    (cond
     ((getkword "\nTat ca doi tuong dang an se duoc hien? N/<Yes>: "))
     (T "Yes")))
  (cond
   ((= WhatNext "Yes")
    (prompt "\nVui long doi...")
     (repeat (setq count (sslength sset))
      (setq count (1- count) elem (ssname sset count))
      (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
       (entmod (subst '(60 . 0) '(60 . 1) (entget elem)))
       (prompt "\nDoi tuong nay thuoc lop bi khoa. Khong the hien no.")))
    (prompt "\nKet thuc..."))))
  (T (prompt "\nKhong co doi tuong nao duoc an."))))
;---------- DOI TUONG AN VA HIEN DOI CHO CHO NHAU
(defun C:CHUYEN (/ sset0 sset count elem)
 (setq sset (ssget "_X" '((60 . 1))))
 (cond
  ((setq sset0 (ssget "_X"))
   (repeat (setq count (sslength sset0))
    (setq count (1- count) elem (ssname sset0 count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 1) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 1)))))))))
 (cond
  (sset
   (repeat (setq count (sslength sset))
    (setq count (1- count) elem (ssname sset count))
    (if (/= 4 (logand 4 (DXF 70 (tblobjname "layer" (DXF 8 elem)))))
     (if (DXF 60 elem)
      (entmod (subst '(60 . 0) (assoc 60 (entget elem)) (entget elem)))
      (entmod (append (entget elem) (list '(60 . 0))))))))))
(princ "\nAn cac doi tuong duoc chon, dung lenh: AN")
(princ "\nHien cac doi tuong duoc chon, dung lenh: HIEN")
(princ "\nHien tat ca doi tuong tren ban ve, dung lenh: HIENTC")
(princ "\nChuyen doi giua doi tuong an va hien, dung lenh: CHUYEN")
(princ)
;----------
 


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.