首页 > 其他分享 >【AutoCAD .NET】创建Hatch时报错eInvalidInput

【AutoCAD .NET】创建Hatch时报错eInvalidInput

时间:2024-03-14 14:22:25浏览次数:30  
标签:eInvalidInput AutoCAD plineId pline Hatch hatch var new true

问题出处

https://forums.autodesk.com/t5/net/hatch-to-drawn-polyline-e-message-quot-einvalidinput-quot/m-p/9631373

问题描述

我使用以下语句绘制了一条多段线:
Acad.Application.DocumentManager.MdiActiveDocument.SendStringToExecute("PL ", true, false, true);

按如下方式得到多段线对象:
ObjectId plobj = Autodesk.AutoCAD.Internal.Utils.EntLast();

调用方法:
CommandWrapper.HatchPolyLine(plobj);

在这里,我试图使用以下代码填充到绘制的上面的多段线,但在收到错误消息:
'e.Message = "eInvalidInput"' at 'hatch.AppendLoop(HatchLoopTypes.Default, objectIdColletion);'

下面是我的方法:

        public static void HatchPolyLine(ObjectId plobj)
        {
            try
            {
                if (plobj != null)
                {
                    Polyline pline = null;
                    Document document = Application.DocumentManager.MdiActiveDocument;
                    using (Transaction transaction = document.Database.TransactionManager.StartTransaction())
                    {
                        pline = (Polyline)transaction.GetObject(plobj, OpenMode.ForWrite);
                        using (BlockTable blockTable = CADDBUtil.GetBlockTable(transaction))
                        using (BlockTableRecord modelSpace = CADDBUtil.GetModelSpace(transaction, blockTable))
                        using (Hatch hatch = new Hatch())
                        {
                            modelSpace.UpgradeOpen();

                            ObjectIdCollection objectIdColletion = new ObjectIdCollection();
                            objectIdColletion.Add(pline.Id);

                            hatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
                            modelSpace.AppendEntity(hatch);
                            transaction.AddNewlyCreatedDBObject(hatch, true);
                            hatch.AppendLoop(HatchLoopTypes.Default, objectIdColletion);
                            hatch.EvaluateHatch(true);

                            pline.Color = hatch.Color;
                        }
                        transaction.Commit();
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

回答

您确定多段线是闭合的吗?

试试下面代码:

public static void HatchPolyLine(ObjectId plineId)
{
    try
    {
        if (plineId.IsNull)
            throw new ArgumentNullException("plineId");

        if (plineId.ObjectClass != RXObject.GetClass(typeof(Polyline)))
            throw new Autodesk.AutoCAD.Runtime.Exception(ErrorStatus.IllegalEntityType);

        var ids = new ObjectIdCollection();
        ids.Add(plineId);

        using (var tr = plineId.Database.TransactionManager.StartTransaction())
        {
            var pline = (Polyline)tr.GetObject(plineId, OpenMode.ForRead);
            if (!(pline.Closed || pline.GetPoint2dAt(0).IsEqualTo(pline.GetPoint2dAt(pline.NumberOfVertices - 1))))
                throw new InvalidOperationException("Opened polyline.");

            var owner = (BlockTableRecord)tr.GetObject(pline.OwnerId, OpenMode.ForWrite);
            var hatch = new Hatch();
            hatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
            owner.AppendEntity(hatch);
            tr.AddNewlyCreatedDBObject(hatch, true);
            hatch.Associative = true;
            hatch.AppendLoop(HatchLoopTypes.Default, ids);
            hatch.EvaluateHatch(true);
            tr.Commit();
        }
    }
    catch(System.Exception ex)
    {
        var ed = Application.DocumentManager.MdiActiveDocument.Editor;
        ed.WriteMessage($"{ex.Message}\n{ex.StackTrace}");
    }
}

标签:eInvalidInput,AutoCAD,plineId,pline,Hatch,hatch,var,new,true
From: https://www.cnblogs.com/redcode/p/18072761

相关文章

  • C# AutoCAD 图纸合并以及拆分
    拆分和合并非常常规的需求usingAutodesk.AutoCAD.ApplicationServices;usingAutodesk.AutoCAD.DatabaseServices;usingAutodesk.AutoCAD.EditorInput;usingAutodesk.AutoCAD.Geometry;usingAutodesk.AutoCAD.Runtime;usingMicrosoft.VisualBasic.ApplicationServices......
  • 关于AutoCAD反复弹窗Nonvalid Software Detected的解决办法
    事件起因:客户安装的CAD2020频繁弹窗NonvalidSoftwareDetected,报错内容:YOURACCESSISNOWBLOCKED 解决办法:在文件资源管理器中搜索路径C:\ProgramFiles\Autodesk\AutoCAD2020\Support\NewTabPage\config\ACAD\zh-CN(注意自己安装的版本和位置,我这里是2020版本安......
  • AutoCAD2024画圆或矩形实时预览消失了如何解决?
    最近有小伙伴问这个问题,他在使用AutoCAD绘制图形时,发现画圆或矩形实时预览没有了,如下,画图不容易定位,非常影响画图效率,十分苦恼不知道如何恢复? 正常CAD画圆(或矩形)会显示实时预览,如下:操作步骤:AutoCAD20241、打开AutoCAD2024软件,然后在命令栏输入:DRAGMODE,然后按Enter键......
  • 梳理Langchain-Chatchat知识库API接口
    一.Langchain-Chatchat知识库管理1.Langchain-Chatchat对话和知识库管理界面  Langchain-Chatchatv0.28完整的界面截图,如下所示:2.知识库中源文件和向量库  知识库test中源文件和向量库的位置,如下所示:3.知识库表结构  knowledge_base数据表内容,如下所示:二.......
  • 解决方案 | AutoCAD 版本+版本号+受支持的 .NET SDK版本+.NET Framework版本
    关于Managed.NET兼容性Managed.NET应用程序通常与扩展基于AutoCAD的产品的行为和功能的公司和第三方应用程序关联。在移植到最新版本后,并非所有.NET应用程序都可以正常工作。.NET应用程序的兼容性在各版本之间可能随时更改,以利用最新的.NETFramework和Auto......
  • AUTOCAD快捷键
    快捷命令L直线M移动C圆EL椭圆XL射线轴线RO旋转E删除H填充TR修剪EX延伸PO点S拉伸U返回DDI直径标注DAN角度标注OP系统选项设置A圆弧T多行文字B块定义I块插入W定义块文件CO复制MI镜像O偏移F倒直角或圆角D标注样式DLI线性......
  • AutoCAD Civil 3D 2024:实现精准建模与仿真,优化基础设施项目
    AutoCADCivil3D2024是一款专门为土木工程师和土地设计师打造的高级三维设计软件。它基于AutoCAD平台,并提供了丰富的工具和功能,以支持从规划、设计到施工的整个基础设施项目生命周期。点击获取AutoCADCivil3D2024AutoCADCivil3D2024引入了许多新功能和改进,以提升用......
  • 大模型工具_Langchain-Chatchat
    https://github.com/chatchat-space/Langchain-Chatchat原Langchain-ChatGLM1功能整体功能,想解决什么问题基于Langchain与ChatGLM等LLM模型,搭建一套针对中文场景与开源模型,界面友好、可离线运行的知识库问答解决方案。当前解决了什么问题,哪些问题解决不了目前0.2.8......
  • 解决方案 | VS2022 + AutoCAD2024 + ObjectARX2024环境搭建过程
    一、准备工具1.vs2022自行网络搜索,各种版本均可(比如专业版、社区版),注意使用社区版必须使用最新版,目前是17.8版本,否则最终会无法使用样板。2.cad2024 自行网络搜索3.ObjectARX2024SDK和 ObjectARX2024 Wizard  3.1给出 ObjectARX2024SDK的下载地址:https://damasset......
  • Langchain-Chatchat+Qwen实现本地知识库(二)
    在上一篇文章当中,我们已经通过Langchain-Chatchat+Qwen-14b-int4完成了本地知识库的搭建,现在我们通过vue和api接口来做定制的聊天页面,达成下图类似gpt或者其他大模型的显示效果:1.知识库启动:见上一篇文章2.api接口部署:在/Langchain-Chatchat/configs的serve_config文件中可以......