找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1877|回复: 2

[求助] [求助]:怎样用vba获得一条polyline坐标?

[复制链接]
发表于 2002-4-18 06:40:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
绿线是一条polyline,怎样能获得A、B、C、D四点的坐标和
B、C点所对应圆弧的半径?(虚线是没有的线,是为示意C、D
两点是交点才画的)最好能用vba。
我知道polyline有一个属性Coordinate可以获得坐标,那怎么获得交点的坐标和圆弧的半径?
望各位高手能告知,本人急用,谢谢!
图在附见。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-4-18 09:32:41 | 显示全部楼层

参考以下代码



  1. '因其中有自编函数,无法直接运行,不知能否参考

  2.     Do While i < numberDd

  3.         If i = numberDd - 1 And objPline.GetBulge(numberDd - 2) <> 0 Then
  4.             Exit Do '如果多义线最后一段为圆弧,退出
  5.         End If
  6.         
  7.         pubNumberJd = pubNumberJd + 1
  8.         ReDim Preserve pubJd(0 To pubNumberJd - 1) '动态数组
  9.         td = objPline.GetBulge(i) '顶点凸度
  10.         
  11.         With pubJd(pubNumberJd - 1)
  12.          .bh = pubNumberJd
  13.         If td = 0 Then '下一段不是圆弧
  14.             .r = 0 '作为不设平曲线的转点
  15.             
  16.             '顶点坐标转换到UCS
  17.             ptv = objPline.Coordinate(i)
  18.             Mycad3DPointSet pt, ptv(0), ptv(1), objPline.Elevation
  19.             ptv1 = objUtil.TranslateCoordinates(pt, acOCS, acWorld, False, objPline.Normal)
  20.             ptv2 = objUtil.TranslateCoordinates(ptv1, acWorld, acUCS, False)
  21.             MycadPointCopy .ptjd, ptv2
  22.             i = i + 1
  23.         
  24.         Else '下一段是圆弧,该顶点为ZY点
  25.             
  26.             '计算ZY坐标
  27.             ptv = objPline.Coordinate(i)
  28.             Mycad3DPointSet pt, ptv(0), ptv(1), objPline.Elevation
  29.             ptvzy = objUtil.TranslateCoordinates(pt, acOCS, acWorld, False, objPline.Normal) 'ZY点WCS坐标
  30.             ptv = objUtil.TranslateCoordinates(ptvzy, acWorld, acUCS, False)
  31.             MycadPointCopy .ptzy, ptv 'ZY点UCS坐标
  32.             
  33.             '计算YZ坐标
  34.             ptv = objPline.Coordinate(i + 1)
  35.             Mycad3DPointSet pt, ptv(0), ptv(1), objPline.Elevation
  36.             ptvyz = objUtil.TranslateCoordinates(pt, acOCS, acWorld, False, objPline.Normal) 'YZ点WCS坐标
  37.             ptv = objUtil.TranslateCoordinates(ptvyz, acWorld, acUCS, False)
  38.             MycadPointCopy .ptyz, ptv 'YZ点UCS坐标

  39.             '计算圆心坐标
  40.             ptvo = Plavb_2PtdPto(ptvzy, ptvyz, td) '圆心WCS坐标
  41.             ptv = objUtil.TranslateCoordinates(ptvo, acWorld, acUCS, False)
  42.             MycadPointCopy .pto, ptv '圆心UCS坐标

  43.             '计算曲线元素
  44.             .r = MycadDistance(.pto, .ptzy)
  45.             .l = Abs(4 * .r * Atn(td))
  46.             .zj = .l / .r
  47.             .t = .r * Tan(.zj / 2)
  48.             .e = .r * (1 / Cos(.zj / 2) - 1)
  49.             .j = 2 * .t - .l
  50.             
  51.             '计算交点坐标
  52.             ang1 = objUtil.AngleFromXAxis(ptvo, ptvzy) + PI / 2
  53.             ang2 = objUtil.AngleFromXAxis(ptvo, ptvyz) + PI / 2
  54.             ptv1 = objUtil.PolarPoint(ptvzy, ang1, .r)
  55.             ptv2 = objUtil.PolarPoint(ptvyz, ang2, .r)
  56.             Set objLine1 = moSpace.AddLine(ptvzy, ptv1)
  57.             Set objLine2 = moSpace.AddLine(ptvyz, ptv2)
  58.             ptvjd = objLine1.IntersectWith(objLine2, acExtendBoth) '交点WCS坐标
  59.             objLine1.Delete
  60.             objLine2.Delete
  61.             ptv3 = objUtil.TranslateCoordinates(ptvjd, acWorld, acUCS, False)
  62.             MycadPointCopy .ptjd, ptv3 '交点UCS坐标

  63.             '计算QZ坐标
  64.             ang1 = objUtil.AngleFromXAxis(ptvo, ptvjd)
  65.             ptvqz = objUtil.PolarPoint(ptvo, ang1, .r) 'QZ点WCS坐标
  66.             ptv = objUtil.TranslateCoordinates(ptvqz, acWorld, acUCS, False)
  67.             MycadPointCopy .ptqz, ptv 'QZ点UCS坐标

  68.             If objPline.GetBulge(i + 1) <> 0 Then '下一段还是圆弧
  69.                i = i + 1
  70.             Else
  71.                i = i + 2
  72.             End If
  73.         End If
  74.         End With
  75.     Loop
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-4-22 09:25:20 | 显示全部楼层
多谢CamPtt兄,程序我大致已看懂,但还有一些问题不太明白,请CamPtt  兄指教:
1   Mycad3DPointSet,MycadPointCopy是什么意思?
2  为什么不从ocs直接转换到ucs,而是先转换到wcs,再转换到ucs?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-5 10:13 , Processed in 0.430442 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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