c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色

c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Application = Autodesk.AutoCAD.ApplicationServices.Application;
using System.Windows.Forms;

namespace _7_属性查找
{
public class Class1
{
///
/// 通过文本和扩展属性进行搜索
///
[CommandMethod(“yesee”)]
public void selectdemo()
{
Form1selecte form = new Form1selecte();
form.Show();
}
///
/// 更新图形颜色
///
///
private void changecolor(SelectionSet sset)
{
ObjectId[] ids = sset.GetObjectIds();
Database db = HostApplicationServices.WorkingDatabase;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
for (int i = 0; i < ids.Length; i++)
{
Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);

                ent.ColorIndex = 1;
                DBText textEntity = ent as DBText;
                string sTxt = textEntity.TextString;
            }
            trans.Commit();
        }
    }
    /// <summary>
    /// 通过选择圆来选择
    /// </summary>
    [CommandMethod("yese1")]
    public void selectdemo1()
    {
        Database db = HostApplicationServices.WorkingDatabase;
        Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
        //通过过滤器选择圆
        TypedValue[] values = new TypedValue[]
        {
            new TypedValue((int)DxfCode.Start,"circle")//选择图形为圆
        };
        SelectionFilter filter = new SelectionFilter(values);
        PromptSelectionResult psr = ed.GetSelection(filter);
        List<ObjectId> ids = new List<ObjectId>();
        if (psr.Status == PromptStatus.OK)
        {
            //遍历每个圆,将每个
            SelectionSet sset = psr.Value;
            List<Point3d> points = this.getpoint(sset);
            for (int i = 0; i < points.Count; i++)
            {
                PromptSelectionResult ss1 = ed.SelectCrossingWindow(points.ElementAt(i), points.ElementAt(i));
                ids.AddRange(ss1.Value.GetObjectIds());
            }
        }
        this.changecolor1(ids);
    }
    /// <summary>
    /// 通过顶点选择集
    /// </summary>
    /// <param name="sset"></param>
    /// <returns></returns>
    private List<Point3d> getpoint(SelectionSet sset)
    {
        List<Point3d> points = new List<Point3d>();
        ObjectId[] ids = sset.GetObjectIds();
        Database db = HostApplicationServices.WorkingDatabase;
        using (Transaction trans = db.TransactionManager.StartTransaction())
        {
            for (int i = 0; i < ids.Length; i++)
            {
                Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);
                Point3d creter = ((Circle)ent).Center;
                double radius = ((Circle)ent).Radius;
                points.Add(new Point3d(creter.X + radius, creter.Y, creter.Z));
            }
            trans.Commit();
        }
        return points;
    }
    /// <summary>
    /// 更新图形颜色
    /// </summary>
    /// <param name="sset"></param>
    private void changecolor1(List<ObjectId> ids)
    {
        Database db = HostApplicationServices.WorkingDatabase;
        using (Transaction trans = db.TransactionManager.StartTransaction())
        {
            for (int i = 0; i < ids.Count; i++)
            {
                Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);
                ent.ColorIndex = 3;
            }
            trans.Commit();
        }
    }
    /// <summary>
    /// 动态交互,移动图形
    /// </summary>
    [CommandMethod("yemove", CommandFlags.UsePickSet)]
    public void yemove()
    {
        Database db = HostApplicationServices.WorkingDatabase;
        Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
        //选择在命令前的图形
        PromptSelectionResult psr = ed.SelectImplied();
        //如果执行命令前没有选择对象,则执行选择
        if (psr.Status != PromptStatus.OK)
        {
            psr = ed.GetSelection();
        }
        if (psr.Status != PromptStatus.OK) return;
        //获取用户指定的基础点
        Point3d pointbase = new Point3d(0, 0, 0);
        PromptPointOptions ppo = new PromptPointOptions("\n 指定基点或[位移(D)]<位移>:");
        ppo.AllowNone = true;
        PromptPointResult ppr = ed.GetPoint(ppo);
        //判断用户指定基础点的输入
        if (ppr.Status == PromptStatus.Cancel) return;
        if (ppr.Status == PromptStatus.OK) pointbase = ppr.Value;

        //获取选择图形的图形对象
        List<Entity> entlist = new List<Entity>();
        //把选中的ID赋给ids
        ObjectId[] ids = psr.Value.GetObjectIds();
        entlist = this.getentity(ids);
        //改变源对象的颜色
        this.lowcolor(entlist, 211);
        //声明一个移动类
        MoveJig movejig = new MoveJig(entlist, pointbase);
        PromptResult pr = ed.Drag(movejig);
    }
    /// <summary>
    /// 将选择的对象转成Entity
    /// </summary>
    /// <param name="ids">图形列表</param>
    /// <returns></returns>
    private List<Entity> getentity(ObjectId[] ids)
    {
        Database db = HostApplicationServices.WorkingDatabase;
        List<Entity> enlist = new List<Entity>();
        using (Transaction trans = db.TransactionManager.StartTransaction())
        {
            for (int i = 0; i < ids.Length; i++)
            {
                Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);
                enlist.Add(ent);
            }
        }
        return enlist;
    }
    /// <summary>
    /// 改变图形对象的颜色
    /// </summary>
    /// <param name="enlist">图形对象</param>
    /// <param name="colorindex">颜色值</param>
    private void lowcolor(List<Entity> enlist, int colorindex)
    {
        Database db = HostApplicationServices.WorkingDatabase;
        using (Transaction trans = db.TransactionManager.StartTransaction())
        {
            for (int i = 0; i < enlist.Count; i++)
            {
                Entity ent = (Entity)enlist[i].ObjectId.GetObject(OpenMode.ForWrite);
                ent.ColorIndex = colorindex;
            }
            trans.Commit();
        }
    }
}

}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CAD注记CAD宗地属性是指将CAD注记中的信息转换为CAD宗地属性的过程。 在CAD注记中,我们可以添加各种与地块相关的信息,如地块面积、地块形状、土地用途等。这些注记通常以文字或图形的形式存在,但在CAD系统中无法直接进行空间分析和查询。因此,将CAD注记转换为CAD宗地属性可以方便地利用GIS技术进行空间分析和查询。 转换的过程可以通过以下步骤实现: 1. 首先,将CAD注记中的文字信息提取出来,包括地块面积、地块形状等。在CAD软件中,可以使用文本工具选择注记文字并导出为文本文件。 2. 接下来,需要根据宗地属性的要求,将注记信息与相应的属性字段进行匹配。这些属性字段可以包括地块面积、地块形状、土地用途等。 3. 然后,将注记信息与属性字段一一对应地录入到CAD宗地属性表中。在CAD软件中,可以使用数据管理工具来创建和编辑属性表。 4. 最后,将CAD宗地属性表与CAD图形进行关联。在CAD软件中,可以通过绑定表格和CAD图形对象来建立宗地属性与地块图形之间的关系。 通过以上步骤,就可以完成CAD注记CAD宗地属性的过程。这样,在进行空间分析和查询时,可以方便地根据宗地属性进行筛选和统计,提高工作效率和精度。同时,还可以将CAD宗地属性与其他GIS数据进行集成,实现更复杂的地理信息分析和应用。 ### 回答2: CAD注记CAD宗地属性是指将CAD图纸中的注记信息转换为CAD宗地属性数据的过程。 首先,首先我们需要对CAD图纸中的注记进行分析和识别。这可以通过自动化软件工具来实现,该工具可以扫描CAD图纸中的注释文本,并将其转换为计算机可读的数据格式。 其次,经过分析和识别后,我们需要将注记数据与对应的宗地属性进行匹配。宗地属性通常包括地块的所有者、面积、用途等信息。通过注记的位置和宗地属性之间的空间关系,我们可以将它们关联起来,以便进行后续的转换。 然后,通过数据转换工具,我们可以将注记数据转换为CAD宗地属性数据。在转换的过程中,我们需要确保数据的准确性和一致性。这包括正确地匹配注记和宗地属性,并将它们正确地映射到CAD图纸中的相应位置。 最后,完成数据转换后,我们可以将CAD宗地属性数据应用于相关的地理信息系统(GIS)或土地管理系统中。这将使宗地属性信息更易于管理和使用,并为土地规划和管理提供更好的支持。 总而言之,CAD注记CAD宗地属性是一个将CAD图纸中的注记信息转换为计算机可读的宗地属性数据的过程。通过正确的分析、识别、匹配和转换,我们可以得到准确的宗地属性数据,并应用于相关的土地管理系统中。这将提高土地规划和管理的效率和准确度。 ### 回答3: CAD注记CAD宗地属性是指将CAD注记中的相关信息转换为CAD宗地的属性信息。CAD注记通常是在CAD图纸中用来标注某个对象或场景的文字或图形元素,而CAD宗地属性则是描述宗地特征的一些属性值。 在进行CAD注记CAD宗地属性的过程中,首先需要分析注记的内容。注记可能包括宗地的编号、面积、形状、边界线等信息。通过针对注记的特定规则和格式进行解析,可以提取出宗地的相关属性。 接下来,我们将提取的属性值与宗地图纸中的相应图层进行匹配。图层是CAD图纸中的一种组织方式,用于将不同对象分组或分门别类。通过匹配图层,可以确定所提取的属性应该应用在哪些对象上。 然后,将提取的对应属性值应用于宗地图纸中的相应对象上。这可以通过CAD软件提供的一系列编辑工具和命令来实现。例如,可以使用属性编辑器来修改宗地图纸中的特定属性值,或者使用批量修改命令来对多个对象进行属性值的批量更改。 最后,保存修改后的宗地图纸,并进行验证和检查。确保所做的转换过程没有引入错误或遗漏任何关键信息。可以通过查看宗地图纸中的属性值是否正确来进行验证,或者与原始的CAD注记进行比对。 总的来说,CAD注记CAD宗地属性是一个将CAD注记中的信息转换为CAD宗地属性的过程,其中包括注记内容的解析、属性值的提取、图层的匹配和属性的应用。这样可以更方便地管理和查询宗地的特征信息,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DK业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值