Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
NguyenNgocSon

[Hỏi] Code VBA lấy Entity name đối tượng

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

Mình có vấn đề như sau:

Thủ tục trong Lisp

(setq ent (car (entsel "\nVao doi tuong: ")))

Kết quả:

<Entity name: 7efa5390>

Nếu dùng VBA để được kết quả như trên dùng cái gì

Mình tìm mãi chưa ra

Cám ơ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

Mình có vấn đề như sau:

Thủ tục trong Lisp

(setq ent (car (entsel "\nVao doi tuong: ")))

Kết quả:

<Entity name: 7efa5390>

Nếu dùng VBA để được kết quả như trên dùng cái gì

Mình tìm mãi chưa ra

Cám ơn!

Bạn sử dụng method getentity

Bạn đọc thêm Ví dụ trong Help nhé

  • 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

Cám ơn bạn.

Mình đã dùng ThisDrawing.Utility.GetEntity Entry, Point

để Pick chọn đối tượng

Nhưng để kết quả trả về <Entity name: 7efa5390> mình chưa làm được

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ám ơn bạn.

Mình đã dùng ThisDrawing.Utility.GetEntity Entry, Point

để Pick chọn đối tượng

Nhưng để kết quả trả về <Entity name: 7efa5390> mình chưa làm được

NgocSon có thể nói mục đích của bạn chuyển về Ename để làm gì không?

Theo hiểu biết của mình thì trong sách Activex and VBA reference không có cách nào để chuyển cả

Entity name là đối tượng của Lisp, không phải của VBA

  • 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

Cám ơn bạn quan tâm

Sau khi đọc bài : http://www.cadviet.c...?showtopic=5374

Về trao đổi dữ liệu giữa Autolisp và VBA

Tôi muốn dùng phương thức như sau:

-Chạy thủ tục bằng VBA để chọn 1 đối tượng(LWPL,PL,...)

Sub DT()
Dim Entry As Object
Dim Point As Variant

ThisDrawing.Utility.GetEntity Entry, Point
If Err Then
Err.Clear
ElseIf TypeOf Entry Is AcadLWPolyline Then
Set Tim = Entry
End If
End sub

 

-Lisp sẽ tự nhận đối tượng này để thao tác.

(setq ent (car (entsel "\nVao doi tuong: ")))
thay bang: (setq ent (car Tim))

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ám ơn bạn quan tâm

Sau khi đọc bài : http://www.cadviet.c...?showtopic=5374

Về trao đổi dữ liệu giữa Autolisp và VBA

Tôi muốn dùng phương thức như sau:

-Chạy thủ tục bằng VBA để chọn 1 đối tượng(LWPL,PL,...)

ThisDrawing.Utility.GetEntity Entry, Point

-Lisp sẽượng này để thao tác.

Sau khi dùng method getentity bằng VBA

Bạn dùng Lisp để chuyển, dùng hàm này : Vlax-vla-object->ename

  • 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

Mình đã thử:

(setq ent (car (Vlax-vla-object->dsm))

Với dsm là biến được gán trong VBA

; error: no function definition: VLAX-VLA-OBJECT->DSM

Báo lỗi

Tên hàm nó thế này cơ mà :

Vlax-vla-object->ename

 

(vlax-vla-object->ename obj)

 

Vui lòng đọc help :)

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ám ơn bạn.Mình đã khai báo như sau:

(setq ent (vlax-vla-object->ename dsm))

hàm báo lỗi

; error: bad argument type: VLA-OBJECT nil

Thân!

Dòng đó lỗi đối số, biến dsm không phải là 1 VLA-OBJECT

Bạn sử dụng hàm Type để thấy kiểu biến

(Type dsm)

  • 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

Mình chưa rõ ý lắm. Đã thử nhưng vẫn lỗi trên.Toàn bộ Code như sau

Public VL As Object
Public Tim as AcadLWPolyline
'-------------------------------------------------------------
Sub VBA2Lisp_example()
 Set VL = CreateObject("VL.Application.16")
 PutLispSym "dsm", Tim
End Sub
'-------------------------------------------------------------
Function GetLispSym(symbolName As String) As Variant
 Dim sym As Object
 GetLispSym = vbEmpty
 If VL Is Nothing Then Exit Function
 Set sym = VL.ActiveDocument.Functions.item("read").funcall(symbolName)
 GetLispSym = VL.ActiveDocument.Functions.item("eval").funcall(sym)
End Function
'-------------------------------------------------------------
Sub PutLispSym(symbolName As String, value As AcadLWPolyline) 'value As Variant
 If VL Is Nothing Then Exit Sub
 Dim sym As Object
 Set sym = VL.ActiveDocument.Functions.item("read").funcall(symbolName)
 VL.ActiveDocument.Functions.item("set").funcall sym, value
End Sub
'-------------------------------------------------------------
Sub DT()
Dim Entry As Object
Dim Point As Variant
ThisDrawing.Utility.GetEntity Entry, Poin
If Err Then
Err.Clear
ElseIf TypeOf Entry Is AcadLWPolyline
Then
Set Tim = Entry
End If
End Sub
'----------Code lisp
(defun c:PST()
(vl-load-com)
(setq ent (vlax-vla-object->ename (Type dsm)))
)

Trước khi chạy PST gọi Macro: DT và VBA2Lisp_example

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ột Entity có các đặc điểm nhận dạng:

- ObjectName: ứng với từng kiểu đối tượng,cho dù ở bất kỳ bản vẽ nào.

- ObjectID: duy nhất tại thời điểm mở, thay đổi mỗi khi bản vẽ được mở lên.

- Handle: duy nhất trong 1 bản vẽ, không thay đổi trong suốt thời gian sống của nó.

 

Entity Name ở câu hỏi trên trong VBA chính là Handle của nó.

 

Từ Handle, ta có thể lấy dữ liệu từ nó: ThisDrawing.HandleToObject(Handle)

  • 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

Một Entity có các đặc điểm nhận dạng:

- ObjectName: ứng với từng kiểu đối tượng,cho dù ở bất kỳ bản vẽ nào.

- ObjectID: duy nhất tại thời điểm mở, thay đổi mỗi khi bản vẽ được mở lên.

- Handle: duy nhất trong 1 bản vẽ, không thay đổi trong suốt thời gian sống của nó.

 

Entity Name ở câu hỏi trên trong VBA chính là Handle của nó.

 

Từ Handle, ta có thể lấy dữ liệu từ nó: ThisDrawing.HandleToObject(Handle)

Bác có thể cụ thể hơn cho Object là LWPL. Vì em lấy Handle của nó thì nó báo không có?

Em đang rất cầ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

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  

×