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

Tạo 1 ứng dụng AutoCAD .NET với MS Visual C#

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

Vào lúc 2/5/2019 tại 10:05, gia_bach đã nói:

Thiếu  file AcCoreMgd.dll, "Add reference" thêm là được.

chào anh, đây là lisp chia đường thành n điểm để lấy về tọa độ điểm và góc tạo bởi đường pháp tuyến tại mỗi điểm với trục 0x. xuất ra file text với cú pháp mỗi dòng là ( G01 X_ Y_ A_)

anh có thể convert từ lisp  sang c# được ko ạ

phat.LSP

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
25 phút trước, phat1998 đã nói:

chào anh, đây là lisp chia đường thành n điểm để lấy về tọa độ điểm và góc tạo bởi đường pháp tuyến tại mỗi điểm với trục 0x. xuất ra file text với cú pháp mỗi dòng là ( G01 X_ Y_ A_)

anh có thể convert từ lisp  sang c# được ko ạ

phat.LSP

Ở bên topic Lisp, bác Huy đã làm tốt công việc này, cớ gì bạn phải convert qua C#?

 

có vẻ như cái bạn cần là C++ (ARX), để lập trình cho máy CNC.

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
7 phút trước, gia_bach đã nói:

Ở bên topic Lisp, bác Huy đã làm tốt công việc này, cớ gì bạn phải convert qua C#?

 

có vẻ như cái bạn cần là C++ (ARX), để lập trình cho máy CNC.

đúng là em đã được các  anh giúp để giải bài toán bằng lisp

nhưng kiểu thầy em nói lisp sẽ không linh hoạt. muốn em viết bằng c++ tạo file ARX

em làm đồ án tay máy phun sơn mũ bảo hiểm. bài toán trên là bài toán gia công ( 1 phần của đồ án).

có lẽ lí do là lisp chỉ ra được file text còn c++ có thể ra file .nc . file là file gcode để đe đi gia công

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
5 phút trước, phat1998 đã nói:

đúng là em đã được các  anh giúp để giải bài toán bằng lisp

nhưng kiểu thầy em nói lisp sẽ không linh hoạt. muốn em viết bằng c++ tạo file ARX

em làm đồ án tay máy phun sơn mũ bảo hiểm. bài toán trên là bài toán gia công ( 1 phần của đồ án).

có lẽ lí do là lisp chỉ ra được file text còn c++ có thể ra file .nc . file là file gcode để đe đi gia công

Nếu bạn đã đi học thầy thì mình nghĩ có khó khăn gì bạn nên hỏi trực tiếp thầy bạn để có thể tự tay giải quyết công việc hơn là nhờ người khác hoàn thành hộ

  • Like 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
5 phút trước, Doan Nguyen Van đã nói:

Nếu bạn đã đi học thầy thì mình nghĩ có khó khăn gì bạn nên hỏi trực tiếp thầy bạn để có thể tự tay giải quyết công việc hơn là nhờ người khác hoàn thành hộ

vang a!

 

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
18 phút trước, phat1998 đã nói:

đúng là em đã được các  anh giúp để giải bài toán bằng lisp

nhưng kiểu thầy em nói lisp sẽ không linh hoạt. muốn em viết bằng c++ tạo file ARX

..........

C# và C++ khác nhau 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
Vừa xong, gia_bach đã nói:

C# và C++ khác nhau nhé.

vâng em biết. mấy nay em đang tìm hiểu c# , visual studio objectarx . nhưng kiểu em ko biết mình có đang học cái để xử lí cái bài toán kia không

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
12 phút trước, phat1998 đã nói:

vâng em biết. mấy nay em đang tìm hiểu c# , visual studio objectarx . nhưng kiểu em ko biết mình có đang học cái để xử lí cái bài toán kia không

Bác phat98 thật phiền, hồi trc có hỏi vụ c++ thì bác nói chỉ cần ra file txt có toạ độ góc là ok, cánh tay robot sẽ đọc file này rồi thi hành. Giờ thì thầy bắt viết c++ nên xin đổi. Nói thật chứ ở CV này kiếm người biết c++ đỏ con mắt không ra, chắc bác phải đi forum chuyên c++ nhờ thôi. Mà bác học ngành gì mà ông thầy chơi khó quá vậ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

thật sự hỏi các anh em cũng ngại lắm vì biết làm phiền các anh. thầy bảo tốt nhất là viết bằng c++, còn lisp là phương án dự phòng . còn robot không đọc được file text đâu anh ạ. robot chỉ đọc được file .nc

lisp cho ra file text thì sẽ thêm 1 bước nữa là lấy dữ liệu file text cho sang file .nc còn c++ nó sẽ ra được file .nc ( đại loại là như vậy)

còn chuyên ngành thì em học cơ điện tử anh ạ, trước giờ học nhiều về cơ khí vẽ vời tính toán các kiểu phải đến 80% có biết gì về C++ đâu anh, 

