乐筑天下

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

[编程交流] 插入动态块的代码

[复制链接]

2

主题

2

帖子

0

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 22:52:47 | 显示全部楼层 |阅读模式
你好
我只需要简单的代码来做一件事,在我当前使用的图形中插入一个动态块,该块存储在我计算机上的一个单独文件中(如C:/base/b-22)。例如,我有一个windows窗体,其中有一个列表框,其中包含存储在我的c驱动器上的许多动态块的名称。我想选择一个具有名称的块,在单击按钮或其他按钮时,将从单独的文件中获取该块,并将其插入我当前使用的图形中,并且需要能够选择我希望该块的位置。有人能帮忙吗,我正在使用autocad 2010和visual studio 2008-使用新的autocad。net语言。
回复

使用道具 举报

RMS

9

主题

38

帖子

29

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-6 23:38:25 | 显示全部楼层
我找到了这个链接,http://forums.autodesk.com/t5/NET/Code-to-insert-a-dynamic-block-into-the-current-drawing/m-p/2804900也许它可以帮助??
回复

使用道具 举报

0

主题

101

帖子

103

银币

限制会员

铜币
-2
发表于 2022-7-7 00:06:10 | 显示全部楼层
只要从另一个文件克隆一个块并插入一个引用,无论它是否是动态的,都是一样的。
 
这里是一个链接到一个区块经理我张贴让人们开始一个http://www.theswamp.org/index.php?topic=35280.0
 
下面是该链接中的代码,用于将其引入并选择一个点以插入它。
它在VB中用于
 
  1. [color=blue]private[/color] [color=blue]void[/color] InsertBlock([color=blue]string[/color] blkName, [color=blue]string[/color] fileName)
  2.        {
  3.            [color=#2b91af]Database[/color] extDb = [color=blue]new[/color] [color=#2b91af]Database[/color]([color=blue]false[/color], [color=blue]true[/color]) [color=blue]as[/color] [color=#2b91af]Database[/color];
  4.            extDb.ReadDwgFile(fileName, [color=#2b91af]FileOpenMode[/color].OpenForReadAndAllShare, [color=blue]true[/color], [color=#a31515]""[/color]);
  5.            [color=#2b91af]Document[/color] doc = [color=#2b91af]AcadApp[/color].DocumentManager.MdiActiveDocument;
  6.            [color=#2b91af]Editor[/color] ed = doc.Editor;
  7.            [color=#2b91af]Database[/color] db = doc.Database;
  8.            [color=blue]using[/color] ([color=#2b91af]DocumentLock[/color] docloc = doc.LockDocument())
  9.            [color=blue]using[/color] ([color=#2b91af]Transaction[/color] trx = db.TransactionManager.StartTransaction())
  10.            [color=blue]using[/color] ([color=#2b91af]Transaction[/color] extTrx = extDb.TransactionManager.StartTransaction())
  11.            {               
  12.                [color=#2b91af]BlockTable[/color] bt = db.BlockTableId.GetObject([color=#2b91af]OpenMode[/color].ForRead) [color=blue]as[/color] [color=#2b91af]BlockTable[/color];
  13.                [color=#2b91af]BlockTableRecord[/color] currBtr = db.CurrentSpaceId.GetObject([color=#2b91af]OpenMode[/color].ForRead) [color=blue]as[/color] [color=#2b91af]BlockTableRecord[/color];
  14.                [color=blue]if[/color] (!(bt.Has(blkName)))
  15.                {
  16.                    [color=#2b91af]BlockTable[/color] extBt = extDb.BlockTableId.GetObject([color=#2b91af]OpenMode[/color].ForRead) [color=blue]as[/color] [color=#2b91af]BlockTable[/color];                    
  17.                    [color=#2b91af]IdMapping[/color] map = [color=blue]new[/color] [color=#2b91af]IdMapping[/color]();
  18.                    [color=#2b91af]ObjectIdCollection[/color] objIdColl = [color=blue]new[/color] [color=#2b91af]ObjectIdCollection[/color]();
  19.                    [color=blue]try[/color]
  20.                    {
  21.                        objIdColl.Add(extBt[blkName]);
  22.                    }
  23.                    [color=blue]catch[/color]
  24.                    {
  25.                        trx.Commit();
  26.                        [color=blue]return[/color];
  27.                    }                    
  28.                    db.WblockCloneObjects(objIdColl, bt.ObjectId, map, [color=#2b91af]DuplicateRecordCloning[/color].Replace, [color=blue]false[/color]);
  29.                }               
  30.                      [color=#2b91af]ObjectId[/color] btrId = bt[blkName].GetObject([color=#2b91af]OpenMode[/color].ForRead).ObjectId;
  31.                [color=#2b91af]PromptPointOptions[/color] ppo = [color=blue]new[/color] [color=#2b91af]PromptPointOptions[/color]([color=#a31515]"/nSelect Insertion Point: "[/color]);
  32.                [color=#2b91af]PromptPointResult[/color] ppr = ed.GetPoint(ppo);
  33.                [color=blue]if[/color] (ppr.Status == [color=#2b91af]PromptStatus[/color].OK)
  34.                {
  35.                    [color=#2b91af]Point3d[/color] insertPnt = ppr.Value;
  36.                    currBtr.UpgradeOpen();
  37.                    [color=#2b91af]BlockReference[/color] bref = [color=blue]new[/color] [color=#2b91af]BlockReference[/color](insertPnt,btrId);
  38.                    currBtr.AppendEntity(bref);
  39.                    trx.AddNewlyCreatedDBObject(bref,[color=blue]true[/color]);
  40.                }
  41.                trx.Commit();
  42.            }
  43.        }
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-5-25 06:49 , Processed in 3.346172 second(s), 58 queries .

© 2020-2025 乐筑天下

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