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

anhcos

Nhà quảng cáo
  • Số lượng nội dung

    305
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    21

Bài đăng được đăng bởi anhcos


  1. 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


  2. Tôi thấy trong forum này chưa có bàn nhiều về lập trình VB.NET cho AutoCAD.

     

    So với AutoLISP thì VB.NET dễ lập trình hơn và có thể kiểm soát các lỗi dễ dàng hơn. Nhưng tốc độ thì không bằng AutoLISP được vì nó chạy trực tiếp trên nền ACAD.

     

    Các bước khi lập trình với VB.NET(VB 6.0 hoặc Excel.Macro sẽ khác một ít)

     

    Bước 1: Tạo liên kết với AutoCAD (có thể liên kết với bất kỳ version nào của AutoCAD đang cài đặt trên máy)

     

    Dim AcadApp as object

    Try

    'Xem acad đã chạy chưa

    AcadApp = GetObject(, "AutoCAD.Application")

    Catch

    'Nếu chưa có bản ACAD nào đang chạy thì khởi động ACAD lên

    Acad = CreateObject("AutoCAD.Application")

    Acad.Visible = True 'Hiện acad lên, nếu không nó sẽ chạy ở background

    End Try

     

    Sau khi liên kết chtrình ACAD vào biến AcadApp, từ biến này ta có thể can thiệp vào rất nhiều dữ liệu chứa trong ACAD

    VD:

    dim acDocs as object = AcadApp.Documents

    dim acLayers as object = AcadApp.Layers

    dim acTextStyles as object = AcadApp.TextStyles

    ...

     

    Để tham khảo các thuộc tính, các hàm và các sự kiện của mỗi đối tượng ACAD, xem phần giúp đỡ của ACAD.

    Ấn F1, chọn ActiveX Automation & VBA, click tiếp mục ActiveX and VBA Reference.

     

    ------------------------------

     

    Bước 2: Can thiệp vào các dữ liệu của AutoCAD

     

    Ứng với mỗi đối tượng, sẽ có nhiều thuộc tính và hàm tương ưng với nó.

    VD: đối tượng Layers bao gồm tất cả các layer nằm trong 1 bản vẽ, nó bao gồm

    Các hàm

    Add 'dùng để thêm một layer mới

    GenerateUsageData

    GetExtensionDictionary

    Item 'lấy dữ liệu của một layer

    SetXData

    và các thuộc tính

    Application 'bản AutoCAD đang chạy

    Count 'số lượng layer trong bản vẽ

    Document 'bản vẽ đang xét

    Handle

    HasExtensionDictionary

    ObjectID

    ObjectName

    OwnerID

     

    Như vậy để tắt hết các layer ta sẽ viết code như sau

    dim i as integer

    dim acLayers as object = acadApp.ActiveDocuments.Layers

    dim acEachLayer as object

    for i= 0 to acLayers.Count - 1

    acLayer = acLayers.Item(i)

    acEachLayer.LayerOn = FALSE

    next i

     

    Và sẽ còn rất nhiều thứ nữa cần các bạn thử nghiệm và khám phá

    • Vote tăng 3

  3. Để tạo đường đồng mức bạn thử xem cách này:

     

    Với 1 tập điểm đã cho, bạn hãy chưa quan tâm đến cao độ z.

     

    Đi qua 2 bước:

     

    * Bước 1: Xây dựng lưới tam giác:

     

    - Tìm điểm nằm ngoài cùng nhất (có x, và Y nhỏ nhất or ngược lại)

    - Từ điểm đó tìm 2 điểm gần nhất để hình thành 1 tam giác đầu tiên

    - Lúc này đường bao sẽ phát triển thành 3 đường (là 3 cạnh của tam giác)

    - Duyệt qua từng đoạn của đường bao, tìm điểm gần nhất với đoạn này để tạo thêm 1 tam giác mới

    Đường bao mới sẽ được hình thành từ đường bao cũ kết hợp với đường bao mới và loại bỏ đường bao đang xét

    Tuy nhiên sẽ có một số ngoại lệ mà bạn phải tự tìm hiểu lấy.

    Quá trình này sẽ rất làm rất lâu nếu bạn không có thuật toán tìm kiếm hiệu quả.

     

    * Bước 2: tạo đường đồng mức.

    Từ tập điểm ta có Zmin và Zmax

    Cho Z chạy từ Zmin --> Zmax để cắt từng đường của lưới tam giác đã tạo ở trên.

     

    Nói chung là bạn sẽ mất rất nhiều thời gian để hoàn tất công việc này đấy.

×