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

Lisp tạo các point 3d từ file bình đồ

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

Trong file bình đồ có nhiều đối tượng, trong đó có các text cao độ (tọa độ của text là 2d), tôi đang cần 1 tiện ích chọn các text cao độ, tiện ích sẽ tạo ra các đối tượng point 3d (có tọa độ x và y là tọa độ của insertpoint của text và tọa độ z là giá trị của text cao độ).

Xin cảm ơn các 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
Trong file bình đồ có nhiều đối tượng, trong đó có các text cao độ (tọa độ của text là 2d), tôi đang cần 1 tiện ích chọn các text cao độ, tiện ích sẽ tạo ra các đối tượng point 3d (có tọa độ x và y là tọa độ của insertpoint của text và tọa độ z là giá trị của text cao độ).

Xin cảm ơn các bác.

- Lệnh MP (make points)

- Các đối tượng là TEXT (chương trình bỏ qua, không xét MTEXT)

- Các chữ, ví dụ "abxy" xem như có giá trị 0

- Bạn có yêu cầu gì thêm thì nêu rõ

 

;;;------------------------------------------------------------------------
(defun emk1p(e / d x y z)
(setq
d (entget e)
x (car (cdr (assoc 10 d)))
y (cadr (cdr (assoc 10 d)))
z (atof (cdr (assoc 1 d)))
)
(entmake (list (cons 0 "POINT") (cons 10 (list x y z))))
)
;;;=======================================
(defun C:MP( / ss e)
(setq ss (ssget '((0 . "TEXT"))))
(while (setq e (ssname ss 0))
(emk1p e)
(ssdel e ss)
)
(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ác ssg viết code nhanh quá. Nếu có thể, bác làm cho chương trình như thế này, tạo 1 menu, trên menu có 1 listbox mà item là các layer trong bản vẽ, chương trình sẽ duyệt qua tất cả các text trong bản vẽ có layer được chọn (không xét text chữ, không phải số, vd "aabb"). Thanks.

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ác ssg viết code nhanh quá. Nếu có thể, bác làm cho chương trình như thế này, tạo 1 menu, trên menu có 1 listbox mà item là các layer trong bản vẽ, chương trình sẽ duyệt qua tất cả các text trong bản vẽ có layer được chọn (không xét text chữ, không phải số, vd "aabb"). Thanks.

 

 

http://www.cadviet.com/upfiles/435.rar

 

Cái này tôi viết lâu lắm rồi nên cũng không biết mã nguồn ở đâu nữa, lệnh chạy là CV

Tôi sẽ đưa mã nguồn lên sau

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 1 menu, trên menu có 1 listbox mà item là các layer trong bản vẽ, chương trình sẽ duyệt qua tất cả các text trong bản vẽ có layer được chọn (không xét text chữ, không phải số, vd "aabb"). Thanks.

Unzip, đọc readme và theo hướng dẫn:

 

http://www.cadviet.com/upfiles/MK3DP.zip

 

Duyệt qua tất cả các text thì chẳng có vấn đề gì, chỉ cần sửa 1 dòng code. Nhưng theo mình thấy như vậy không hay lắm. Bạn chủ động chọn sẽ dễ kiểm soát hơn.

 

@vndes: Bạn nhầm với cái khác hay sao ấy, chương trình không chấp nhận các đối tượng Text!

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

Thấy bác ssq nhiệt tình quá, tôi nhờ bác giúp thêm 1 vấn đề, thêm 2 option trong menu : chọn text theo layer hay người dùng tự chọn; và option tạo point 3d hay là chuyển các text đó thành text 3d.

Xin cảm ơn 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
... thêm 2 option trong menu : chọn text theo layer hay người dùng tự chọn; và option tạo point 3d hay là chuyển các text đó thành text 3d.

Bạn xác nhận lại các yêu cầu về options như sau có đúng không?

1) Chọn text bằng 1 trong 2 cách

- Theo layer bằng popup_list như hiện tại

- Người dùng chọn tùy ý, các đối tượng text có thể ở nhiều layer khác nhau

2) Chương trình thực hiện 1 trong 2 thao tác:

- Tạo point 3d như hiện tại

- Nâng đối tượng text lên độ cao z = giá trị của text, x và y giữ nguyê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
Đúng vậy bác ssq

Tất cả đã đúng như ý bạn:

 

http://www.cadviet.com/upfiles/MK3DPoint.zip

 

Có điều này bạn nên rút kinh nghiệm: phân tích thật kỹ vấn đề mình muốn và đưa ra yêu cầu chuẩn xác, đầy đủ ngay từ đầu. Lập chương trình lần 1 không ngại, nhưng sửa đi sửa lại hoài ngán lắm!

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

Xin cảm ơn bác ssq , tôi chỉ dự định hỏi xin bác nào đã có tiện ích nào tương tự như vậy thôi, chứ không có ý định nhờ viết mới, thấy bác ssq nhiệt tình quá nên mới yêu cầu ... Thanks.

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
Trong file bình đồ có nhiều đối tượng, trong đó có các text cao độ (tọa độ của text là 2d), tôi đang cần 1 tiện ích chọn các text cao độ, tiện ích sẽ tạo ra các đối tượng point 3d (có tọa độ x và y là tọa độ của insertpoint của text và tọa độ z là giá trị của text cao độ).

Xin cảm ơn các bác.

 

Tôi có viết chương trình này, hy vọng là giúp cho công việc của bạn:

Chương trình này tôi viết đã lâu rồi nên chỉ hỗ trợ cho ACAD 2004 và 2005 thôi.

Sắp tới sẽ có version mới hơn, hỗ trợ hầu hết các phiên bản AutoCAD

 

Chương trình AutoCAD Utilities

part 1: http://www.cadviet.com/upfiles/ACAD_Utilitiespart1.rar

part 2: http://www.cadviet.com/upfiles/ACAD_Utilitiespart2_1.rar

Cài đặt chương trình với mã: anhcos-270773-723472

 

*Để nâng cao độ của 2DText với Z=nội dung

Trong phần Thay đổi dữ liệu

Chọn bộ lọc là Text or MText or All Text tùy bạn

Trong mục Z bạn ghi: =T

Các mục khác giũ nguyên

Nhất nút thay đổi, chọn các 2DText, Enter.

Các 2DText sẽ được nâng cao độ lên bằng chính nội dung của nó.

 

Bạn cũng có thể chuyển nội dung thành dạng X, Y ,Z bằng cách ghi vào trong mục T: = "X=" & X & "/p" & "Y=" & Y & "/p" & "Z=" & Z

/p là dùng để xuống hàng trong MText.

 

*Để chuyển các 2D Text thành 3D point bạn làm theo 2 bước

 

Bước 1:

Trong phần lấy dữ liệu, chọn lọc: All Text

Sau đó chọn các 2DText, dữ liệu sẽ xuất qua bảng tính Excel

Trong Excel bạn hãy xóa cột chứa Z, lúc này cột chứa nội dung sẽ là toạ độ Z của điểm

Quét khối toàn bộ các dữ liệu X,Y,Z của các điểm và trở về chương trình

 

Bước 2:

Trong phần tạo thực thể: chọn là Point

Và ấn nút Tạo, các điểm 3D point sẽ được tạo ra, bạn chỉ cần xóa đi các 2DText là dc

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
Thanks bác anhcos , cái lisp của bác hơi nặng (~4mb), chắc là gồm nhiều tiện ích khác ?

Cái này viết bằng VB6.0, hơi cũ, nên rất lớn, sau này viết bằng VB.NET thì nhỏ gọn hơn nhiều.

Mình học Lisp cách đây khoảng 10năm rồi, nhưng khoảng 3 năm sau đó thì viết bằng VB, vì nó thích hợp với các chương trình lớn và tính toán phức tạp hơ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ất cả đã đúng như ý bạn:

 

http://www.cadviet.com/upfiles/MK3DPoint.zip

 

Có điều này bạn nên rút kinh nghiệm: phân tích thật kỹ vấn đề mình muốn và đưa ra yêu cầu chuẩn xác, đầy đủ ngay từ đầu. Lập chương trình lần 1 không ngại, nhưng sửa đi sửa lại hoài ngán lắm!

anh ơi giúp em vấn đề này với , e có đăng bài nhờ mọi người giúp nhưng chưa thấy ai hồi đáp a ạ

vấn đề của em là

 

cái lệnh quick select  khi mình dùng lệnh thì sẽ phải chọn các thông số mình cần như :

Object type là đối tượng gì , properties và cả value nữa , 

ví dụ như Object type là text , properties là Layer , Value là layer "0"  

bây giờ e muốn tất cả các thao tác đó chỉ trong một nút lệnh "chon" ,

 anh viết lisp giúp em với ạ

em cảm ơn anh nhiều lắm

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  

×