Rated 5/5 based on 240179 internet user reviews

Jump to content


Change Photo
- - - - -

Có cách nào lấy dữ liệu và chỉnh sửa đối tượng PROXY


  • Please log in to reply
20 replies to this topic

#1 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 08 September 2010 - 05:52 PM

Lập tŕnh bằng các lệnh đơn giản của AutoLisp hoài cũng chán
Nên em mới nghiên cứu sang các đối tượng Proxy của AutoCAd
Cái này rất hay v́ liên quan đến phần RECTOR của AutoCAD
Đây là file chuẩn của phần mềm san nền HS

http://www.cadviet.c...les/3/proxy.dwg

Các bạn muốn nh́n thấy nó th́ vào
Tool=> OpotionOpen and Save ==> Chọn chế độ Show proxy graphics
Regen bản vẽ sẽ thấy
Đây là 1 ví dụ về Rector mới lụm trên Internet về, các bạn nghiên cứu thử

; C:CONNECT - demonstrates simple reactor system based on					;             Visual LISP.					;					; Draw two circles, then run the connect routine.  A line					; will be drawn between the two circles.  If either circle					; is modified, the line is regenerate.  More than one					; set of circles can be related and one circle can be 					; related to a group of circles.					;					; This function set merely demonstrates the basics involved					; in building a reactor system in Visual LISP.					;					;					;Connection reactor set up routine					;(defun C:RT ()  (setq	EN1	     (car (entsel "\nPick a circle: "))	EN2	     (car (entsel " and another: "))	RCnt	     (if RCnt		       (1+ RCnt)		       1		     )	Connect_Flag 'T  )  (if (and EN1 EN2)    (progn      (vl-load-com)      (setq EN3	(Connection EN1 EN2)	    ;;see listing 21	    EN3	(vlax-ename->vla-object EN3)	    EN1	(vlax-ename->vla-object EN1)	    EN2	(vlax-ename->vla-object EN2)      )      (vlr-object-reactor	(list EN1 EN2 EN3)	(strcat "Connect Circles " (itoa RCnt))	'((:vlr-modified . ConnectFix)	  ;;see listing 22					;(:vlr-erased . ConnectKill)	 )      )    )  ));;---------------------------------------------------------					; Drawing a line between circles					;(defun Connection (EN1 EN2 / EL1 EL2)  (setq	EN1 (if	(= (type EN1) 'EName)	      EN1	      (vlax-vla-object->ename EN1)	    )	EN2 (if	(= (type EN2) 'Ename)	      EN2	      (vlax-vla-object->ename EN2)	    )	EL1 (entget EN1)	EL2 (entget EN2)	R1  (cdr (assoc 40 EL1))	R2  (cdr (assoc 40 EL2))	P1  (cdr (assoc 10 EL1))	P2  (cdr (assoc 10 EL2))	A1  (angle P1 P2)	P1  (polar P1 A1 R1)	P2  (polar P2 (+ A1 PI) R2)  )  (entmake (list	     '(0 . "LINE")	     (assoc 8 EL1)	     (cons 10 P1)	     (cons 11 P2)	   )  )  (entlast));;---------------------------------------------------------					; Entity Object Callback function					;(defun ConnectFix (Not_Obj		   ;;caused notification		   Re_Obj		   ;;reactor object		   PList		   ;;parameters list		   /	  ObjList		   ;;objects in reactor set		   VObj		   ;;VLA object		   EN		   ;;Entity name		   EL		   ;;Entity list		   ENL		   ;;Entity list for line		   P1		   ;;Center/end point 1		   P2		   ;;Center/end point 2		   R1		   ;;Radius 1		   R2		   ;;Radius 2		   SkipIt		   ;;Process change flag		  )  ;;  (if Connect_Flag    (progn      (setq Connect_Flag nil)      ;;      ;;Get list of objects associated with the      ;;reactor that caused the call back.      ;;      (setq ObjList (vlr-owners Re_Obj))      ;;      ;;Loop through each object in list      (foreach VObj ObjList	;;	;;Convert object reference to AutoLISP style	(setq EN (vlax-vla-object->ename VObj)	      EL (entget EN)	)	(cond ;;what type of entity is it?	      ((= (cdr (assoc 0 EL)) "LINE")	       ;;Did the line object cause the callback?	       (if (eq Not_Obj VObj)		 ;;if so, skip it.		 (setq SkipIt 'T)	       )	       (setq ENL EL)	       ;;save entity list of line	      )	      ('T	       ;;Otherwise it is one of the circles.	       ;;get the center point and radius	       (set (if	(boundp 'P1)		      'P2		      'P1		    )		    (cdr (assoc 10 EL))	       )	       (set (if	(boundp 'R1)		      'R2		      'R1		    )		    (cdr (assoc 40 EL))	       )	      )	)      )      (setq AA	(angle P1 P2)	    ;;angle between circles	    ;;adjust points P1 and P2	    P1	(polar P1 AA R1)	    P2	(polar P2 (+ AA PI) R2)	    ;;replace values in entity list	    ENL	(subst (cons 10 P1)		       (assoc 10 ENL)		       ENL		)	    ENL	(subst (cons 11 P2)		       (assoc 11 ENL)		       ENL		)      )      (if (null SkipIt)	(progn	  (entmod ENL)	  ;;update the line	)	(prompt "\nConnection broken.")      )      (setq Connect_Flag 'T)    )    ;;end PROGN  )  ;;end IF);;-----------------------------</XMP></BODY></HTML>

