015集——CAD vba 填充(hatch)及挖空

文章介绍了使用AutoCAD编程实现绘制椭圆、正方形、圆形及空心填充的步骤,展示了如何通过AcadHatch对象进行多边形和圆形的边界定义以及图案填充的调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,画个椭圆,并填充,直接上代码:


Sub 画椭圆填充()
'2024年3月6日21:10:22 by qq443440204
Dim hat As AcadHatch '填充
Dim ell(0) As AcadEllipse '椭圆
Dim ell1(0) As AcadEllipse '椭圆
Dim cent(0 To 2) As Double '椭圆中心点
Dim dd(0 To 2) As Double '椭圆长轴端点
Dim dd1(0 To 2) As Double '椭圆长轴端点
'先画个椭圆
cent(0) = 400000: cent(1) = 3800000
dd(0) = 100: dd(1) = 1000  'xy轴长度
dd1(0) = 50: dd1(1) = 500  'xy轴长度
rr = 0.4 '长短轴比率
Set ell(0) = ThisDrawing.ModelSpace.AddEllipse(cent, dd, rr)
Set ell1(0) = ThisDrawing.ModelSpace.AddEllipse(cent, dd1, rr)
'开始填充
Set hat = ThisDrawing.ModelSpace.AddHatch(0, "AR-B816", True) '建填充对象
hat.AppendOuterLoop ell '以ell数组为边界
hat.AppendInnerLoop ell1 '以ell数组为边界
hat.PatternScale = 1 '修改填充比例
hat.PatternAngle = 3.14159 / 4 '修改填充角度
hat.Evaluate
ZoomExtents
End Sub


效果如下: 

再画个外围正方形,内围圆,填充中间部分。 

'2024年3月6日21:13:29 by qq443440204
Sub 空心填充()
Dim 总孔数 As Integer
Dim hobj As AcadHatch
Dim c1(0) As AcadCircle, cc1(2) As Double
Dim c2 As AcadCircle, cc2(2) As Double
Dim box(0) As AcadLWPolyline
Dim p1(2) As Double, p2(2) As Double
Dim 小孔数组() As Object
Dim mycircle(0) As AcadCircle
总孔数 = 8
Set c1(0) = ThisDrawing.ModelSpace.AddCircle(cc1, 60) '画圆
p1(0) = -100: p1(1) = -100
p2(0) = 100: p2(1) = 100
Set box(0) = 画长方形(p1, p2) '画正方形
Set hobj = ThisDrawing.ModelSpace.AddHatch(0, "ansi32", True) '建填充对象
hobj.AppendInnerLoop box '以box数组为内边界
hobj.AppendOuterLoop c1 '以c1数组为外边界
'cc2(1) = 80 '小圆y坐标
'Set c2 = ThisDrawing.ModelSpace.AddCircle(cc2, 10) '画1个小圆
'小孔数组 = c2.ArrayPolar(总孔数 + 1, 2 * 3.14, cc1) '阵列成8个,首尾相连,故+1
'c2.Delete
'Stop
'For ii = 0 To 总孔数 - 1
'  Set mycircle(0) = 小孔数组(ii)
'  hobj.InsertLoopAt 0, acHatchLoopTypeDefault, mycircle '按给定索引在图案填充中插入边界,既在填充里挖掉小孔
'Next ii
'hobj.PatternSpace = 2 '修改间距
hobj.Evaluate
ZoomExtents
End Sub

Function 画长方形(p1, p2) As AcadLWPolyline '用对角线画矩形
Dim boxp(0 To 7) As Double
boxp(0) = p1(0): boxp(1) = p1(1)
boxp(2) = p1(0): boxp(3) = p2(1)
boxp(4) = p2(0): boxp(5) = p2(1)
boxp(6) = p2(0): boxp(7) = p1(1)
Set 画长方形 = ThisDrawing.ModelSpace.AddLightWeightPolyline(boxp)
画长方形.Closed = True
End Function

最后在填充中阵列一些小圆,并挖空小圆中的填充

'2024年3月6日21:13:29 by qq443440204
Sub 空心填充()
Dim 总孔数 As Integer
Dim hobj As AcadHatch
Dim c1(0) As AcadCircle, cc1(2) As Double
Dim c2 As AcadCircle, cc2(2) As Double
Dim box(0) As AcadLWPolyline
Dim p1(2) As Double, p2(2) As Double
Dim 小孔数组() As Object
Dim mycircle(0) As AcadCircle
总孔数 = 8
Set c1(0) = ThisDrawing.ModelSpace.AddCircle(cc1, 60) '画圆
p1(0) = -100: p1(1) = -100
p2(0) = 100: p2(1) = 100
Set box(0) = 画长方形(p1, p2) '画正方形
Set hobj = ThisDrawing.ModelSpace.AddHatch(0, "ansi32", True) '建填充对象
hobj.AppendInnerLoop box '以box数组为内边界
hobj.AppendOuterLoop c1 '以c1数组为外边界
cc2(1) = 80 '小圆y坐标
Set c2 = ThisDrawing.ModelSpace.AddCircle(cc2, 10) '画1个小圆
小孔数组 = c2.ArrayPolar(总孔数 + 1, 2 * 3.14, cc1) '阵列成8个,首尾相连,故+1
c2.Delete
For ii = 0 To 总孔数 - 1
  Set mycircle(0) = 小孔数组(ii)
  hobj.InsertLoopAt 0, acHatchLoopTypeDefault, mycircle '按给定索引在图案填充中插入边界,既在填充里挖掉小孔
