Đến nội dung


Hình ảnh
- - - - -

Nhờ sửa lisp đếm block


  • Please log in to reply
35 replies to this topic

#21 t031285

t031285

    biết vẽ rectang

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

Đã gửi 20 July 2011 - 10:14 AM

Cá nhân mình thấy việc này khá vô bổ t031285 ạ :rolleyes:

Thay vì hiện VÙNG CHỌN thì nó hiện SELECT OBJECTS nhìn thấy chữ này dễ lộn chọn lại chọn đối tượng nên mình muốn hiện VÙNG CHỌN cho khỏi lộn thôi bạn ah.
  • 0

#22 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 20 July 2011 - 10:18 AM

Dùng Delay cũng được vậy ^^

Thanks Ketxu nhưng ko biết lisp có hàm này ko vì ít khi dùng lisp lắm. Nếu dc thì cho mình 1 cái sample nha.
Thanks again!


  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#23 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 July 2011 - 10:25 AM

Thanks Ketxu nhưng ko biết lisp có hàm này ko vì ít khi dùng lisp lắm. Nếu dc thì cho mình 1 cái sample nha.
Thanks again!

Sample:
(command "delay" 1) t­ương đương tạm dừng 1/1000 giây.
(command "delay" 1000) t­ương đương tạm dừng 1000/1000 = 1 giây.
  • 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.


#24 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 20 July 2011 - 10:46 AM

Sample:
(command "delay" 1) t­ương đương tạm dừng 1/1000 giây.
(command "delay" 1000) t­ương đương tạm dừng 1000/1000 = 1 giây.

Thanks bạn!
Nhưng nếu là command thì ko dc vì nó sẽ ko hiện prompt, đã check lại là while cũng ko dc luôn nên chỉ còn cách enter trong (getstring) như bài viết của bạn ở trên.



  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#25 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 July 2011 - 01:51 PM

Minh họa dùng while để delay với hướng đi khác mọi người 1 chút :
(Defun c:bb (/ dynm dynp DT STNAME SS SL)
(ST:Ui-DelayText "Chän Block mÉu :" 60)
(setq DT (entget (car (entsel))))
(setq STNAME (cdr (assoc 2 DT)))
(Princ "\nHay chon vung :")
(ST:Ui-DelayText "Chän vïng chøa block :" 60)
(setq SS (ssget (list (cons 0 "insert")(cons 2 STNAME))))
(IF (/= NIL SS)
(ST:Ui-DelayText (strcat "Sè l­îng block " STNAME " lµ :" (rtos (SSLength SS) 2 0)) 120)
(ST:Ui-DelayText (strcat "RÊt tiÕc, vïng b¹n chän kh«ng cã ®èi t­îng Block " STNAME " nµo !") 80)
)
(princ)
)

