- 积分
- 3124
- 明经币
- 个
- 注册时间
- 2007-1-20
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2020-9-14 23:21:57
|
显示全部楼层
本帖最后由 woaishuijia 于 2020-9-15 09:23 编辑
我靠,你这程序里问题太多了,下面是改过的程序
Dim acadapp As AcadApplication
Dim AcadDoc As AcadDocument
Dim obj_Acad As Object, obj_Doc As Object, obj_ModelSpace As Object '这一行声明的变量程序中没有用到,不知是做什么用的。但声明变量时要尽可能声明为需要的类,简单声明为Object后面编程时就没有提示了
Private Sub Command3_Click()
On Error Resume Next '如果目前系统中已执行autocad,则取得已执行autocad物件
Set acadapp = GetObject(, "AutoCAD.Application.24") '检查AutoCAD是否已经打开
If Err Then '没有打开
Err.Clear '如果目前系统中尚未执行autocad,则建立autocad物件
Set acadapp = CreateObject("AutoCAD.Application.17") '打开CAD
If Err Then
MsgBox "连接错误" '打开失败显示连接错误
End If
End If
On Error GoTo 0 '这行是增加的:取消错误陷阱。没有这一行,调试时你后面程序中的错误无法发现
acadapp.Visible = True '显示CAD
Set AcadDoc = acadapp.ActiveDocument '使用acaddoc变量引用当前的AutoCAD图形
Dim HatchObj As AcadHatch '定义hatchobj为CAD里面填充对象
Dim PatternName As String 'PatternName图案填充名称
Dim PatternType As Long 'PatternType表示图案填充类型的索引,它有三个可选值,acHatchPatternTypePreDefined用AutoCAD标注图案文件Acad.Pat定义的图案进行填充。acHatchPatternTypeDefined用当前线型定义的填充线填充,acHatchPatternTypeCustomDefined用用户自定义的图案文件进行填充。
Dim bAssociativity As Boolean 'Associativity表示图案填充是否与边界关联,如果为true则填充关联边界,边界改变则填充也改变,如果为false则填充不关联边界
Dim MyColor As AcadAcCmColor
PatternType = 0
PatternName = "ANGLE"
bAssociativity = True
' Set AcadDoc = ThisDrawing'这一行莫名其妙,前面已经为变量赋值了
Set HatchObj = AcadDoc.ModelSpace.AddHatch(PatternType, PatternName, bAssociativity, 0)
' Set MyColor = AcadDoc.ModelSpace.GetInterfaceObject("AutoCAD.AcCmColor.16")'GetInterfaceObject是AcadApplication对象的方法,不是Block对象的。版本号到底是17还是16?你可以在CAD命令行输入“ACADVER”系统变量,看下自己到底是哪个版本。
Set MyColor = acadapp.GetInterfaceObject("AutoCAD.AcCmColor.17") '这里按你前面的17改了版本号
MyColor.SetRGB 80, 100, 244
HatchObj.TrueColor = MyColor
' HatchObj.color = 1
Dim Ld1(0 To 0) As AcadEntity '定义outerLoop为CAD里面的实体
' Dim syu(0 To 9) As Double '画矩形不需要5个顶点
Dim syu(0 To 7) As Double '定义syu为CAD里面轻便多义线通过的点
syu(0) = 0: syu(1) = 0
syu(2) = 800: syu(3) = 0
syu(4) = 800: syu(5) = 200
syu(6) = 0: syu(7) = 200
' syu(8) = 0: syu(9) = 0
Set Ld1(0) = AcadDoc.ModelSpace.AddLightWeightPolyline(syu)
Ld1(0).Closed = True '这行是增加的,让多段线闭合就可以了,不需要多出一个顶点
HatchObj.AppendOuterLoop (Ld1) '将建立的实体赋给outerLoop
HatchObj.Evaluate
AcadDoc.Regen True
End Sub
|
|