Và câu hỏi ḿnh muốn đặt ra ở đây là đối với bản vẽ trên th́ cách lấy các dữ liệu mở rộng của PROXY là như thế nào??
Có cách nào để t́m điểm gốc đặt vị trí của PROXY hay không
Rất mong các CAO THỦ chỉ giáo
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#2 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 15 September 2010 - 12:49 PM

Các cao thủ vơ lâm ơi
Bác admin ơi
Bác NguyenHoanh ơi
có ai giúp em ko

Thôi th́ giúp em cái đoạn mă nào chọn đối tượng proxy cho ra kết quả là DXF name
giống như khi ta bấm lệnh List cái
Cái này khó quá, t́m trên internet măi mà không thấy, vả lại tiếng anh tiếng em ḿnh tệ quá nên t́m kô ra
Help me, please

ACAD_PROXY_ENTITY Layer: "HS_INFOR_OBJ"
Space: Model space
Handle = 3E658C
DXF name: HS_CELLINFOROBJECT
Class name: HsCellInforObj
Application name: Harmony
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#3 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 17 September 2010 - 09:39 AM

Mới viết email gửi cho ông chuyên gia autolisp và autocad oqr nưóc ngoài xin giúp đỡ (vấn đề nêu trên) th́ nhận được mail reply thế này

"I don’t think I can help you easily.
With AutoLISP you cannot get more info. It might be possible with .NET or ObjectARX but I can only look further if you’re interested to pay for the work"
Kư tên : Jimmy Bergmark - JTB World

Có ai biết Tiếng Anh ko? Dịch giùm ḿnh cái
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#4 Mũn xinh

Mũn xinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1,187 posts
Danh tiếng: 585 (tốt)

Gửi vào 17 September 2010 - 10:14 AM

chubi chit: "I don’t think I can help you easily.
With AutoLISP you cannot get more info. It might be possible with .NET or ObjectARX but I can only look further if you’re interested to pay for the work"
Kư tên : Jimmy Bergmark - JTB World
chubi chit: hey man
chubi chit: dịch choa anh cái này với
Truong Vu Tuan: Cái ǵ thế anh?
chubi chit: thư trả lời của 1 thằng tây
Truong Vu Tuan: Nó đ̣i tiền anh ư mà
Truong Vu Tuan: Nó bảo nó ko thể dễ dàng mà giúp anh được
chubi chit: thế à
Truong Vu Tuan: Để làm được cái việc anh nhờ nó
Truong Vu Tuan: Nó phải dùng một số cái đặc biệt
Truong Vu Tuan: Nên nếu anh trả tiền cho nó
Truong Vu Tuan: th́ ok
chubi chit: àh
Truong Vu Tuan: ko đơn thuần là giúp
chubi chit: thank man
Truong Vu Tuan: Chi tiết hơn
Truong Vu Tuan: là nó bỏa, nếu là file ǵ ǵ đó đuôi .NET
Truong Vu Tuan: hoặc ObjectARX
Truong Vu Tuan: th́ may ra dc
Truong Vu Tuan: c̣n các cái khác th́ nó phải làm cách khác
Truong Vu Tuan: đại loại là thế anh ạ
chubi chit: ok
chubi chit: thank man
Truong Vu Tuan: nó ṿi tiền anh rồi :undecided:)
....
  • 0

Phan Kiên
Trưởng phòng thiết kế
Mobile: 0903 402211 
Email: kienphan.design@gmail.com
NGUYENHIEPINTERIOR CO.,LTD
Head Office: No 21G - 90/4 Buoi street, BaDinh Dist, Hanoi 
Tel: 0439941760 Fax: 043211579

-----------------------------------------------------

http://www.nguyenhiep.com.vn


#5 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 17 September 2010 - 05:13 PM

Bon ... on ... n
Bon ... on ... n

Xe chạy quá đà qua VBA(Bổ đề năm 2010) và Lập tŕnh điều khiển AutoCad từ bên ngoài  ...
Có nên đề nghị Admin mở thêm Room VisualLisp không nhỉ?
Quay về AutoLisp thôi. (nhưng AutoLisp th́ chịu)

