田草博客

互联网田草博客


网友交流QQ群:11740834 需注明申请加入原因

微信 公众号:ByCAD

邮箱:tiancao1001x126.com
ByCAD,微信公众号
首页 | 普通 | 电脑 | AutoCAD | VB/VB.NET | FLash | 结构 | 建筑 | 电影 | BIM | 规范 | 软件 | ID
-随机-|-分布-
-博客论坛-|-﨣﨤﨧﨨-
-网站导航-|-规范下载-
-BelovedFLash欣赏-

用户登陆
用户:
密码:
 

站点日历
73 2024 - 11 48
     12
3456789
10111213141516
17181920212223
24252627282930


站点统计

最新评论



err_cleartext_not_permitted 两个数之间的随机数
未知 两种方法在.Net中调用AutoCAD中的命令   [ 日期:2021-10-27 ]   [ 来自:本站原创 ]  HTML
https://www.cnblogs.com/swtool/p/SWTOOL_00012.html

两种方法在.Net中调用AutoCAD中的命令

using System;
using System.Linq.Expressions;
using System.Reflection;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;

namespace RevisionCloud
{
    public class UsingRunCommand
    {
        [CommandMethod("CLOUD1")]
        public void Cloud()
        {
            Document doc = AcAp.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            PromptPointResult ppr = ed.GetPoint("\nSpecify the first corner: ");
            if (ppr.Status != PromptStatus.OK) return;
            Point3d pt1 = ppr.Value;

            ppr = ed.GetCorner("\nSpecify the opposite corner: ", pt1);
            if (ppr.Status != PromptStatus.OK) return;
            Point3d pt2 = ppr.Value;

            ObjectId id = DrawRectangle(db, pt1, pt2);
            ed.Command("_revcloud", "_arc", 2.0, 6.0, "_object", id, "_no");
        }

        private static ObjectId DrawRectangle(Database db, Point3d pt1, Point3d pt2)
        {
            ObjectId id;
            using (Transaction tr = db.TransactionManager.StartTransaction())
            using (Polyline pline = new Polyline(4))
            {
                pline.AddVertexAt(0, new Point2d(pt1.X, pt1.Y), 0.0, 0.0, 0.0);
                pline.AddVertexAt(1, new Point2d(pt2.X, pt1.Y), 0.0, 0.0, 0.0);
                pline.AddVertexAt(2, new Point2d(pt2.X, pt2.Y), 0.0, 0.0, 0.0);
                pline.AddVertexAt(3, new Point2d(pt1.X, pt2.Y), 0.0, 0.0, 0.0);
                pline.Closed = true;
                BlockTableRecord space =
                    (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                id = space.AppendEntity(pline);
                tr.AddNewlyCreatedDBObject(pline, true);
                tr.Commit();
            }
            return id;
        }
    }

    public static class Extension
    {
        public static PromptStatus Command(this Editor ed, params object[] args)
        {
            if (ed == null)
                throw new ArgumentNullException("ed");
            return runCommand(ed, args);
        }

        static Func<Editor, object[], PromptStatus> runCommand = GenerateRunCommand();

        static Func<Editor, object[], PromptStatus> GenerateRunCommand()
        {
            MethodInfo method = typeof(Editor).GetMethod(
                "RunCommand", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
            ParameterExpression instance = Expression.Parameter(typeof(Editor), "ed");
            ParameterExpression args = Expression.Parameter(typeof(object[]), "args");
            return Expression.Lambda<Func<Editor, object[], PromptStatus>>(
               Expression.Call(instance, method, args), instance, args)
                  .Compile();
        }
    }
}

using System;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;
 
namespace RevisionCloud
{
    public class UsingAcedCommand
    {
        [CommandMethod("CLOUD2")]
        public static void Cloud2()
        {
            Document doc = AcAp.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
 
            PromptPointResult ppr = ed.GetPoint("\nSpecify the first corner: ");
            if (ppr.Status != PromptStatus.OK) return;
            Point3d pt1 = ppr.Value;
 
            ppr = ed.GetCorner("\nSpecify the opposite corner: ", pt1);
            if (ppr.Status != PromptStatus.OK) return;
            Point3d pt2 = ppr.Value;
 
            ObjectId id = DrawRectangle(db, pt1, pt2);
            DrawRevCloud(id, 1.0);
        }
 
        [System.Security.SuppressUnmanagedCodeSecurity]
        [DllImport("accore.dll", EntryPoint = "acedCmd", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
        extern static private int acedCmd(IntPtr resbuf);
 
        private static ObjectId DrawRectangle(Database db, Point3d pt1, Point3d pt2)
        {
            ObjectId id;
            using (Transaction tr = db.TransactionManager.StartTransaction())
            using (Polyline pline = new Polyline(4))
            {
                pline.AddVertexAt(0, new Point2d(pt1.X, pt1.Y), 0.0, 0.0, 0.0);
                pline.AddVertexAt(1, new Point2d(pt2.X, pt1.Y), 0.0, 0.0, 0.0);
                pline.AddVertexAt(2, new Point2d(pt2.X, pt2.Y), 0.0, 0.0, 0.0);
                pline.AddVertexAt(3, new Point2d(pt1.X, pt2.Y), 0.0, 0.0, 0.0);
                pline.Closed = true;
                BlockTableRecord space =
                    (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                id = space.AppendEntity(pline);
                tr.AddNewlyCreatedDBObject(pline, true);
                tr.Commit();
            }
            return id;
        }
 
        private static void DrawRevCloud(ObjectId id, double scale)
        {
            ResultBuffer args = new ResultBuffer(
                new TypedValue((int)LispDataType.Text, "_revcloud"),
                new TypedValue((int)LispDataType.Text, "_arc"),
                new TypedValue((int)LispDataType.Double, 2.0 / scale),
                new TypedValue((int)LispDataType.Double, 6.0 / scale),
                new TypedValue((int)LispDataType.Text, "_object"),
                new TypedValue((int)LispDataType.ObjectId, id),
                new TypedValue((int)LispDataType.Text, "_no"));
            acedCmd(args.UnmanagedObject);
        }
    }
}



暂时没有评论
发表评论 - 不要忘了输入验证码哦!
作者: 用户:  密码:   注册? 验证:  防止恶意留言请输入问题答案:3*4=?  
评论:

禁止表情
禁止UBB
禁止图片
识别链接
识别关键字

字体样式 文字大小 文字颜色
插入粗体文本 插入斜体文本 插入下划线
左对齐 居中对齐 右对齐
插入超级链接 插入邮件地址 插入图像
插入 Flash 插入代码 插入引用
插入列表 插入音频文件 插入视频文件
插入缩进符合
点击下载按钮 下标 上标
水平线 简介分割标记
表  情
 
Tiancao Blog All Rights Reserved 田草博客 版权所有
Copyright ©