明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1711|回复: 10

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

[复制链接]
发表于 2021-3-11 08:34:07 | 显示全部楼层 |阅读模式
请教大家一个问题,excel vba绘制一个圆,标注直径时,我采用的是用输入圆上一点的方法选择圆,有时会出错,提示需要单个圆,有时可以成功。请问有什么办法解决这个问题吗
发表于 2021-3-11 09:39:34 | 显示全部楼层
"采用的是用输入圆上一点"——哪个点?确定在圆上?
 楼主| 发表于 2021-3-11 16:18:58 | 显示全部楼层
本帖最后由 sunny_8848 于 2021-3-11 16:30 编辑
mikewolf2k 发表于 2021-3-11 09:39
"采用的是用输入圆上一点"——哪个点?确定在圆上?

确定是在圆上,是右象限点。而且事先已经关闭捕捉功能(不知道怎么关闭极轴追踪),甚至也考虑了放大窗口,还是有时报错。如果采用其他标注类型实现,看起来有点别扭
发表于 2021-3-11 18:34:00 | 显示全部楼层
我的想法是遍历CAD中的所有图元,如果是需要的圆,则直接给该对象进行标注,为了确保标注的圆是自己需要的,可以在画圆的时候利用setxdata方法给这个圆添加一个标识,通过对比确认
 楼主| 发表于 2021-3-11 18:55:31 来自手机 | 显示全部楼层
本帖最后由 sunny_8848 于 2021-3-12 11:03 编辑

谢谢解答。可是只会一点简单的eⅹcel vbα,能帮忙给个代码吗
发表于 2021-3-12 10:45:31 | 显示全部楼层
这个圆是否在冻结的图层上?还有,它是与在同一个平面上?
 楼主| 发表于 2021-3-12 10:53:16 | 显示全部楼层
不是在冻结的图层上,也是在一个平面上。现在的问题是有时可以成功有时报错提示需要选择单个圆,一直找不到原因
发表于 2021-3-12 14:02:24 | 显示全部楼层
  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
 楼主| 发表于 2021-3-12 16:37:44 | 显示全部楼层
本帖最后由 sunny_8848 于 2021-3-12 19:38 编辑

感谢帮忙,可以方便标注直径了。要怎么修改代码才能改成  30-φ20配钻  这样的标注形式,圆心点和半径依据单元格数据,这样就可以实现只需更改单元格数据,绘图时不需要人工介入。整个图纸中就这个直径标注特殊点,是比例图中画的,无法采用修改文字内容的方式。
发表于 2021-3-12 19:50:52 | 显示全部楼层
  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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 04:44 , Processed in 0.149709 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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