Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
45 replies to this topic

#41 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 17 September 2016 - 12:24 PM

Bạn nên tách ra thành 2 lisp riêng biệt. Và ghi công dụng của từng Lisp.
Nếu có t/gian tôi sẽ convert sang C#.
  • 0

#42 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 198 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 17 September 2016 - 12:38 PM

Bạn nên tách ra thành 2 lisp riêng biệt. Và ghi công dụng của từng Lisp.
Nếu có t/gian tôi sẽ convert sang C#.

Chào anh.

 

Lisp này chỉ là ví dụ linh tinh. Em có đọc hết các hàm riêng lẻ của C# rồi, vấn đề là chưa biết kết hợp các hàm lẻ với nhau như trong lisp hay ActiveX.

VD:

1. Lisp dùng ssget tạo 1 selectionset của đối tượng TEXT or MTEXT sau đó chỉnh sửa value từng text bằng vòng lặp repeat với những số nhập vào từ dòng command.

2. Lisp chỉnh sửa độ rộng của attribute(tạo select bằng entsel hay là nentsel)  trong 1 block với vòng lặp while.

3. Tạo 1 function như (change_att) và call nó như 1 function của lisp.

4. Print dòng lệnh ở cuối lisp để nhớ được tên lệnh từng lisp riêng vì có quá nhiều lisp.

 

Mong được học hỏi thêm từ anh và mọi người.


  • 0

#43 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 17 September 2016 - 10:47 PM

Chào anh.

 

Lisp này chỉ là ví dụ linh tinh. Em có đọc hết các hàm riêng lẻ của C# rồi, vấn đề là chưa biết kết hợp các hàm lẻ với nhau như trong lisp hay ActiveX.

VD:

1. Lisp dùng ssget tạo 1 selectionset của đối tượng TEXT or MTEXT sau đó chỉnh sửa value từng text bằng vòng lặp repeat với những số nhập vào từ dòng command.

2. Lisp chỉnh sửa độ rộng của attribute(tạo select bằng entsel hay là nentsel)  trong 1 block với vòng lặp while.

3. Tạo 1 function như (change_att) và call nó như 1 function của lisp.

4. Print dòng lệnh ở cuối lisp để nhớ được tên lệnh từng lisp riêng vì có quá nhiều lisp.

 

Mong được học hỏi thêm từ anh và mọi người.

Convert lisp to C# theo yêu cầu.

Bee test thử nhé, (sorry anh chưa có th/gian test):

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

namespace Lisp2Csharp
{
    public class CadCmds
    {
        [CommandMethod("ChangeTextContent")]
        public static void ChangeTextContent()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            TypedValue[] filter = new TypedValue[1] { new TypedValue(0, "*TEXT") };
            PromptSelectionResult psr = ed.GetSelection(new SelectionFilter(filter));
            if (psr.Status != PromptStatus.OK)
            {
                ed.WriteMessage("\nBan da khong chon doi tuong.");
                return;
            }
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                PromptDoubleOptions pdo = new PromptDoubleOptions("\nNhập số: ");
                PromptDoubleResult res = ed.GetDouble(pdo);
                if (res.Status != PromptStatus.OK) return;

                double num = res.Value;
                string numStr = num.ToString("F2");
                foreach (SelectedObject so in psr.Value)
                {
                    Entity ent = (Entity)tr.GetObject(so.ObjectId, OpenMode.ForRead);
                    if (ent is DBText)
                    {
                        DBText txt = ent as DBText;
                        txt.UpgradeOpen();
                        txt.TextString = numStr;
                    }
                    else if (ent is MText)
                    {
                        MText mtxt = ent as MText;
                        mtxt.UpgradeOpen();
                        mtxt.Contents = numStr;
                    }
                }
                tr.Commit();
            }
        }


        [CommandMethod("ChangeAtt")]
        static public void ChangeAtt()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            using (Transaction tr = doc.TransactionManager.StartTransaction())
            {
                PromptNestedEntityOptions pno = new PromptNestedEntityOptions("\nChon att:");
                PromptNestedEntityResult res;
                do
                {
                    res = ed.GetNestedEntity(pno);
                    if (res.Status == PromptStatus.OK)
                    {
                        if (res.ObjectId.ObjectClass.DxfName.ToUpper() == "ATTRIB")
                        {
                            change_w(ed, res.ObjectId);
                        }
                    }

                    db.TransactionManager.QueueForGraphicsFlush();
                }
                while (res.Status == PromptStatus.OK);
                tr.Commit();
            }
        }

        static public void change_w(Editor ed, ObjectId attId)
        {
            using (Transaction tr = attId.Database.TransactionManager.StartTransaction())
            {
                PromptDoubleOptions pdo = new PromptDoubleOptions("\nNhập withfactor: ");
                PromptDoubleResult pdr = ed.GetDouble(pdo);
                if (pdr.Status != PromptStatus.OK) return;
                double withFactor = pdr.Value;

                AttributeReference att = (AttributeReference)tr.GetObject(attId, OpenMode.ForWrite);
                att.WidthFactor = withFactor;
                tr.Commit();
            }
        }
    }

    public class ShowCommands : IExtensionApplication
    {
        void IExtensionApplication.Initialize()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("\nCommand : ChangeTextContent, ChangeAtt \n");
        }

        void IExtensionApplication.Terminate()
        {
        }
    }
}


