乐筑天下

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

画圆后标注直径有时无法选中圆

[复制链接]

15

主题

207

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
272
发表于 2021-3-11 08:34:00 | 显示全部楼层 |阅读模式
请教大家一个问题,excel vba绘制一个圆,标注直径时,我采用的是用输入圆上一点的方法选择圆,有时会出错,提示需要单个圆,有时可以成功。请问有什么办法解决这个问题吗
回复

使用道具 举报

85

主题

1175

帖子

11

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1518
发表于 2021-3-11 09:39:00 | 显示全部楼层
"采用的是用输入圆上一点"——哪个点?确定在圆上?
回复

使用道具 举报

15

主题

207

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
272
发表于 2021-3-11 16:18:00 | 显示全部楼层

确定是在圆上,是右象限点。而且事先已经关闭捕捉功能(不知道怎么关闭极轴追踪),甚至也考虑了放大窗口,还是有时报错。如果采用其他标注类型实现,看起来有点别扭
回复

使用道具 举报

2

主题

8

帖子

2

银币

初来乍到

Rank: 1

铜币
16
发表于 2021-3-11 18:34:00 | 显示全部楼层
我的想法是遍历CAD中的所有图元,如果是需要的圆,则直接给该对象进行标注,为了确保标注的圆是自己需要的,可以在画圆的时候利用setxdata方法给这个圆添加一个标识,通过对比确认
回复

使用道具 举报

15

主题

207

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
272
发表于 2021-3-11 18:55:00 | 显示全部楼层

谢谢解答。可是只会一点简单的eⅹcel vbα,能帮忙给个代码吗
回复

使用道具 举报

72

主题

617

帖子

30

银币

中流砥柱

Rank: 25

铜币
923
发表于 2021-3-12 10:45:00 | 显示全部楼层
这个圆是否在冻结的图层上?还有,它是与在同一个平面上?
回复

使用道具 举报

15

主题

207

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
272
发表于 2021-3-12 10:53:00 | 显示全部楼层
不是在冻结的图层上,也是在一个平面上。现在的问题是有时可以成功有时报错提示需要选择单个圆,一直找不到原因
回复

使用道具 举报

14

主题

404

帖子

13

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
455
发表于 2021-3-12 14:02:00 | 显示全部楼层
  1. Public Sub 画圆标注直径()
  2.     Dim AcAdApp As Object
  3.     Dim ThisDrawing As Object
  4.    
  5.     On Error Resume Next
  6.    
  7.     Set AcAdApp = GetObject(, "AutoCAD.Application")
  8.     If Err Then
  9.        MsgBox "请打开AutoCAD,再执行程序!", vbInformation
  10.        Exit Sub
  11.     End If
  12.    
  13.     Set ThisDrawing = AcAdApp.ActiveDocument
  14.    
  15.    
  16.     Dim circleobj As Object
  17.     Dim centerpoint(0 To 2) As Double
  18.     Dim radius As Double
  19.     Dim returnPnt As Variant
  20.    
  21.     returnPnt = ThisDrawing.Utility.GetPoint(, "请指定圆心点: ")
  22.     centerpoint(0) = returnPnt(0): centerpoint(1) = returnPnt(1): centerpoint(2) = returnPnt(2)
  23.     radius = ThisDrawing.Utility.GetDistance(returnPnt, "请输入半径R=: ")
  24.       
  25.     Set circleobj = ThisDrawing.ModelSpace.AddCircle(centerpoint, radius)
  26.     Dim dimobj As Object
  27.     Dim chordpoint(0 To 2) As Double
  28.     Dim farchordpoint(0 To 2) As Double
  29.     Dim leaderlength As Double
  30.     Dim Angle As Double
  31.    
  32.     Angle = Atn(1#) '标注时与图上X轴正向的夹角,设为沿45°方向标注
  33.     chordpoint(0) = centerpoint(0) + radius * Cos(Angle)
  34.     chordpoint(1) = centerpoint(1) + radius * Sin(Angle)
  35.     chordpoint(2) = centerpoint(2)
  36.     farchordpoint(0) = centerpoint(0) - radius * Cos(Angle)
  37.     farchordpoint(1) = centerpoint(1) - radius * Sin(Angle)
  38.     farchordpoint(2) = centerpoint(2)
  39.     leaderlength = 1#
  40.     Set dimobj = ThisDrawing.ModelSpace.AddDimDiametric(chordpoint, farchordpoint, leaderlength)
  41. End Sub
回复

使用道具 举报

15

主题

207

帖子

11

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
272
发表于 2021-3-12 16:37:00 | 显示全部楼层

感谢帮忙,可以方便标注直径了。要怎么修改代码才能改成  30-φ20配钻  这样的标注形式,圆心点和半径依据单元格数据,这样就可以实现只需更改单元格数据,绘图时不需要人工介入。整个图纸中就这个直径标注特殊点,是比例图中画的,无法采用修改文字内容的方式。
回复

使用道具 举报

14

主题

404

帖子

13

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
455
发表于 2021-3-12 19:50:00 | 显示全部楼层
  1. Public Sub 画圆标注直径()
  2.     Dim AcAdApp As Object
  3.     Dim ThisDrawing As Object
  4.    
  5.     On Error Resume Next
  6.    
  7.     Set AcAdApp = GetObject(, "AutoCAD.Application")
  8.     If Err Then
  9.        MsgBox "请打开AutoCAD,再执行程序!", vbInformation
  10.        Exit Sub
  11.     End If
  12.    
  13.     Set ThisDrawing = AcAdApp.ActiveDocument
  14.    
  15.     Dim circleobj As Object
  16.     Dim centerpoint(0 To 2) As Double
  17.     Dim radius As Double
  18.     Dim returnPnt As Variant
  19.    
  20.     AppActivate AcAdApp.Caption  '将控制权转交给CAD
  21.    
  22.     returnPnt = ThisDrawing.Utility.GetPoint(, "请指定圆心点: ")
  23.     centerpoint(0) = returnPnt(0): centerpoint(1) = returnPnt(1): centerpoint(2) = returnPnt(2)
  24.     radius = ThisDrawing.Utility.GetDistance(returnPnt, "请输入半径R=: ")
  25.       
  26.     Set circleobj = ThisDrawing.ModelSpace.AddCircle(centerpoint, radius)
  27.     Dim dimobj As Object
  28.     Dim chordpoint(0 To 2) As Double
  29.     Dim farchordpoint(0 To 2) As Double
  30.     Dim leaderlength As Double
  31.     Dim Angle As Double
  32.    
  33.     Angle = Atn(1#) '标注时与图上X轴正向的夹角,设为沿45°方向标角
  34.     chordpoint(0) = centerpoint(0) + radius * Cos(Angle)
  35.     chordpoint(1) = centerpoint(1) + radius * Sin(Angle)
  36.     chordpoint(2) = centerpoint(2)
  37.     farchordpoint(0) = centerpoint(0) - radius * Cos(Angle)
  38.     farchordpoint(1) = centerpoint(1) - radius * Sin(Angle)
  39.     farchordpoint(2) = centerpoint(2)
  40.     leaderlength = 1#
  41.     Set dimobj = ThisDrawing.ModelSpace.AddDimDiametric(chordpoint, farchordpoint, leaderlength)
  42.    
  43.     Dim Qzzfc As String
  44.     Qzzfc = "30-" & "φ"
  45.     dimobj.TextPrefix = Qzzfc  '标注增加前缀字符
  46. End Sub
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 23:07 , Processed in 0.489027 second(s), 72 queries .

© 2020-2025 乐筑天下

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