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

这篇具有很好参考价值的文章主要介绍了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();
        }
    }
}

}文章来源地址https://www.toymoban.com/news/detail-465587.html

到了这里,关于c# CAD二次开发 模拟CAD移动图形, 通过圆现在注记,改变图形颜色的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cad二次开发关于多段线

    NumberOfVertices 是一个表示多段线(Polyline)对象中顶点数量的属性。顶点表示多段线上的角点或拐点,决定了多段线的形状。 在AutoCAD等CAD软件中,多段线是由一系列直线段组成的图形对象。它可以包含任意数量的顶点,并且可以是开放的或闭合的。 NumberOfVertices 属性用于获取

    2024年02月14日
    浏览(37)
  • 【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗

    找到配置文件目录,遍历下面的每个配置文件; 找到 Variables 下的 TRUSTEDPATHS 项目;在后面添加新的目录即可,多个目录使用分号分隔;

    2024年02月07日
    浏览(45)
  • 2.ObjectArx .NET 二次开发入门(CAD 2016)

    愿你出走半生,归来仍是少年!  目录 1. 环境准备 1.1 ObjectArx .NET 1.2 VS安装  1.2.1 CAD与Visiul Studio版本对照  1.2.1 Visiul Studio2022关于.NET 4.5的处理 2.Hellow World 2.1新建项目 2.2加载依赖 2.3 编写第一个命令 2.4 生成、加载并测试         开发这事情,本着有新的肯定用新的思想,

    2024年02月11日
    浏览(34)
  • python-cad二次开发入门教程

    用python做cad二次开发已经快两年的时间了,今天看到群里一个哥们到处问怎么python怎么进行cad二次开发,不禁回想起当初自己找教程找的焦头烂额,却始终不得办法的辛酸。现在网上的教程逐渐多了起来,但是我看很多都没有直接讲一个问题,那就是“ 我到底怎么去二次开发

    2024年02月06日
    浏览(41)
  • QGIS二次开发:集成二维CAD控件MxDraw

    本文记录在QGIS中集成MxDraw控件的方法。 参见笔者博文“FreeCAD二次开发:集成二维CAD控件MxDraw”所述的安装方法。 参见笔者博文\\\"Windows 10下编译安装QGIS\\\"所述的编译安装方法。 按照QGIS的管理,Qt ui文件可放到src/ui目录及其子目录下。因此,可将MxDrawView.ui拷贝到src/ui/gd目录下,

    2024年02月15日
    浏览(37)
  • CAD二次开发,安装程序中写注册表

    我们知道,dll加载到cad中后使用 就可以拿到当前cad的注册表,那么如果想在安装程序时写,此时并没有cad的环境,要怎么办呢? cad在安装后,会在注册表的 计算机HKEY_LOCAL_MACHINESOFTWAREAutodeskHardcopy 目录下存放所有已安装的cad的注册表位置 如图,由于我只安装了一个,所以

    2023年04月11日
    浏览(45)
  • 【CAD二次开发】重新加载acad.pgp快捷菜单文件

    为了加快绘图速度,好多人会进行CAD快捷命令的修改,那怎么在不需要重启CAD的情况下自动更新? CAD修改acad.pgp,快捷命令后,自动更新。 方法一 命令行输入reinit,命令。 在弹出的窗口中,选择‘PGP文件’,那么修改后的快捷命令将更新。 方法二 c#代码的方式

    2024年02月09日
    浏览(44)
  • 【ArcGIS Pro二次开发】(17):打开GDB、SHP、CAD等各种数据

    1、打开表格【Table】 2、打开要素类【FeatureClass】 3、以表格的形式打开一个要素类 这里虽然是以表格的形式打开,但是实际上它仍然是一个要素类,可以自由转换格式。 4、打开要素数据集【FeatureDataset】 需要注意的是,打开shp文件,可以带【.shp】的后缀,也可以不加。 如

    2023年04月21日
    浏览(67)
  • c# 通过现在文件夹,获取下面所有的照片,并对其进行统一尺寸裁剪

    c# 通过现在文件夹,获取下面所有的照片,并对其进行统一尺寸裁剪 using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Syst

    2023年04月26日
    浏览(52)
  • Unity 通过鼠标控制模拟人物移动和旋转视角

    要通过鼠标控制并模拟人物移动和转换视角,将会使用射线检测、鼠标点击和鼠标水平移动,配合物体旋转和移动方法共同实现。 首先搭建个由一个Plane地板和若干cube组成的简单场景: 其次创建一个Capsule作为移动物体,并把摄像头拉到该物体中。 创建以下脚本:  把脚本拉

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包