Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
VUVUZELA

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

Các bài được khuyến nghị

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.com/upfiles/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
)
;;-----------------------------

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

....

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/forum/index.php?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:

(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

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/forum/index.php?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:

(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ỉ?????

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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)  )

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/forum/index.php?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:

(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

 

:(

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ỉ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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ề.....

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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 !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Á 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.dailyautocad.com/search/label/Visual%20LISP

 

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é

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
................

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.com/forum/index.php?sho...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)  )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/forum/index.php?sho...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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.com/file/ivab1cqicayr76c/Tn.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.com/file/1skte64jd60d532/Tn%281%29.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)  )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×