Chuyển đến nội dung
Diễn đàn CADViet
ngbmanh

[Yêu cầu] Lisp insert field file name bỏ đi một số ký tự

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

Mình cũng đang làm theo cách này, nhưng chỉ biết lấy "y nguyên" thôi, còn xử lý nó (như cắt bớt vài ký tự) thì mình chịu thua!!

P/S: Cái này không phải là VBA hả bạn? Mình thấy nó nằm trong mục "ActiveX and VBA Reference" của help, vậy chắc nó là ActiveX nhỉ?? :) Cái này mình cũng chịu, chưa nghiên cứu!

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 tự sử dụng Field Layer để phát hiện ra công thức, sau đó tìm hàm GetObjectID64 trên diễn đàn, strcat cái công thức + ObjectID ghi đè lên text, thế là có cái bạn cần, bạn thử làm xem sao :) Mình đoán mất mấy phút thôi ^^

Lấy được rồi nhưng không biết làm sao cắt bớt đi vài ký tự bạ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

Bạn tự sử dụng Field Layer để phát hiện ra công thức, sau đó tìm hàm GetObjectID64 trên diễn đàn, strcat cái công thức + ObjectID ghi đè lên text, thế là có cái bạn cần, bạn thử làm xem sao :) Mình đoán mất mấy phút thôi ^^

Tìm mãi mà chẳng thấy hàm "GetObjectID64" ở đâu trên diễn đàn bạ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

Get và Put thì như vầy, còn Cut bằng Diesel thì cũng có thể làm được, nhưng đưa từ Diesel vào Field thì mình cũng chưa hiểu lắm.

Get và Put:

(setq txt (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-objectid (vlax-ename->vla-object ent))) ">%).Layer>%"))

(vla-put-textstring (vlax-ename->vla-object ent_text) txt)))))

  • 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

Get và Put thì như vầy, còn Cut bằng Diesel thì cũng có thể làm được, nhưng đưa từ Diesel vào Field thì mình cũng chưa hiểu lắm.

Get và Put:

(setq txt (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-objectid (vlax-ename->vla-object ent))) ">%).Layer>%"))

(vla-put-textstring (vlax-ename->vla-object ent_text) txt)))))

Vì field chấp nhận diesel mà bá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

Mình làm rồi nhưng sao text tạo ra không link với tên layer, nghĩa là khi đổi tên layer xong, regen thì nó không đổi theo!

Nhờ bác xem giúp mình với!

(defun c:fla()

(if (setq ent (entsel "\nChon doi tuong de xac dinh layer: "))

(progn

(setq txt (strcat "%<\\AcObjProp Object(%<\\_ObjId " (itoa (vla-get-objectid (vlax-ename->vla-object (car ent)))) ">%).Layer>%")

txt (strcat "%<$(substr, " txt ", 5) >%"))

(vla-addmtext (vla-get-block (vla-get-activelayout(vla-get-activedocument (vlax-get-acad-object))))

(vlax-3d-point (getpoint "\nDiem chen Field"))

1

txt)

)

)

(princ)

)

p/s: Mình không thể đặt trong cặp dấu CODE được, nó không hiển thị như mình mong muố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
Tìm mãi mà chẳng thấy hàm "GetObjectID64" ở đâu trên diễn đàn bạn ạ!!

Có phải cái này: http://www.cadviet.com/forum/index.php?showtopic=28405

Thì nó đây:

(defun GetObjectID (obj)
 (if (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
(vlax-invoke-method *util 'GetObjectIdString obj :vlax-false )
(vla-get-Objectid obj)))

  • 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 làm rồi nhưng sao text tạo ra không link với tên layer, nghĩa là khi đổi tên layer xong, regen thì nó không đổi theo!

Nhờ bác xem giúp mình với!

 

p/s: Mình không thể đặt trong cặp dấu CODE được, nó không hiển thị như mình mong muốn!

Ồ, nghĩ ra mới thấy cũng không phải đơn giản bạ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

Theo dõi y/c của Lovelisp một hồi + Ngâm cứu Diesel một hồi nữa, cuối cùng nhận thấy:

1). Với yêu cầu này thì không thể dùng diesel được. Lý do: diesel không có hàm để lấy tên layer. Còn nếu lấy tên layer bằng lisp rồi nhét vào diesel thì tên ấy sẽ bất động, chứ không thể update theo sự thay đổi tên layer được => từ bỏ ý định dùng diesel với y/c này.

2). Không biết có thể dùng thuần lisp để cắt bớt 1 số ký tự của field layer hay không? Nhưng nếu được thì cũng chả dễ dàng gì => đang ngâm cứu xem sao.

@Lovelisp: thank bạn, vì nhờ bạn mà có dịp ngụp lặn trong diesel, nên hiểu được tí xíu về nó.

@Ketxu: cái này chém trúng... gió rồi. :lol:

  • 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

Ketxu thi nghĩ : Một là dùng reactor

Hai là Redefine lại lệnh Regen + Xdata

..... (và nhiều giải pháp khác)

 

Tất nhiên k khoái bằng field đượ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

................

@Ketxu: cái này chém trúng... gió rồi. :lol:

Bám "gió ..." mấy ngày không tìm được giải pháp khả thi.

Trở về mặt đất thô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

có cao thủ nào giúp mình cai lip với.

 

y/c mình muốn insert field tên của 1 bản vẽ khác vào bản vẽ hiện tại có được không ạ.

 

Thanks các cao thủ trước nha :D

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


×