Bài viết đã được chỉnh sửa nội dung bởi gia_bach: 18 September 2016 - 10:45 AM

  • 0

#44 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 198 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 18 September 2016 - 08:46 AM

 

Convert lisp to C# theo yêu cầu.

Bee test thử nhé, (sorry anh chưa có th/gian test):

 

link download : https://dl.dropboxus...18313/Class1.cs

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

namespace Lisp2Csharp
{
    public class CadCmds
    {
        [CommandMethod("ChangeTextContent")]
        public static void ChangeTextContent()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            TypedValue[] filter = new TypedValue[1] { new TypedValue(0, "*TEXT") };
            PromptSelectionResult psr = ed.GetSelection(new SelectionFilter(filter));
            if (psr.Status != PromptStatus.OK)
            {
                ed.WriteMessage("\nBan da khong chon doi tuong.");
                return;
            }
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                PromptDoubleOptions pdo = new PromptDoubleOptions("\nNhập số: ");
                PromptDoubleResult res = ed.GetDouble(pdo);
                if (res.Status != PromptStatus.OK) return;

                double num = res.Value;
                string numStr = num.ToString("F2");
                foreach (SelectedObject so in psr.Value)
                {
                    Entity ent = (Entity)tr.GetObject(so.ObjectId, OpenMode.ForRead);
                    if (ent is DBText)
                    {
                        DBText txt = ent as DBText;
                        txt.UpgradeOpen();
                        txt.TextString = numStr;
                    }
                    else if (ent is MText)
                    {
                        MText mtxt = ent as MText;
                        mtxt.UpgradeOpen();
                        mtxt.Contents = numStr;
                    }
                }
                tr.Commit();
            }
        }


        [CommandMethod("ChangeAtt")]
        static public void ChangeAtt()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            using (Transaction tr = doc.TransactionManager.StartTransaction())
            {
                PromptNestedEntityOptions pno = new PromptNestedEntityOptions("\nChon att:");
                PromptNestedEntityResult res;
                do
                {
                    res = ed.GetNestedEntity(pno);
                    if (res.Status == PromptStatus.OK)
                    {
                        if (res.ObjectId.ObjectClass.DxfName.ToUpper() == "ATTRIB")
                        {
                            change_w(ed, res.ObjectId);
                        }
                    }

                    db.TransactionManager.QueueForGraphicsFlush();
                }
                while (res.Status == PromptStatus.OK);
                tr.Commit();
            }
        }

        static public void change_w(Editor ed, ObjectId attId)
        {
            using (Transaction tr = attId.Database.TransactionManager.StartTransaction())
            {
                PromptDoubleOptions pdo = new PromptDoubleOptions("\nNhập withfactor: ");
                PromptDoubleResult pdr = ed.GetDouble(pdo);
                if (pdr.Status != PromptStatus.OK) return;
                double withFactor = pdr.Value;

                AttributeDefinition att = (AttributeDefinition)tr.GetObject(attId, OpenMode.ForWrite);
                att.WidthFactor = withFactor;
                tr.Commit();
            }
        }
    }

    public class ShowCommands : IExtensionApplication
    {
        void IExtensionApplication.Initialize()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("\nCommand : ChangeTextContent, ChangeAtt \n");
        }

        void IExtensionApplication.Terminate()
        {
        }
    }
}

Chào anh,

 

Em vừa test thử thì lệnh changeatt lỗi, anh xem fix lại được lỗi này không a.

 

Anh có thể hướng dẫn thêm build 1 file exe không ạ ?

 

Cám ơn anh nhiều.


  • 0

#45 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 18 September 2016 - 10:51 AM

Fix lỗi của lệnh ChangeAtt , download here

 

Anyway, you're Gametv.himo , right?


  • 0

#46 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 198 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 18 September 2016 - 11:28 AM

Fix lỗi của lệnh ChangeAtt , download here

 

Anyway, you're Gametv.himo , right?

Yep. 

ông anh cũng sinh hoạt trên đó ah. ^_^ Ngồi buồn lang thang kiếm tìm thông tin trên vài forum. :D


  • 0