乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 75|回复: 1

模拟CAD中,框选实体对象制作块,并插入到模型空间

[复制链接]

4

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
38
发表于 2019-12-14 18:23:00 | 显示全部楼层 |阅读模式
如题所示,想模拟cad中的block命令,类似  里面的 创建 匿名块在cad中已经画好的图元,通过框选实体对象,制成块表然后插入块参照(普通块)
不知道在cad内部是怎么样的一个操作流程,在我选择的实体中,插入到数据库中时,提示已经存在
网上到处也没有找到类似或者是没有找到搜的方式
求大神指点一下,C# 语言 谢谢
回复

使用道具 举报

19

主题

90

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
166
发表于 2019-12-14 22:19:00 | 显示全部楼层

using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.ApplicationServices;
[assembly: CommandClass(typeof(MakeBlock.Commands))]
namespace MakeBlock
{
    ///
    /// Summary description for Commands.
    ///
    public class Commands
    {
        public Commands()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        // Define Command "AsdkCmd1"
        //师兄 QQ361865648,一直都在用VC,好长时间没写C#了
        [CommandMethod("AsdkCmd1")]
        static public void test() // This method can have any name
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;
            PromptSelectionResult ssres = ed.GetSelection();
            if (ssres.Status == PromptStatus.OK)
            {
                Point3d basept = new Point3d(0, 0, 0);
                PromptPointResult ptres = ed.GetPoint("\n指定基点:");
                if (ptres.Status == PromptStatus.OK)
                    basept = ptres.Value;
                if (ptres.Status == PromptStatus.Cancel) return;
                Transaction tr = db.TransactionManager.StartTransaction();
                ObjectIdCollection ids = new ObjectIdCollection(ssres.Value.GetObjectIds());
                BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
                BlockTableRecord mspbtr = tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
                BlockTableRecord btr = new BlockTableRecord();
                btr.Name = "*U";
                btr.Origin = basept;
                ObjectId id = bt.Add(btr);
                tr.AddNewlyCreatedDBObject(btr, true);
                IdMapping idm = new IdMapping();
                db.DeepCloneObjects(ids, id, idm, false);
                BlockReference bref = new BlockReference(basept, id);
                mspbtr.AppendEntity(bref);
                tr.AddNewlyCreatedDBObject(bref, true);
                //此处删除原实体
                foreach (ObjectId Oldid in ids)
                {
                    DBObject old = tr.GetObject(Oldid, OpenMode.ForWrite);
                    old.Erase();
                }
                tr.Commit();
            }
            // Put your command code here
        }
    }
}

i5wwr1tspx3.gif

i5wwr1tspx3.gif
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 02:36 , Processed in 0.353511 second(s), 59 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表