我正在使用C#编写一个AutoCAD插件,需要在带阴影的对象(例如,圆的中心)的中间显示HATCH的属性. 我在代码中有两个问题:

  1. 怎么才能进入圆心呢?

  2. 我怎样才能得到舱口的财产?

我在AUTOCAD中的这条线上遇到错误.

acText.TextString = hatch.Area.ToString(); // Area of hatch

下面是主要摘自Stackflow的代码.

 [CommandMethod("DisplyArea")]
        public static void SelectCirclesToHatch()
        {
            var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            var db = doc.Database;
            var ed = doc.Editor;
            var filter = new SelectionFilter(new[] { new TypedValue(0, "CIRCLE") });
            var selection = ed.GetSelection(filter);
            int vr = 1;
            if (selection.Status != PromptStatus.OK)
                return;
            using (var tr = db.TransactionManager.StartTransaction())
            {
                var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
                foreach (var id in selection.Value.GetObjectIds())
                {
                    var ids = new ObjectIdCollection(new[] { id });
                    using (var hatch = new Hatch())
                    {
                        curSpace.AppendEntity(hatch);
                        tr.AddNewlyCreatedDBObject(hatch, true);
                        hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
                        hatch.Associative = true;
                        hatch.AppendLoop(HatchLoopTypes.Outermost, ids);
                        hatch.EvaluateHatch(true);
                        DBText acText = new DBText();

//它需要是CIRCLE.CENTER,但我如何访问它?

                        acText.Position = new Point3d(2,2,0);     
         
                        acText.TextString = hatch.Area.ToString(); // Area of hatch
                        acText.Height = 0.5;
                        curSpace.AppendEntity(acText);
                        tr.AddNewlyCreatedDBObject(acText, true);
                    }
                }
                tr.Commit();
            }
        }

有什么解决办法吗?

推荐答案

  1. How can I access center of circle?
    Answer:
    Circle oCircle = tr.GetObject(id, OpenMode.ForRead) as Circle; var _centerPosition = oCircle.Center;

  2. How can I get property of hatch?
    Answer:
    you need to change
    from hatch.AppendLoop(HatchLoopTypes.Outermost, ids);
    to hatch.AppendLoop(HatchLoopTypes.External, ids);

我更改了你的代码,它对我有效

public static void SelectCirclesToHatch()
    {
        var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
        var db = doc.Database;
        var ed = doc.Editor;
        var filter = new SelectionFilter(new[] { new TypedValue(0, "CIRCLE") });
        var selection = ed.GetSelection(filter);
        int vr = 1;
        if (selection.Status != PromptStatus.OK) { return; }

        using (var tr = db.TransactionManager.StartTransaction())
        {
            var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
            foreach (var id in selection.Value.GetObjectIds())
            {
                try
                {
                    var ids = new ObjectIdCollection(new[] { id });
                    using (var hatch = new Hatch())
                    {
                        curSpace.AppendEntity(hatch);
                        tr.AddNewlyCreatedDBObject(hatch, true);
                        hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
                        hatch.Associative = true;
                        hatch.AppendLoop(HatchLoopTypes.External, ids);
                        hatch.EvaluateHatch(true);
                        hatch.HatchStyle = HatchStyle.Normal;

                        Circle oCircle = tr.GetObject(id, OpenMode.ForRead) as Circle;
                        var _centerPosition = oCircle.Center;

                        DBText acText = new DBText();
                        acText.Position = _centerPosition;

                        acText.TextString = hatch.Area.ToString(); // Area of hatch
                        acText.Height = 0.5;
                        curSpace.AppendEntity(acText);
                        tr.AddNewlyCreatedDBObject(acText, true);
                    }
                }
                catch { }
            }
            tr.Commit();
        }
    }

Csharp相关问答推荐

C#使用属性和值将JSON转换为XML

为什么Blazor值在更改后没有立即呈现?

如何在Visual Studio代码中更改大括号模式{},用于C#语言

当通过Google的Gmail Api发送邮件时,签名会产生dkim = neutral(正文散列未验证)'

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

如何在没有额外副本的情况下将存储在IntPtr下的原始图像数据写入WinUI3中的Image控件?

为什么我的表单在绑定到对象时提交空值?

Amazon SP-API确认发货不设置&Quot;递送服务

在swagger示例中添加默认数组列表

如何在NET 8最小API中自动记录TypedResults.Stream响应

LINQ to Entities中的加权平均值

在C#.NET项目中启动时,如何等待提升的PowerShell进程退出?

两个DateTimeOffset之间的差异返回意外的负值

C#静态抽象属性不能被子接口覆盖

如何对特定异常使用Polly重试机制?

如何在绑定到数据库的datagridview中向上或向下移动行

SharpZipLib在文件名前加上目录名,生成tar.gz

单位中快照的倾斜方向

我想我必须手动使用res1(字符串形式的PowerShell哈希表)

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?