còn thầy thì thấy có lisp rồi lại muốn có C++ kiểu càng mở rộng càng tốt ấy ạ

  • Vote tăng 1
  • Vote giảm 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
22 phút trước, phat1998 đã nói:

thật sự hỏi các anh em cũng ngại lắm vì biết làm phiền các anh. thầy bảo tốt nhất là viết bằng c++, còn lisp là phương án dự phòng . còn robot không đọc được file text đâu anh ạ. robot chỉ đọc được file .nc

lisp cho ra file text thì sẽ thêm 1 bước nữa là lấy dữ liệu file text cho sang file .nc còn c++ nó sẽ ra được file .nc ( đại loại là như vậy)

còn chuyên ngành thì em học cơ điện tử anh ạ, trước giờ học nhiều về cơ khí vẽ vời tính toán các kiểu phải đến 80% có biết gì về C++ đâu anh, 

còn thầy thì thấy có lisp rồi lại muốn có C++ kiểu càng mở rộng càng tốt ấy ạ

Muốn có arx thì bắt buộc phải biết c++ thôi, chứ c# không ăn thua. Mà c++ ngay đến dân chuyên ngành CNTT còn lè lưỡi chứ huống gì dân tay ngang như bạn, chỉ có cách bạn nhờ dân chuyên viết dùm 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
1 phút trước, alisp đã nói:

Muốn có arx thì bắt buộc phải biết c++ thôi, chứ c# không ăn thua. Mà c++ ngay đến dân chuyên ngành CNTT còn lè lưỡi chứ huống gì dân tay ngang như bạn, chỉ có cách bạn nhờ dân chuyên viết dùm thôi.

có lẽ em dừng lại ở hiểu lisp thôi anh ạ =))

 

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 cả nhà, em mới tìm hiểu về C# với autocad. Làm thử cái Addin cho Autocad 2020, nhưng khi debug sử dụng netload để load file .dll thì gõ lệnh lại không ra. Nhờ các anh chỉ điểm giúp em với ạ. (Visual studio 2017, đã add các file thư viện AcCoreMgd.dll, AcDbMgd.dll, AcMgd.dll và sử dụng template flugin của autocad 2020)

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;


using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;


[assembly: ExtensionApplication(typeof(Autocad_2020_plugin_001.MyPlugin))]

namespace Autocad_2020_plugin_001
{
    public class MyPlugin
    {
        [CommandMethod("cmdhello")]
        public void cmdFirstCommand()
        {
            var doc = AcAp.DocumentManager.MdiActiveDocument;
            //var db = doc.Database;
            var ed = doc.Editor;

            ed.WriteMessage("\n Hello World");
        }        
    }
}

 

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
1 giờ} trướ}c, Nguyên Khải đã nói:

Chào cả nhà, em mới tìm hiểu về C# với autocad. Làm thử cái Addin cho Autocad 2020, nhưng khi debug sử dụng netload để load file .dll thì gõ lệnh lại không ra. Nhờ các anh chỉ điểm giúp em với ạ. (Visual studio 2017, đã add các file thư viện AcCoreMgd.dll, AcDbMgd.dll, AcMgd.dll và sử dụng template flugin của autocad 2020)


using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;


using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;


[assembly: ExtensionApplication(typeof(Autocad_2020_plugin_001.MyPlugin))]

namespace Autocad_2020_plugin_001
{
    public class MyPlugin
    {
        [CommandMethod("cmdhello")]
        public void cmdFirstCommand()
        {
            var doc = AcAp.DocumentManager.MdiActiveDocument;
            //var db = doc.Database;
            var ed = doc.Editor;

            ed.WriteMessage("\n Hello World");
        }        
    }
}

 

Code không thấy sai chỗ nào!

bạn có thể upload project ?

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 thời bỏ qua 2 dòng sau:

// [assembly: CommandClass(typeof(Autocad_2020_plugin_001.MyCommands))]

// [assembly: ExtensionApplication(typeof(Autocad_2020_plugin_001.MyPlugin))]

là chạy được.

  • Like 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
50 phút trước, gia_bach đã nói:

Tạm thời bỏ qua 2 dòng sau:

// [assembly: CommandClass(typeof(Autocad_2020_plugin_001.MyCommands))]

// [assembly: ExtensionApplication(typeof(Autocad_2020_plugin_001.MyPlugin))]

là chạy được.

Cám ơn anh gia_bach, em đã làm được rồi. Em không hiểu sao họ lại để chúng trong file template flugin trong khi chúng lại làm chương trình không chạy đượ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
Vào lúc 7/4/2021 tại 10:53, cuongtk2 đã nói:

 [assembly: CommandClass(typeof(namespase1.MyClass))] 

Khai báo MyClass thuộc namespace1 là class chứa lệnh

 

Anh cuongtk2 có thể sửa lại project của em đã post bên trên mà không bỏ tạm 2 dòng lệnh [assembly:...] để chương trình vẫn chạy và nhận lệ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

[assembly: ExtensionApplication(typeof(Autocad_2020_plugin_001.MyPlugin))]

