首页 > 其他分享 >CAD 复制多个对象

CAD 复制多个对象

时间:2023-06-04 22:25:00浏览次数:23  
标签:多个 new 复制 acCircl using acTrans Circle acBlkTblRec CAD

下面示例使用ObjectIdCollection对象来跟踪应该复制的对象。一旦对象ids被添加进集合,集合就会进行迭代,新的对象会被Clone函数进行创建,然后添加进模型空间。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;

namespace SingleCopy
{
    public class DYCopy
    {
        [CommandMethod("SingleCopy")]
        public static void SCopy()
        { 
            //获取当前文件和数据库
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;
            //开始事务管理
            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                //以读的方式打开块表
                BlockTable acBlkTbl;
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
                //打开块表记录模型空间,用于写
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                //创建圆心为(2,3),半径为4.25的圆
                Circle acCirc = new Circle();
                acCirc.SetDatabaseDefaults();
                acCirc.Center = new Point3d(2, 3, 0);
                acCirc.Radius = 4.25;
                //添加新对象到块表记录和事务
                acBlkTblRec.AppendEntity(acCirc);
                acTrans.AddNewlyCreatedDBObject(acCirc, true);
                //创建圆的副本,并改变它的半径
                Circle acCircClone = acCirc.Clone() as Circle;
                acCircClone.Radius = 1;
                //添加圆的副本
                acBlkTblRec.AppendEntity(acCircClone);
                acTrans.AddNewlyCreatedDBObject(acCircClone, true);
                //将新对象保存到数据库中
                acTrans.Commit();
            }
        }

        [CommandMethod("MultipleCopy")]
        public static void MultipleCopy()
        { 
            //获取当前文件和数据库
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;
            //开始事务管理
            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                //打开块表用于读
                BlockTable acBlkTbl;
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;
                //打开块表记录的模型空间,用于写
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                //创建圆,以(0,0,0)为圆心,以5为半径
                Circle acCircl = new Circle();
                acCircl.SetDatabaseDefaults();
                acCircl.Center = new Point3d(0, 0, 0);
                acCircl.Radius = 5;
                //添加新对象到块表记录和事务中
                acBlkTblRec.AppendEntity(acCircl);
                acTrans.AddNewlyCreatedDBObject(acCircl, true);
                //创建圆,以(0,0,0)为圆心,以7为半径
                Circle acCirc2 = new Circle();
                acCirc2.SetDatabaseDefaults();
                acCirc2.Center = new Point3d(0, 0, 0);
                acCirc2.Radius = 7;
                //添加新对象到块表记录和事务中
                acBlkTblRec.AppendEntity(acCirc2);
                acTrans.AddNewlyCreatedDBObject(acCirc2, true);
                //添加所有要克隆的对象
                DBObjectCollection acDbobjColl = new DBObjectCollection();
                acDbobjColl.Add(acCircl);
                acDbobjColl.Add(acCirc2);
                foreach (Entity acEnt in acDbobjColl)
                {
                    Entity acEntClone;
                    acEntClone = acEnt.Clone() as Entity;
                    acEntClone.ColorIndex = 1;
                    //创建一个矩阵,移动每个副本实体15个单位;
                    acEntClone.TransformBy(Matrix3d.Displacement(new Vector3d(15, 0, 0)));
                    //添加副本对象
                    acBlkTblRec.AppendEntity(acEntClone);
                    acTrans.AddNewlyCreatedDBObject(acEntClone, true);
                }
                //将对象保存进数据库
                acTrans.Commit();
            }
        }
    }
}

标签:多个,new,复制,acCircl,using,acTrans,Circle,acBlkTblRec,CAD
From: https://www.cnblogs.com/chenlight/p/17456502.html

相关文章

  • Flask中url_for的使用传参,及多个参数
    flask.url_for(endpoint,**values)参数:endpoint-URL的端点(函数名称)values-URL规则的变量参数_external-如果设置为True,则生成绝对URL。服务器地址可以通过SERVER_NAME配置变量更改,默认为localhost。_scheme-指定所需URL方案的字符串。该_external参数必须设......
  • Redis_主从复制
    一、主从复制介绍主机数据更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,slave以读为主好处:读写分离,性能扩展;容灾快速恢复(一主多从):一台slave从机挂掉,马上切换到另一台slave从机提供服务。主机挂:集群集群:一主多从——关联——一主多从二、主从复制配......
  • Redis主从复制
    主从复制简介主从复制即将master中的数据即时、有效的复制到slave中。。特征:一个master可以拥有多个slave,一个slave只对应一个master职责:master写数据执行写操作时,将出现变化的数据自动同步到slave读数据(可忽略)slave读数据写数据(禁止)......
  • 如何通过CAD图中的坐标来确定是哪个坐标系
    国内常见的坐标系坐标系分为以下两种:地理坐标系(GeographicCoordinateSystem,GCS)投影坐标系(ProjectedCoordinateSystem,PCS)那什么是地理坐标系统呢?地理坐标系:为球面坐标。参考平面地是椭球面,坐标单位:经纬度。以地球参考为例,坐标系就相当于整个地球,而地理坐标系就是椭......
  • CAD 复制对象
    为了复制对象,要在对象上运用已提供的Clone函数。这个函数会创建一个与原始对象的重复的新对象。一旦创建了副本对象,就可以将其添加或附加到数据库之前对其进行修改。如果不变换对象或更改它们的位置,则新对象将位于与原对象相同的位置。如果你需要复制大量的对象,可以添加每个对象......
  • MySQL主从复制
    MySQL主从复制一、复制概述将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行,从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。二、复制原理My......
  • 如何在前端应用中合并多个 Excel 工作簿
    前言|问题背景SpreadJS是纯前端的电子表格控件,可以轻松加载Excel工作簿中的数据并将它们呈现在前端浏览器应用的网页上。SpreadJS实例来加载所有工作簿,然后将它们合并到一个电子表格中。此文将向您展示如何合并多个Excel工作簿并将它们作为单个电子表格显示在您的前端浏览器应......
  • MySQL数据库复制技术2
    一:复制的概念。    可能很多人认为,复制很简单就是把之前的数据直接转移到新的数据库当中不就是复制吗。但是在MySQL数据库中:复制指的就是复制一个服务器上(称为主节点服务器或者简称主节点)的所有改变到另一个服务器(称为从节点服务器或简称从节点)。复制通常用来创建主节点的一......
  • Word复制过去源格式也不对问题
    我在做毕业论文的时候,各种材料文档要集成在一个文档。结果复制过去,不是表格断了就是字间距宽了,OpenType选项变灰等字体问题,等等。这其实是word文档的兼容模式,老文档字间距紧凑,而新文档间距拉长。结果可能造成表格断开到第二页。如果要转换成最新的版本,方法是:菜单栏的“文件”(“......
  • OpenCASCADE曲面求交之追踪法
    曲面求交追踪法的优点是在求得首交点后搜索交线其余交点的速度非常快,且适用范围广。追踪法的问题是目前尚无非常有效的方法来求得所有交线环的起始点。曲面求交一般会采用通用性较好的网格法-迭代法-追踪法三者相结合的方法。应用网格法求得交点的初始估计值,再用迭代法求......