找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 443|回复: 3

[求助]:向斑竹求助:绘制直线如何绕开块

[复制链接]
发表于 2004-5-19 11:04:05 | 显示全部楼层 |阅读模式

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

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

×
大哥,小弟我遇到了一些难题,这关系到小弟的学业。
问题是这样的:我要编一个绘制液压原理图的程序,是二维的,我的任务要求是实现原理图中各个液压阀件的自动连线。关键问题是连线时所要连的线要自动绕开阀件(插入的块)要求用VBA编,希望大哥能帮小弟解决这个难题,能给小弟一个自动连线并绕开障碍区(阀件)的源程序,小弟将不胜感激!!!!!!小弟在此先谢谢大哥了!!!谢谢!
我的邮箱是:jinfu2908@sohu.com
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2004-5-19 19:55:56 | 显示全部楼层
下面的代码仅是一个例子,针对特定的情况,真正实用的还需要做进一步的处理,要考虑各种情况。


  1.   [FONT=courier new]
  2. Sub test()
  3.     Dim EntObj As AcadEntity
  4.     Set EntObj = ThisDrawing.ModelSpace(0)
  5.     ' 创建实体的包含外框
  6.     Dim minPt As Variant
  7.     Dim maxPt As Variant
  8.     EntObj.GetBoundingBox minPt, maxPt
  9.     Dim sPts(0 To 7) As Double
  10.     sPts(0) = minPt(0): sPts(1) = minPt(1)
  11.     sPts(2) = maxPt(0): sPts(3) = minPt(1)
  12.     sPts(4) = maxPt(0): sPts(5) = maxPt(1)
  13.     sPts(6) = minPt(0): sPts(7) = maxPt(1)
  14.     Dim LWPlineObj As AcadLWPolyline
  15.     Set LWPlineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(sPts)
  16.     LWPlineObj.Closed = True
  17.     Set EntObj = LWPlineObj
  18.     EntObj.Visible = False
  19.    
  20.     ' 创建多义线
  21.     Dim dPts(0 To 3) As Double
  22.     Dim Pt As Variant
  23.     Pt = ThisDrawing.Utility.GetPoint(, "指定第一点: ")
  24.     dPts(0) = Pt(0): dPts(1) = Pt(1)
  25.     Pt = ThisDrawing.Utility.GetPoint(Pt, "指定下一点: ")
  26.     dPts(2) = Pt(0): dPts(3) = Pt(1)
  27.     Set LWPlineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(dPts)
  28.     ' 求交
  29.     Dim Pts As Variant
  30.     Pts = LWPlineObj.IntersectWith(EntObj, acExtendNone)
  31.     ' 增加顶点
  32.     Dim v(0 To 1) As Double
  33.     v(0) = Pts(3): v(1) = Pts(4)
  34.     LWPlineObj.AddVertex 1, v
  35.     v(0) = sPts(6): v(1) = sPts(7)
  36.     LWPlineObj.AddVertex 2, v
  37.     v(0) = sPts(0): v(1) = sPts(1)
  38.     LWPlineObj.AddVertex 3, v
  39.     v(0) = Pts(0): v(1) = Pts(1)
  40.     LWPlineObj.AddVertex 4, v
  41.     EntObj.Delete
  42. End Sub
  43.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-24 15:58:34 | 显示全部楼层

谢谢斑竹

十分感谢,请问要实现它是不是很复杂?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-25 15:08:50 | 显示全部楼层
主要是判断块的实际包含范围,算法同意上楼的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 16:00 , Processed in 0.617740 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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