namespace Autocad_2020_plugin_001

{ public class MyPlugin

{

[CommandMethod("cmdhello")]

public void cmdFirstCommand()

{  var doc = AcAp.DocumentManager.MdiActiveDocument;

//var db = doc.Database;

var ed = doc.Editor; 

ed.WriteMessage("\n Hello World");

}

}

}

Bạn có thấy attribute [CommandMethod("cmdhello")] được khái báo ở class MyPlugin. Mà class này lại không được khai báo là class chứa lệnh, mà được khai báo là  ExtensionApplication (tiện ích mở rộng).

Nếu như bạn tạo mới Class1  , muốn build được ra lệnh trong đó, bạn phải khai báo  [assembly: CommandClass(typeof(Autocad_2020_plugin_001.Class1))] 

  • Like 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
6 giờ trước, cuongtk2 đã nói:

[assembly: ExtensionApplication(typeof(Autocad_2020_plugin_001.MyPlugin))]

namespace Autocad_2020_plugin_001

{ public class MyPlugin

{

[CommandMethod("cmdhello")]

public void cmdFirstCommand()

{  var doc = AcAp.DocumentManager.MdiActiveDocument;

//var db = doc.Database;

var ed = doc.Editor; 

ed.WriteMessage("\n Hello World");

}

}

}

Bạn có thấy attribute [CommandMethod("cmdhello")] được khái báo ở class MyPlugin. Mà class này lại không được khai báo là class chứa lệnh, mà được khai báo là  ExtensionApplication (tiện ích mở rộng).

Nếu như bạn tạo mới Class1  , muốn build được ra lệnh trong đó, bạn phải khai báo  [assembly: CommandClass(typeof(Autocad_2020_plugin_001.Class1))] 

Hi, cám ơn anh cuongtk2 rất nhiều, em đã 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

Cho em hỏi: Có cách nào tạo ra hình chữ nhật thông qua 2 điểm click trong bản vẽ autocad (2 điểm này là trung điểm của 2 cạnh đối diện của hình chữ nhật) không ạ?  (C#)

1386046003_nh.png.447956a59096996297ea77c540632903.png

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
Vào lúc 22/4/2021 tại 16:58, Nguyên Khải đã nói:

Cho em hỏi: Có cách nào tạo ra hình chữ nhật thông qua 2 điểm click trong bản vẽ autocad (2 điểm này là trung điểm của 2 cạnh đối diện của hình chữ nhật) không ạ?  (C#)

Cám ơn các anh, vấn đề này em đã tìm ra cách giải quyết (hơi dài dòng ^_^!) như sau:

- Tìm tọa độ các đỉnh của hình chữ nhật dựa vào 2 điểm được click là trung điểm 2 cạnh đối diện của 1 hình chữ nhật

- Sử dụng Polyline(4) để tạo hình chữ nhật

double x1 = pt1.X;
double y1 = pt1.Y;
double x2 = pt2.X;
double y2 = pt2.Y;
double anp = Math.Atan((y2 - y1) / (x2 - x1));
var pline = new Polyline(4);
pline.AddVertexAt(0, new Point2d(x1 + 5.0 * Math.Sin(anp), y1 - 5.0 * Math.Cos(anp)), 0.0, 0.0, 0.0);
pline.AddVertexAt(1, new Point2d(x2 + 5.0 * Math.Sin(anp), y2 - 5.0 * Math.Cos(anp)), 0.0, 0.0, 0.0);
pline.AddVertexAt(2, new Point2d(x2 - 5.0 * Math.Sin(anp), y2 + 5.0 * Math.Cos(anp)), 0.0, 0.0, 0.0);
pline.AddVertexAt(3, new Point2d(x1 - 5.0 * Math.Sin(anp), y1 + 5.0 * Math.Cos(anp)), 0.0, 0.0, 0.0);                
                
pline.Closed = true;

 

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

Hỏi về giải thuật chắc sẽ có nhiều người người trả lời hơn!

 

 

Về cơ bản v/đề của bạn là tìm giao của 2 line: sử dụng hàm Intersectwith

                 Line l1 = tr.GetObject(per.ObjectId, OpenMode.ForRead) as Line;
                 per = ed.GetEntity("Line2");
                 Line l2 = tr.GetObject(per.ObjectId, OpenMode.ForRead) as Line;
                 Point3dCollection ptcol = new Point3dCollection();
                 l1.IntersectWith(l2, Intersect.ExtendBoth,ptcol, IntPtr.Zero, IntPtr.Zero);

 

sau đó thay đổi điểm đầu mút gần giao điểm :

line.Startpoint = giao điểm
or  line.Endpoint = giao diểm

 

  • Like 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

Cho em hỏi: Có những giải pháp nào cho việc tạo ra 1 đối tượng phức tạp hơn những đối tượng hình học cơ bản (như block chẳng hạn) bằng C# không ạ? Ưu nhược của các giải pháp này như nào ạ?

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

×