Với mục đích là để t́m và xóa các đối tượng proxy th́ VBA có thể làm đuợc, AutoCad .Net cũng có thể làm đuợc.
VisualLisp th́ sao? Câu trả lời là cũng có thể đuợc.
Hề hề hề , chắc phải đề nghị Admin mở thêm Room VisualLisp thôi.

Bi giờ là cuối tuần (hết giờ cho CV rùi, phài dành cho nguời êu thui), nếu bác không gấp th́ hẹn đầu tuần nhé.
Bon ... on ... n


Keke
Bác này hiểu ư em, thế mà không nói sớm
Để em đi ra nước ngoài học hỏi mà tụi nó đ̣i học phí cao quá mà Tài khoản = 0 nên chịu
T́m và xóa các đối tượng proxy (xoá hết) th́ bằng autolisp th́ em làm được
trong autolisp có lệnh vla-get-proxyimage mà cấu lệnh này thế nào t́m trên google măi không thấy ==>pó tay
Mục đích của em là :
1. em muốn là t́m và xoá các đối tượng nằm gần nhau dưới 1 khoảng cách nhập vào (có nghĩa là xoá có chọn lọc)
2. Em muốn t́m ra điểm gốc đặt proxy (cái này ṃ bằng autolisp măi không được)
3. Lọc lấy layer chứa proxy (nếu có điều kiện th́ lấy hết dữ liệu mở rộng trong đó luôn) như autocad có lệnh command : LIST
Bác có sách nào hay về VBA, AutoCad.net hay visual lisp nào hay chỉ em vài cuốn với ( hay là chỉ đường dẫn hoạc post lên càng tốt)
Dạo này các công ty viết phần mềm ứng dụng viết trên Autocad xài toàn PROXY (hồi trước viết với xdata nên dễ tương tác hơn) nên em chịu

Chúc bác cuối tuần vui vẻ bên người IU
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#6 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 20 September 2010 - 09:04 AM

Keke
Bác này hiểu ư em, thế mà không nói sớm
Để em đi ra nước ngoài học hỏi mà tụi nó đ̣i học phí cao quá mà Tài khoản = 0 nên chịu
T́m và xóa các đối tượng proxy (xoá hết) th́ bằng autolisp th́ em làm được
trong autolisp có lệnh vla-get-proxyimage mà cấu lệnh này thế nào t́m trên google măi không thấy ==>pó tay
Mục đích của em là :
1. em muốn là t́m và xoá các đối tượng nằm gần nhau dưới 1 khoảng cách nhập vào (có nghĩa là xoá có chọn lọc)
2. Em muốn t́m ra điểm gốc đặt proxy (cái này ṃ bằng autolisp măi không được)
3. Lọc lấy layer chứa proxy (nếu có điều kiện th́ lấy hết dữ liệu mở rộng trong đó luôn) như autocad có lệnh command : LIST
Bác có sách nào hay về VBA, AutoCad.net hay visual lisp nào hay chỉ em vài cuốn với ( hay là chỉ đường dẫn hoạc post lên càng tốt)
Dạo này các công ty viết phần mềm ứng dụng viết trên Autocad xài toàn PROXY (hồi trước viết với xdata nên dễ tương tác hơn) nên em chịu

Chúc bác cuối tuần vui vẻ bên người IU

Chào VUVUZELA
Ngoài lề 1 chút, VUVUZELA có ai "chống lưng" không vậy ?
(do mở cùng một vấn đề trên nhiều topic khác nhau nhưng chẳng thấy Mod nào lên tiếng !
hề hề : chắc sợ FIFA can thiệp ...)

Trở lại chủ đề chính, không phải là tui không nói sớm, mà là do cách đặt vấn đề của VUVUZELA.
- bài viết đầu tiên Vuvuzela hỏi : Có cách nào để t́m điểm gốc đặt vị trí của PROXY ? Thú thực cho đến bây giờ tôi chưa biết cách t́m điểm gốc đặt vị trí của PROXY, nên không thể trả lời đuợc.
- tuy nhiên với cách tiếp cận : t́m và xoá các đối tượng nằm gần nhau dưới 1 khoảng cách th́ vấn đề lại khác.

Yêu cầu của bạn tuơng tự như yêu cầu : xoá text trong khoảng nhất định của NDBNGO http://www.cadviet.c...showtopic=23110
Vấn đề ở đây là t́m đuờng bao của PROXY (mở rộng : t́m đuờng bao của tất cả đối tuợng).
Trên cơ sở đuờng bao của các PROXY, nếu đối tuợng có giao với đuờng bao -> xóa đối tuợng đó.