Next ii
hobj.PatternSpace = 2 '修改间距
hobj.Evaluate
ZoomExtents
End Sub

Function 画长方形(p1, p2) As AcadLWPolyline '用对角线画矩形
Dim boxp(0 To 7) As Double
boxp(0) = p1(0): boxp(1) = p1(1)
boxp(2) = p1(0): boxp(3) = p2(1)
boxp(4) = p2(0): boxp(5) = p2(1)
boxp(6) = p2(0): boxp(7) = p1(1)
Set 画长方形 = ThisDrawing.ModelSpace.AddLightWeightPolyline(boxp)
画长方形.Closed = True
End Function

 

 小圆半径改成40,图形发生变化:

 改成80后的图:

另附语法: 

object.InsertLoopAt Index, LoopType, Loop

Object

Hatch
使用该方法的对象。

Index

Integer[整数]; 仅用于输入
生成图案填充边界的顶点数组中的索引位置。索引必须从 0 开始的正整数。

LoopType

AcLoopType 常数; 仅用于输入

acHatchLoopTypeDefault

acHatchLoopTypeExternal

acHatchLoopTypePolyline

acHatchLoopTypeDerived

acHatchLoopTypeTextbox

Loop

Variant[变体] (对象或对象数组); 仅用于输入
形成封闭边界的对象或对象数组。如果使用是的对象数组,它们的端点必须首尾相连以形成回路。边界,或定义边界的数组,可由以下类型的对象组成:

Line, Polyline, Circle, Ellipse, Spline, Region

目录 第一章 VBA入门 了解嵌入和全局VBA工程 用VBA管理器组织工程 处理宏 用VBA IDE编辑工程 更多的信息 回顾AutoCAD VBA 工程术语 回顾AutoCAD VBA 命令 第二章 理解ActiveX自动操作基础.. 理解AutoCAD对象模型 访问对象层次 通过合对象操作 理解属性和方法 理解父对象 定位类型库 在数据库中返回第一个图元 在方法和属性中使用变体 使用其它程序语言 第三章 控制AutoCAD环境 打开、保存和关闭图形 设定AutoCAD参数 控制应用程序窗口 控制图形窗口 重置活动对象 设定和返回系统变量 精确制图 提示用户输入 访问AutoCAD命令行 工作于无打开文档状态 输入其它文件格式 输出到其它文件格式 第四章 创建和编辑AutoCAD图元 创建对象 确定容器对象 创建直线 创建曲线对象 创建点对象 创建实体填充区域 创建面域 创建阴影 创建实体填充区域 创建面域 创建阴影 编辑对象 工作于命名的对象 选择对象 复制对象 移动对象 删除对象 比例缩放对象 转换对象 延伸和修剪对象 分解对象 编辑多段线 编辑样条曲线 编辑阴影 使用图层、颜色和线型 使用图层 使用颜色 使用线型 分配图层、颜色和线型给对象 添加文本到图形中 处理文字样式 使用单行文字 使用多行文字 使用Unicode字符、控制代码和特殊字符 替换字体 拼写检查 第五章 标注与公差 标注的概念 创建标注 编辑标注 利用标注样式 在模型空间和图纸空间中标注 创建引线及注解 创建形位公差 第六章 定义菜单和工具栏 理解MenuBar和MenuGroups合 加载菜单组 改变菜单条 创建和编辑下拉菜单和快捷菜单 建立并编辑工具栏 建立宏 对菜单项和工具栏项增加状态栏帮... 在右键菜单中增加条目 第七章 使用事件 了解AutoCAD中的事件 编写事件处理器的方法 处理应用程序级事件 处理文档级事件 处理对象级事件 第八章 在三维空间下工作 指定三维坐标 定义用户坐标系统 坐标转换 建立三维对象 在三维中编辑 编辑三维实体 第九章 定义布局及打印 了解模型空间和图纸空间 了解布局 了解布局与块的关系 了解打印配置 决定布局设置 了解视口 切换至图纸空间布局 切换至模型空间布局 建立图纸空间视口 改变视口视图及内容 在图纸空间中缩放线型样式 在被打印视口中的消隐线 打印图纸 执行基本打印 在模型空间中打印 从图纸空间打印 第十章-高级绘图与组织技术 使用光栅图像 附着和缩放光栅图像 管理光栅图像 修改图像和图像边界 剪裁图像 使用块和属性 使用块 使用属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值