明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2191|回复: 9

请教下VBA如何创建动态块?

[复制链接]
发表于 2020-12-1 23:38:48 | 显示全部楼层 |阅读模式
如题,请教下VBA如何创建动态块?
有可以参考的代码可以分享吗?
非常感谢!
发表于 2022-4-27 18:07:15 | 显示全部楼层
会了吗 老哥
发表于 2022-4-27 22:38:09 | 显示全部楼层
本帖最后由 landsat99 于 2022-4-27 22:40 编辑


官方已明确:动态块可VBA编辑属性、 可参数控制变形;但不可VBA/Vlisp创建。





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2022-4-27 22:50:02 | 显示全部楼层
本帖最后由 landsat99 于 2022-4-27 22:54 编辑

创建动态块得 .net或Objarx

下面这段.net 试试看


  1. using System;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.Runtime;

  5. [assembly: CommandClass(typeof(Sample.AddBlock))]
  6. namespace Sample
  7. {
  8.     class AddBlock
  9.     {
  10.         /// <summary>
  11.         /// 把块定义变为块参照插入
  12.         /// </summary>
  13.         [CommandMethod("AddBlock")]
  14.         public void AddBk()
  15.         {
  16.             Database db = HostApplicationServices.WorkingDatabase;
  17.             ObjectId blkid;

  18.             //创建块定义
  19.             using (Transaction trans = db.TransactionManager.StartTransaction())
  20.             {
  21.                 BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
  22.                 BlockTableRecord blk = new BlockTableRecord();
  23.                 blk.Name = "BLK";
  24.                 Line L = new Line(Point3d.Origin, new Point3d(1000, 1000, 0));
  25.                 Circle C = new Circle(Point3d.Origin, Vector3d.ZAxis, 500);
  26.                 blk.AppendEntity(L);
  27.                 blk.AppendEntity(C);
  28.                 blkid = bt.Add(blk);
  29.                 trans.AddNewlyCreatedDBObject(blk, true);
  30.                 trans.Commit();
  31.             }
  32.             
  33.             //把块参照添加到块表记录
  34.             using (Transaction tr = db.TransactionManager.StartTransaction())
  35.             {
  36.                 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
  37.                 BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
  38.                 BlockReference br = new BlockReference(new Point3d(0,0, 0), blkid);     // 通过块定义创建块参照
  39.                 btr.AppendEntity(br);
  40.                 tr.AddNewlyCreatedDBObject(br, true);   // 通过事务添加块参照到数据库
  41.                 tr.Commit();
  42.             }
  43.         }
  44.     }
  45. }




发表于 2022-4-28 17:48:52 | 显示全部楼层
好的我试试
发表于 2022-5-4 00:13:46 | 显示全部楼层
好像是没有对应的动态块创建命令,我一般都是手动设置动态块的属性和范围后,VBA可调用已存在的对应块定义,插入块参照,设置指定的参数属性。
发表于 2022-9-20 20:04:35 | 显示全部楼层
landsat99 发表于 2022-4-27 22:38
官方已明确:动态块可VBA编辑属性、 可参数控制变形;但不可VBA/Vlisp创建。

您好,想请教一下如何切换动态块,使用vba,想最后附属到
cad自带的自定义按键
发表于 2022-10-1 18:12:26 | 显示全部楼层
VBA,怎么调整动态块的参数?
发表于 2023-10-13 15:27:13 | 显示全部楼层
动态块肯定是手动创建,代码更改数据
发表于 2024-5-22 02:28:33 | 显示全部楼层
发现个问题,动态块改可见性参数后,内容未跟着变动,想问下有什么办法解决吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 03:39 , Processed in 0.241008 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表