Rated 5/5 based on 240179 internet user reviews

Đến nội dung


Hình ảnh
- - - - -

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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 08 September 2010 - 05:52 PM

Lập trì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 mì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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 mì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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 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
  • 1281 Bài viết
Điểm đánh giá: 619 (tốt)

Đã gửi 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 gì 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 gì gì đó đ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ó vòi tiền anh rồi :undecided:)
....
  • 0

...Một chiều ngồi say

Một đời thật nhẹ

Ngày qua...


#5 VUVUZELA

VUVUZELA

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 trì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 mò 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
  • 1323 Bài viết
Điểm đánh giá: 1363 (rất tốt)

Đã gửi 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 mò 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 trì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
  • 5804 Bài viết
Điểm đánh giá: 3021 (tuyệt vời)

Đã gửi 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 trì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ỉ???
Mì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 mì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
  • 1323 Bài viết
Điểm đánh giá: 1363 (rất tốt)

Đã gửi 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ỉ???
Mì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 mì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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 trì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 trì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 trì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á gì) 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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 gì không nữa mà không thấy bác reply gì 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
  • 5804 Bài viết
Điểm đánh giá: 3021 (tuyệt vời)

Đã gửi 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 gì không nữa mà không thấy bác reply gì cả nhỉ

Hề hề hề,
Cái vụ này nghe chừng chả hề dễ đâu bác ơi, mì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 gì đó mà tìm hoài chả ra. Khi bác list thì có dò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 gì 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 mình nghĩ rằng có khi đi vòng vò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 gì, cứ cho nó núp thoải mái, mì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
  • 1323 Bài viết
Điểm đánh giá: 1363 (rất tốt)

Đã gửi 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 gì không nữa mà không thấy bác reply gì 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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 mò 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
  • 1323 Bài viết
Điểm đánh giá: 1363 (rất tốt)

Đã gửi 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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 fillet

  • Members
  • PipPipPipPip
  • 201 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 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 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 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 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 27 April 2011 - 04:18 PM

Bạn vui lò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
  • 1323 Bài viết
Điểm đánh giá: 1363 (rất tốt)

Đã gửi 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