V́ Vuvuzela đă biết lập tŕnh nên tôi chỉ giới thiệu hàm tính đuờng bao của PROXY (mở rộng cho tất cả đối tuợng)
Các buớc kế tiếp, tham khảo Lisp xoá text trong khoảng nhất định

Code hàm tính đuờng bao của đối tuợng:
  (setq ll (safearray-value ll)
ur (safearray-value ur)
lst (list (list (car ll) (cadr ll))
(list (car ll) (cadr ur))
(list (car ur) (cadr ur))
(list (car ur) (cadr ll)))))

(defun C _linenums:0'>(defun lstBound (ent / lst ll ur) (vla-GetBoundingBox (vlax-Ename->Vla-Object ent) 'll 'ur) (setq ll (safearray-value ll) ur (safearray-value ur) lst (list (list (car ll) (cadr ll)) (list (car ll) (cadr ur)) (list (car ur) (cadr ur)) (list (car ur) (cadr ll)))))(defun C:test (/ ent lstRec) (setq ent (car (entsel "\nSelect object:")) lstRec (lstBound ent)) (vla-put-Closed (vla-AddLightWeightPolyline (vla-get-modelspace (vla-get-ActiveDocument (vlax-get-Acad-Object))) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* 2 (length lstRec))))) (apply (function append) lstRec)))) :vlax-true) (princ) )


Lọc lấy layer chứa proxy
- hàm chọn tất cả các Proxy (ssget (list (cons 0 "ACAD_PROXY_ENTITY")))
có tập chọn th́ việc lấy layer chứa proxy là chuyện nhỏ với Vuvuzela ?!

Chúc bạn thành công và tiếp tục lăn bánh Bon ... on ... n
  • 1

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,445 posts
Danh tiếng: 2919 (tuyệt vời)

Gửi vào 20 September 2010 - 10:34 AM

Chào VUVUZELA
Ngoài lề 1 chút, VUVUZELA có ai "chống lưng" không vậy ?
(do mở cùng một vấn đề trên nhiều topic khác nhau nhưng chẳng thấy Mod nào lên tiếng !
hề hề : chắc sợ FIFA can thiệp ...)

Trở lại chủ đề chính, không phải là tui không nói sớm, mà là do cách đặt vấn đề của VUVUZELA.
- bài viết đầu tiên Vuvuzela hỏi : Có cách nào để t́m điểm gốc đặt vị trí của PROXY ? Thú thực cho đến bây giờ tôi chưa biết cách t́m điểm gốc đặt vị trí của PROXY, nên không thể trả lời đuợc.
- tuy nhiên với cách tiếp cận : t́m và xoá các đối tượng nằm gần nhau dưới 1 khoảng cách th́ vấn đề lại khác.

Yêu cầu của bạn tuơng tự như yêu cầu : xoá text trong khoảng nhất định của NDBNGO http://www.cadviet.c...showtopic=23110
Vấn đề ở đây là t́m đuờng bao của PROXY (mở rộng : t́m đuờng bao của tất cả đối tuợng).
Trên cơ sở đuờng bao của các PROXY, nếu đối tuợng có giao với đuờng bao -> xóa đối tuợng đó.

V́ Vuvuzela đă biết lập tŕnh nên tôi chỉ giới thiệu hàm tính đuờng bao của PROXY (mở rộng cho tất cả đối tuợng)
Các buớc kế tiếp, tham khảo Lisp xoá text trong khoảng nhất định

Code hàm tính đuờng bao của đối tuợng:

  (setq ll (safearray-value ll)
ur (safearray-value ur)
lst (list (list (car ll) (cadr ll))
(list (car ll) (cadr ur))
(list (car ur) (cadr ur))
(list (car ur) (cadr ll)))))