(defun ST:Ui-DelayText (msg count / data txtObj wtxt_l) ;@Son Tung
(defun wtxt_l(txt p / sty d h1 h2 wf h) ;;;Write txt on graphic screen at p
(setq sty (getvar "textstyle")
d (tblsearch "style" sty)
h1 (cdr (assoc 40 d))
h2 (cdr (assoc 42 d))
wf (cdr (assoc 41 d)))
(if (> h1 0) (setq h h1) (setq h h2))
(entmakex (list (cons 0 "TEXT") (cons 7 sty) (cons 40 h) (cons 41 wf) (cons 1 txt) (cons 10 p))))
(setq txtObj (vlax-ename->vla-object(wtxt_l msg '(0 0 0))) i 0)
(while (< i count)
(setq gr (grread t 15 0) g1 (car gr) g2 (cadr gr) i (1+ i))
(cond ((= g1 5)
(vla-put-visible txtObj :vlax-true)
(setq data g2)
(setq data (trans data 1 0))
(vla-put-InsertionPoint txtObj (vlax-3D-point data))
)
)
)
(vla-delete txtObj)
)

  • 4

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


#26 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 20 July 2011 - 02:26 PM

Hahahaha,
Ketxu thật sáng tạo, vote 1 phiếu nhưng text height ko reference vào zomm factor nên hơi nhỏ.
Thanks again!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#27 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 July 2011 - 02:37 PM

Hahahaha,
Ketxu thật sáng tạo, vote 1 phiếu nhưng text height ko reference vào zomm factor nên hơi nhỏ.
Thanks again!

Ồ, đúng vậy, có lẽ nên đổi lại show text cố định theo pixel màn hình ^^ Lúc nào rỗi thì ket sửa lại, dù sao đây cũng chỉ là 1 ví dụ về hướng đi khác thôi ^^
  • 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


#28 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 20 July 2011 - 02:56 PM

Xin hỏi Tue_NV: Có cách nào mình làm được như sau không?
- Chọn block mẫu
- Chọn vùng chứa block: vùng này là 1 polyline khép kín chứa block cần đếm.Chỉ cần pick chọn PL là đếm được số block trong vùng kín.
Cám ơn !

Hề hề hề,
Để làm theo yêu cầu của bạn , bạn hãy thay đoạn code:
(Princ "\nHay chon vung :")
(setq SS (ssget (list (cons 0 "insert")
(cons 2 STNAME)
)
)
)

thành:
(Princ "\nHay chon pline kin chua cac block can dem :")
(setq pl (car (entsel)))
(setq plst (cdr (acet-geom-vertex-list pl)))
(setq SS (ssget "WP" plst (list (cons 0 "insert")
(cons 2 STNAME)
)
)
)


Hề hề hề,...

Nhân đây mình muốn hỏi thêm các bác Tue_NV, Detailing, Doan van Ha, Ketxu rằng hình như cái biến hệ thống DYNMODE và DYNPROMPT chỉ có ở các CAD đời sau 2004 thì phải. Khi mình dùng (setvar "dynmode" 1) thì CAD 2004 của mình báo lỗi.
Nếu đúng vậy nên chăng các bác ghi chú thích cho các lisp ở đây là chỉ dùng cho CAD từ 200.... trở đi.
Việc cứ bắt buộc thông báo phải hiện trên màn hình phải chăng là hơi ép nhau quá, vậy thì các anh CAD đời trước chỉ ngồi ngó ư??? Tội nghiệp, tội nghiệp....
Hề 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.

#29 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 20 July 2011 - 03:26 PM

Hề hề hề,
Để làm theo yêu cầu của bạn , bạn hãy thay đoạn code:
(Princ "\nHay chon vung :")
(setq SS (ssget (list (cons 0 "insert")
(cons 2 STNAME)
)
)
)

thành:
(Princ "\nHay chon pline kin chua cac block can dem :")
(setq pl (car (entsel)))
(setq plst (cdr (acet-geom-vertex-list pl)))
(setq SS (ssget "WP" plst (list (cons 0 "insert")
(cons 2 STNAME)
)
)
)


Hề hề hề,...

Nhân đây mình muốn hỏi thêm các bác Tue_NV, Detailing, Doan van Ha, Ketxu rằng hình như cái biến hệ thống DYNMODE và DYNPROMPT chỉ có ở các CAD đời sau 2004 thì phải. Khi mình dùng (setvar "dynmode" 1) thì CAD 2004 của mình báo lỗi.
Nếu đúng vậy nên chăng các bác ghi chú thích cho các lisp ở đây là chỉ dùng cho CAD từ 200.... trở đi.
Việc cứ bắt buộc thông báo phải hiện trên màn hình phải chăng là hơi ép nhau quá, vậy thì các anh CAD đời trước chỉ ngồi ngó ư??? Tội nghiệp, tội nghiệp....
Hề hề hề,...

1). Rất thông cảm với các cad đời cũ. Ấy thế mà trước đây có 1 cao thủ đã từng chê tôi là lẹt đẹt với mấy thứ lỗi thời đấy bác a! Đời thật oái oăm! Tôi chỉ mới cài 2007 cách đây mấy tháng, sau đó còn giữ cả 2004 và 14 nữa. Bây giờ máy già quá nên mới xóa cách đây không lâu, chứ nếu để lại cũng hay đấy, nhất là chí ít cũng trả lời được câu của bác. Thôi, bác nào có cài nhiều thì trả lời vậy.
2). Cái chọn Block theo kiểu pick vào pl kín chỉ đúng nếu nó không có arc bác ạ. Còn trong trường hợp tổng quát thì theo thiển ý của tôi là rắc rối đấy. Ông BAC người nước ngoài đã có cách chọn, code lê thê lắm, bác có thể xem "Chọn đối tượng trong vùng kín" ở ngay trang chính thì có, mới hôm qua tôi post lên lại.
Thân thương!
  • 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.


#30 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 20 July 2011 - 04:01 PM

......
Thôi, bác nào có cài nhiều thì trả lời vậy.
.........
Thân thương!

@ Doan Van Ha : Bác Bình "nói zậy mà hổng phải zậy"?!
Ý nhà bác này là :

...............
Nếu đúng vậy nên chăng các bác ghi chú thích cho các lisp ở đây là chỉ dùng cho CAD từ 200.... trở đi.
Việc cứ bắt buộc thông báo phải hiện trên màn hình phải chăng là hơi ép nhau quá, vậy thì các anh CAD đời trước chỉ ngồi ngó ư??? Tội nghiệp, tội nghiệp....
Hề hề hề,...


Về Danh sách biến hệ thống từ AutoCad 2000i đến AutoCad 2011,
tham khảo : http://www.cadviet.c...ndpost&p=151719
  • 1

#31 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 20 July 2011 - 04:57 PM

Hề hề hề,
Để làm theo yêu cầu của bạn , bạn hãy thay đoạn code:
(Princ "\nHay chon vung :")
(setq SS (ssget (list (cons 0 "insert")
(cons 2 STNAME)
)
)
)

thành:
(Princ "\nHay chon pline kin chua cac block can dem :")
(setq pl (car (entsel)))
(setq plst (cdr (acet-geom-vertex-list pl)))
(setq SS (ssget "WP" plst (list (cons 0 "insert")
(cons 2 STNAME)
)
)
)


Hề hề hề,...

Nhân đây mình muốn hỏi thêm các bác Tue_NV, Detailing, Doan van Ha, Ketxu rằng hình như cái biến hệ thống DYNMODE và DYNPROMPT chỉ có ở các CAD đời sau 2004 thì phải. Khi mình dùng (setvar "dynmode" 1) thì CAD 2004 của mình báo lỗi.
Nếu đúng vậy nên chăng các bác ghi chú thích cho các lisp ở đây là chỉ dùng cho CAD từ 200.... trở đi.
Việc cứ bắt buộc thông báo phải hiện trên màn hình phải chăng là hơi ép nhau quá, vậy thì các anh CAD đời trước chỉ ngồi ngó ư??? Tội nghiệp, tội nghiệp....
Hề hề hề,...

Hề hề hề,...
Theo đoạn code bác viết ở trên nên chăng có ghi chú chỉ xài cho CAD đã có Expresstool chứ em load vào CAD 14 bị lỗi
Cái yêu cầu của chủ topic chỉ làm ngứa ngáy tay chân mấy người như em chứ thực sự em ít khi viết lisp.
vui đùa là chính mong bác ko giận
Hề hề hề,....


  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#32 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 July 2011 - 09:40 PM

Hề hề, ket update lại cái code hồi sáng cho nó ngắn hơn và text dễ coi hơn chút ^^
(Defun c:bb (/ dynm dynp DT STNAME SS SL)
(ST:Ui-DelayText "Chän Block mÉu :" 60)
(setq DT (entget (car (entsel))))
(setq STNAME (cdr (assoc 2 DT)))
(Princ "\nHay chon vung :")
(ST:Ui-DelayText "Chän vïng chøa block :" 60)
(setq SS (ssget (list (cons 0 "insert")(cons 2 STNAME))))

(IF (/= NIL SS)
(ST:Ui-DelayText (strcat "Sè l­îng block " STNAME " lµ :" (rtos (SSLength SS) 2 0)) 120)
(ST:Ui-DelayText (strcat "RÊt tiÕc, vïng b¹n chän kh«ng cã ®èi t­îng Block " STNAME " nµo !") 80)
)
(princ)
)
(defun ST:Ui-DelayText (msg count / data txtObj wtxt_l gr g1 g2)
(defun wtxt_l(txt p h)(entmakex (list (cons 0 "TEXT") (cons 7 (getvar "textstyle")) (cons 40 h)(cons 1 txt) (cons 10 p))))
(setq txtObj (vlax-ename->vla-object(wtxt_l msg '(0 0 0) 1)) i 0)
(while (< i count)
(setq gr (grread t 15 0) g1 (car gr) g2 (cadr gr) i (1+ i))
(cond ((and (= g1 5)(listp g2))
(vla-put-InsertionPoint txtObj (vlax-3D-point (trans g2 1 0)))
(vla-put-Height txtObj (* (getvar "viewsize") 0.05))
))
)
(vla-delete txtObj)
)
@ Bác Bình : bác chung thủy với anh 2004 quá, vậy mấy cái bác gia_bach làm bằng Net thì sao ^^
  • 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


#33 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 July 2011 - 12:13 AM

Thay dòng select object đó thì bó tay vì đó là dòng nhắc của hàm ssget

Hề hề, thay dòng đó ở vị trí cursor thì không biết có được không, nhưng dòng ở commandline thì có thể thay dễ dàng ạ ^^
  • 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


#34 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 28 July 2011 - 10:11 AM

Mới build cái này các bạn test thử rồi cho ý kiến nha. (đã test trên AutoCAD 2010 32bit, các phiên bản còn lại chưa test Hình đã gửi)
http://www.mediafire...oarmr7afwmb7r34

Extract vào ổ C -> C:\Detailing\
gồm 2 file: CountBlock.lspClassLibrary1.dll load file lsp vào là được
Command: CountBlock


p/s: Mod thấy ko đúng topic thì move dùm mình nha. Thanks!
Thân!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#35 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 28 July 2011 - 10:39 AM

Hình đã gửi
Bên máy mình cad8 vista thì chưa được. K biết có phải copy cái file reference acdbmgd dll kia nữa k?

P/S : chức năng chính của countblock này là gì Detailing ơi ?
  • 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


#36 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 28 July 2011 - 10:50 AM

Hình đã gửi
Bên máy mình cad8 vista thì chưa được. K biết có phải copy cái file reference acdbmgd dll kia nữa k?

P/S : chức năng chính của countblock này là gì Detailing ơi ?

Do ket xài cad 2008 chắc có hàm nào đó ko có trong thư viện. Để lát trưa cài CAD 07 rồi fix lại.
Chức năng chỉ là đếm block thôi nhưng giải quyết cái chỗ text hiện ra ngay con trỏ giống như DynPrompt nhưng ko phải DynPrompt

p/s: Sorry ket cái này chỉ chạy dc trên CAD2010 trở lên
Thân!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341