(defun C _linenums:0'>(defun lstBound (ent / lst ll ur) (vla-GetBoundingBox (vlax-Ename->Vla-Object ent) 'll 'ur) (setq ll (safearray-value ll) ur (safearray-value ur) lst (list (list (car ll) (cadr ll)) (list (car ll) (cadr ur)) (list (car ur) (cadr ur)) (list (car ur) (cadr ll)))))(defun C:test (/ ent lstRec) (setq ent (car (entsel "\nSelect object:")) lstRec (lstBound ent)) (vla-put-Closed (vla-AddLightWeightPolyline (vla-get-modelspace (vla-get-ActiveDocument (vlax-get-Acad-Object))) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* 2 (length lstRec))))) (apply (function append) lstRec)))) :vlax-true) (princ) )
Lọc lấy layer chứa proxy
- hàm chọn tất cả các Proxy (ssget (list (cons 0 "ACAD_PROXY_ENTITY")))
có tập chọn th́ việc lấy layer chứa proxy là chuyện nhỏ với Vuvuzela ?!

Chúc bạn thành công và tiếp tục lăn bánh Bon ... on ... n

Chào bác Gia_bach,
Cái vụ lấy boundary của ACAD_PROXY_ENTITY này có thể dùng hàm (acet-ent-geomextents ent) hay hàm (acet-geom-ss-extents-fast ss) được không bác nhỉ???
Ḿnh chưa phân biệt được sự khác nhau giữa hai loại hàm (acet-ent-geomextents ent) và hàm (vla-getboundingbox (vlax-ename->vla-object ent))
Một điều ḿnh muốn hỏi thêm nữa là có thể thay (vla-getboundingbox (vlax-ename->vla-object ent)) bằng hàm (vlax-get-property (vlax-ename->vla-object ent) 'boundingbox) được không bác nhỉ?????
  • 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 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 20 September 2010 - 11:11 AM

Chào bác Gia_bach,
Cái vụ lấy boundary của ACAD_PROXY_ENTITY này có thể dùng hàm (acet-ent-geomextents ent) hay hàm (acet-geom-ss-extents-fast ss) được không bác nhỉ???
Ḿnh chưa phân biệt được sự khác nhau giữa hai loại hàm (acet-ent-geomextents ent) và hàm (vla-getboundingbox (vlax-ename->vla-object ent))
Một điều ḿnh muốn hỏi thêm nữa là có thể thay (vla-getboundingbox (vlax-ename->vla-object ent)) bằng hàm (vlax-get-property (vlax-ename->vla-object ent) 'boundingbox) được không bác nhỉ?????

Chào bác B́nh
Nói chung là giống nhau cả
- hàm vla-getboundingbox đối số là Vla-Object : hàm chính thức của VisualLisp
- hàm acet-ent-geomextents đối số là Ename : hàm nằm trong bộ ExpressTool (khi sử dụng hàm này phải có ExpressTool đă cài đặt)

GetBoundingbox là Method (không phải property), nên không dùng hàm vlax-get-property để lấy thuộc tính(property) đuợc.

Bác dùng lá bùa này để xem các Property và Method.

(defun C:PP ();Dump  (vlax-dump-object (vlax-Ename->Vla-Object (car (entsel "\nSelect object:")))t)  (textscr)(princ)  )

  • 1

#9 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 20 September 2010 - 11:26 AM

Chào VUVUZELA
Ngoài lề 1 chút, VUVUZELA có ai "chống lưng" không vậy ?
(do mở cùng một vấn đề trên nhiều topic khác nhau nhưng chẳng thấy Mod nào lên tiếng !
hề hề : chắc sợ FIFA can thiệp ...)

Trở lại chủ đề chính, không phải là tui không nói sớm, mà là do cách đặt vấn đề của VUVUZELA.
- bài viết đầu tiên Vuvuzela hỏi : Có cách nào để t́m điểm gốc đặt vị trí của PROXY ? Thú thực cho đến bây giờ tôi chưa biết cách t́m điểm gốc đặt vị trí của PROXY, nên không thể trả lời đuợc.
- tuy nhiên với cách tiếp cận : t́m và xoá các đối tượng nằm gần nhau dưới 1 khoảng cách th́ vấn đề lại khác.

Yêu cầu của bạn tuơng tự như yêu cầu : xoá text trong khoảng nhất định của NDBNGO http://www.cadviet.c...showtopic=23110
Vấn đề ở đây là t́m đuờng bao của PROXY (mở rộng : t́m đuờng bao của tất cả đối tuợng).
Trên cơ sở đuờng bao của các PROXY, nếu đối tuợng có giao với đuờng bao -> xóa đối tuợng đó.

V́ Vuvuzela đă biết lập tŕnh nên tôi chỉ giới thiệu hàm tính đuờng bao của PROXY (mở rộng cho tất cả đối tuợng)
Các buớc kế tiếp, tham khảo Lisp xoá text trong khoảng nhất định

Code hàm tính đuờng bao của đối tuợng:

  (setq ll (safearray-value ll)
ur (safearray-value ur)
lst (list (list (car ll) (cadr ll))
(list (car ll) (cadr ur))
(list (car ur) (cadr ur))
(list (car ur) (cadr ll)))))

(defun C _linenums:0'>(defun lstBound (ent / lst ll ur) (vla-GetBoundingBox (vlax-Ename->Vla-Object ent) 'll 'ur) (setq ll (safearray-value ll) ur (safearray-value ur) lst (list (list (car ll) (cadr ll)) (list (car ll) (cadr ur)) (list (car ur) (cadr ur)) (list (car ur) (cadr ll)))))(defun C:test (/ ent lstRec) (setq ent (car (entsel "\nSelect object:")) lstRec (lstBound ent)) (vla-put-Closed (vla-AddLightWeightPolyline (vla-get-modelspace (vla-get-ActiveDocument (vlax-get-Acad-Object))) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* 2 (length lstRec))))) (apply (function append) lstRec)))) :vlax-true) (princ) )
Lọc lấy layer chứa proxy
- hàm chọn tất cả các Proxy (ssget (list (cons 0 "ACAD_PROXY_ENTITY")))
có tập chọn th́ việc lấy layer chứa proxy là chuyện nhỏ với Vuvuzela ?!

Chúc bạn thành công và tiếp tục lăn bánh Bon ... on ... n


Bác gia_bach uy tín thật
Bác bảo đầu tuần sẽ reply th́ mới sáng thứ 2 mở ra đă có rồi
Cám ơn bác nhiều nhé, bác đă chỉ ra hướng thật là hay. Em đă ngộ ra nhiều điều
Khâm phục, khâm phục
Em viết autolisp từ hồi autocad R14 đến giờ nên khả năng cập nhật những câu lệnh mới của visual lisp th́ chịu (tiếng Anh dốt mà)
Cái PROXY này trong các chương tŕnh thường lấy theo layer hiện hành nên việc lọc để mà EXPLODE rất khó
nên việc viết chương tŕnh thường gặp vấn đề chỗ này
Nhưng có một cách là lấy DXF name của nó
Ví dụ như khi bấm lệnh command : LIST chọn đối tượng sẽ ra kết quả như thế này
LIST
Select objects: 1 found
Select objects:

ACAD_PROXY_ENTITY Layer: "CDTKE"
Space: Model space
Handle = 3F6652
DXF name: HS_NODEOBJECT
Class name: HsNodeObj
Application name: Harmony

V́ vậy cách tốt nhất là lấy được DXF name: HS_NODEOBJECT (em tham khảo các phần mềm khác cũng thường định nghĩa cho các đối tương thường theo DXF name này)
V́ thế, "đă thương th́ thương cho chót"
Mong bác chỉ giáo cách nào lấy được DXF name của nó để em lọc cho nó dễ
Em xin cám ơn bác nhiều lắm

C̣n đối với câu hỏi

Ngoài lề 1 chút, VUVUZELA có ai "chống lưng" không vậy ?


Th́ em xin trả lời luôn là không có ai chống lưng hết
Chắc tại các bác Admin thấy em hiền (đi tu rồi, không có ư quậy phá ǵ) lại ham học hỏi nên thương t́nh, không thổi c̣i em vậy thôi
Bon ... on ... n

:(
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#10 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 21 September 2010 - 09:21 AM

Giả sử bạn có đuợc DXF name của Proxy (dùng lệnh LIST).
Câu hỏi là : làm cách nào để lọc đối tuợng theo DXF name ?


Cái này tương đối dễ
V́ khi em viết lệnh chọn Proxy theo cú pháp (ssget (list (cons 0 "ACAD_PROXY_ENTITY")))
th́ cái thằng PROXY này rất khó chịu
Khi em viết cấu trúc câu lệnh như bác hướng dẫn trên th́ ngặt một nỗi là
Cũng cùng chung 1 bản vẽ (khi tắt hết layer chỉ c̣n 1 layer của PROXY) :
- Khi chọn đối tượng bằng cách (ssget (list (cons 0 "ACAD_PROXY_ENTITY"))) th́ kết quả trả ra là 28 đối tượng
- Khi chọn hết đối tượng qua câu lệnh (ssget "X" (list (cons 0 "ACAD_PROXY_ENTITY"))) th́ kết quả trả ra là > 28 đối tượng và như vậy th́ khi dùng hàm lstBound bị lỗi ; error: Automation Error. Invalid extents (cái này em không hiểu v́ sao)
Nếu bác giúp em t́m được cái DXF name ?[/color] của PROXY th́ em xài cú pháp sau để lọc tiếp để tránh lỗi và lọc được đối tượng :

(setq i -1)(setq ss1 (ssadd))(repeat	(sslength ss)  (setq i (+ i 1))  (setq ent (ssname ss i))  (setq DXFname (nhobacgia_bachgiup ent))  (if (= DXFname "HS_NODEOBJECT")    (setq ss1 (ssadd ent ss1))  ))

Bác gia_bach này cứ chọc em hoài
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#11 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 22 September 2010 - 09:58 AM

Anh em ơi
Có ai thấy bác gia_bach ở đâu không?
Chỉ em với
Không biết bác gia_bach có bị đau ǵ không nữa mà không thấy bác reply ǵ cả nhỉ
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#12 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 5,445 posts
Danh tiếng: 2919 (tuyệt vời)

Gửi vào 22 September 2010 - 03:07 PM

Anh em ơi
Có ai thấy bác gia_bach ở đâu không?
Chỉ em với
Không biết bác gia_bach có bị đau ǵ không nữa mà không thấy bác reply ǵ cả nhỉ

Hề hề hề,
Cái vụ này nghe chừng chả hề dễ đâu bác ơi, ḿnh cũng lọ mọ lâu lâu rồi mà chửa thấy ra được cái hướng nào sang sáng cả. Rơ ràng là nó có dấu diếm cái ǵ đó mà t́m hoài chả ra. Khi bác list th́ có ḍm thấy nó thật nhưng lục tung cả cái đám mă DXF th́ lại chả thấy đâu. Ngay cả dùng hàm vlax-dump-object cũng cho ra toàn nhưng cái chả dính ǵ tới cái DXF name của bác cả.
Vậy nên bác cứ phải thủng thẳng một chút chớ dục tốc bất đạt bác ạ. Vả lại ḿnh nghĩ rằng có khi đi ṿng ṿng một tí lại đỡ kẹt xe hơn bác ạ, May ra có thể có được cách xử lư khác mà chả phải quan tâm tới cái thằng dxf name này làm ǵ, cứ cho nó núp thoải mái, ḿnh cứ uưnh chết thằng con nó là có khi nó chạy ra lạy bác ngay ư mà... 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.

#13 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 22 September 2010 - 03:51 PM

Anh em ơi
Có ai thấy bác gia_bach ở đâu không?
Chỉ em với
Không biết bác gia_bach có bị đau ǵ không nữa mà không thấy bác reply ǵ cả nhỉ

Á khẩu rùi, VisualLisp pótay. :(
Tui chạy qua ObjectARX nhưng bị lạc trong đám arx không thấy lối ra.
Proxy là sản phẩm của ObjectARX đó, VUVUZELA thử "ngâm cứu" xem !
  • 0

#14 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 23 September 2010 - 09:41 AM

Á khẩu rùi, VisualLisp pótay. :(
Tui chạy qua ObjectARX nhưng bị lạc trong đám arx không thấy lối ra.
Proxy là sản phẩm của ObjectARX đó, VUVUZELA thử "ngâm cứu" xem !


Dù sao th́ cũng cảm ơn bác gia_bach đă nhiệt t́nh giúp đỡ
Em cũng đang nghiên cứu nó đây
Và em cũng mới t́m được trang web hay về VisualLisp
Link nè
http://www.dailyauto...bel/Visual LISP

Em th́ dốt tiếng Anh nên chắc cũng ṃ hơi lâu nên bác nào giỏi tiếng Anh th́ vào đây nghiên cứu nhé
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#15 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 08 October 2010 - 02:39 PM

................
Nếu bác giúp em t́m được cái DXF name của PROXY th́ em xài cú pháp sau để lọc tiếp để tránh lỗi và lọc được đối tượng :

(setq i -1)(setq ss1 (ssadd))(repeat	(sslength ss)  (setq i (+ i 1))  (setq ent (ssname ss i))  (setq DXFname (nhobacgia_bachgiup ent))  (if (= DXFname "HS_NODEOBJECT")    (setq ss1 (ssadd ent ss1))  ))
.................

Bạn load file Proxy LispFunction, giải nén file Proxy_Info.dll vào ổ cứng (Vd : c:\).
Gọi lệnh Netload rồi chọn file Proxy_Info.dll vừa bung nén ở buớc trên.
Tham khảo : http://www.cadviet.c...o...st&p=111477

Để lấy thông tin của Proxy, trong LISP gọi hàm (Proxy_Info ename)
kết quả nhận đuợc là 1 danh sách các thông tin của Proxy :
- ("\"Harmony\"" "HsCellInforObj" "HS_CELLINFOROBJECT")
- ("\"Harmony\"" "HsNodeObj" "HS_NODEOBJECT")
- hoặc" Entity không phải là Proxy."

hay chạy lisp sau :
;- thông tin của Proxy(defun C:proxy(/ e)  (if (setq e (entsel "\nSelect object:"))    (princ (vl-prin1-to-string (Proxy_Info (car e)) ))  )  (princ)  );- DXF name của Proxy (defun C:DXF_name(/ e)  (if (setq e (entsel "\nSelect object:"))    (princ (last (Proxy_Info (car e)) ))  )  (princ)  )

  • 0

#16 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 08 October 2010 - 04:32 PM

Bạn load file Proxy LispFunction, giải nén file Proxy_Info.dll vào ổ cứng (Vd : c:\).
Gọi lệnh Netload rồi chọn file Proxy_Info.dll vừa bung nén ở buớc trên.
Tham khảo : http://www.cadviet.c...o...st&p=111477

Để lấy thông tin của Proxy, trong LISP gọi hàm (Proxy_Info ename)
kết quả nhận đuợc là 1 danh sách các thông tin của Proxy :
- ("\"Harmony\"" "HsCellInforObj" "HS_CELLINFOROBJECT")
- ("\"Harmony\"" "HsNodeObj" "HS_NODEOBJECT")
- hoặc" Entity không phải là Proxy."

hay chạy lisp sau :

;- thông tin của Proxy(defun C:proxy(/ e)  (if (setq e (entsel "\nSelect object:"))    (princ (vl-prin1-to-string (Proxy_Info (car e)) ))  )  (princ)  );- DXF name của Proxy (defun C:DXF_name(/ e)  (if (setq e (entsel "\nSelect object:"))    (princ (last (Proxy_Info (car e)) ))  )  (princ)  )


Chưa thử được đại ka ơi
Vô Cad bấm lệnh NETLOAD th́ nó không hiểu
Chắc là phải cài Microsoft Visual C# hả đại ka
Cái này ở đâu có thế
Trong AutoCad 2004 sao em không thấy
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#17 VUVUZELA

VUVUZELA

    biết lệnh trim

  • Members
  • PipPipPip
  • 194 posts
Danh tiếng: 88 (tàm tạm)

Gửi vào 09 October 2010 - 08:53 AM

Em đọc các bài AutoCad.net rồi
Lệnh NETLOAD th́ phải từ AutoCad 2005 mới có
Nhưng em đang xài AutoCad 2004 và viết AutoLíp trên Cad 2004
Vậy không có cách nào xài trên AutoCad2004 hả anh
Cài thêm th́ mất công quá
V́ em xài quen AutoCad 2004 rồi
huhuhu
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#18 thaihoa123

thaihoa123

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (b́nh thường)

Gửi vào 23 April 2011 - 05:06 PM

Code hàm tính đuờng bao của đối tuợng:
(defun lstBound (ent / lst ll ur)  (vla-GetBoundingBox (vlax-Ename->Vla-Object ent) 'll 'ur)  (setq ll (safearray-value ll)	ur (safearray-value ur)	lst (list (list (car ll) (cadr ll))		  (list (car ll) (cadr ur))		  (list (car ur) (cadr ur))		  (list (car ur) (cadr ll)))))(defun C:test (/ ent lstRec)  (setq ent (car (entsel "\nSelect object:"))	lstRec (lstBound ent))  (vla-put-Closed    (vla-AddLightWeightPolyline (vla-get-modelspace (vla-get-ActiveDocument (vlax-get-Acad-Object)))      (vlax-make-variant	(vlax-safearray-fill	  (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* 2 (length lstRec)))))	  (apply (function append) lstRec))))    :vlax-true)  (princ)  )



nhờ anh Gia_bach xem hộ v́ sao Block này khi lấy đường bao bằng hàm trên th́ không đúng?
(e định lấy block để làm khung in nhưng nó không nhận đúng vùng in)
Link: http://www.mediafire...icayr76c/Tn.dwg
  • 0

#19 thaihoa123

thaihoa123

    biết pan

  • Members
  • Pip
  • 9 posts
Danh tiếng: 0 (b́nh thường)

Gửi vào 27 April 2011 - 04:18 PM

Bạn vui ḷng cho biết tên Block ?
Trong file đính kèm chỉ có PLine !

e quên mất khi phá khối ra (thành Pline) để thử th́ vẫn nhận đúng đường bao
Link lại: http://www.mediafire...0d532/Tn(1).dwg
a xem giúp e nhe!
  • 0

#20 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1,230 posts
Danh tiếng: 1300 (rất tốt)

Gửi vào 27 April 2011 - 04:27 PM

e quên mất khi phá khối ra (thành Pline) để thử th́ vẫn nhận đúng đường bao
Link lại: http://www.mediafire...0d532/Tn(1).dwg
a xem giúp e nhe!

Chạy b́nh thuờng mà.
List vẽ 2 đuờng chéo của đuờng bao.
(defun lstBound (ent / lst ll ur)
  (vla-GetBoundingBox (vlax-Ename->Vla-Object ent) 'll 'ur)
  (setq ll (safearray-value ll)
	ur (safearray-value ur)
	lst (list (list (car ll) (cadr ll))
		  (list (car ll) (cadr ur))
		  (list (car ur) (cadr ur))
		  (list (car ur) (cadr ll)))))

(defun C:test (/ ent lstRec)
  (setq ent (car (entsel "\nSelect object:"))
	lstRec (lstBound ent))
  (entmake (list (cons 0 "LINE") (cons 10 (car lstRec)) (cons 11 (caddr lstRec))))
  (entmake (list (cons 0 "LINE") (cons 10 (cadr lstRec)) (cons 11 (last lstRec))))
;;;  (foreach pt lstRec
;;;    (entmake (list (cons 0 "POINT") (cons 10 pt) )))
  (princ)  )

  • 0