乐筑天下

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

[求助]有将若干直线段合并成二维多义线的方法吗?

[复制链接]

32

主题

85

帖子

5

银币

后起之秀

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

铜币
213
发表于 2003-10-6 22:36:00 | 显示全部楼层 |阅读模式
绘制一图形,该图形形成是用若干直线段编程(VBA)连接而成,现在想将该图形做成一三维实体,首先要先形成一面域。
问题是直线段数目太多,为能方便构建一面域,想将这些直线段形成一条二维多义线。请高手看看怎样编程?
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-7 06:46:00 | 显示全部楼层
生成面域 AddRegion 方法 所需要提供的参数是对象数组,这些对象数量没有限制,只要所提供的对象能够形成首尾封闭的图形就行,而且可以形成一个或多个封闭图形。而多少个封闭图形就可以生成多少个面域。所以不必去考虑线段的多少,也不必自己编程去形成封闭图形。
[WEB]http://www.mjtd.com/object/acad2004/idh_addregion.htm[/WEB]
回复

使用道具 举报

32

主题

85

帖子

5

银币

后起之秀

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

铜币
213
发表于 2003-10-7 16:26:00 | 显示全部楼层
明总有空的话帮我看看我自编的这个程序。
   这个程序是我自编的一部分,为使看的清楚,我删掉了许多部分,保留了关键的语句。这个程序是凸轮的自动化设计和模拟等。。。。我想将该凸轮图形形成三维实体,所以提出上面的问题,这个图形是由许多直线段连接而成,由userform1窗体的精度所决定(一周360度,若精度设为0.5度,则直线段有720段),本想变成一二维多义线,好方便做面域。经过明总指点,觉得也可以不做二维多义段。
   问题是这图形绘制出来后在首尾点并没有自我封闭,明总帮我看看这程序里该怎么修改?
图如下:

4ezctncal2b.jpg

4ezctncal2b.jpg


程序:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:mfblswz1leu.rar 
下载次数:0  文件大小:67.5 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-7 18:47:00 | 显示全部楼层
那是因为你第一个循环没有画线,因为第一个循环还没有 firstpt0 的值。所以你必须把第一个点保存起来以做便与最后一个点形成一条直线。
回复

使用道具 举报

32

主题

85

帖子

5

银币

后起之秀

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

铜币
213
发表于 2003-10-7 19:04:00 | 显示全部楼层

谢谢
曲线最后一个点怎么去找呢?要想封闭最后一段线段,得要找到最后形成的那个点。
改一下,应该还是明总说得第一个该怎样找的问题?我不知怎么去保存第一点。
回复

使用道具 举报

32

主题

85

帖子

5

银币

后起之秀

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

铜币
213
发表于 2003-10-7 20:20:00 | 显示全部楼层
For u = 0 To 360 Step incrim
   Call Module1.计算sdsdds
   If k = -1 Then
     ptt = ThisDrawing.Utility.PolarPoint(bp1, pi / 2 + beta0 + cetaC, rouC)
   ElseIf k = 1 Then
     ptt = ThisDrawing.Utility.PolarPoint(bp1, pi / 2 - beta0 - cetaC, rouC)
   End If
   
   If IsArray(firstpt0) Then
      Set objline = ThisDrawing.ModelSpace.AddLine(pt0t, ptt) '实际轮廓线
      objline.Color = acRed
   Else
      firstpt0 = pt0t
   End If
   pt0t = ptt
Next u
也就是在程序最后几句离该怎样保存第一点?然后在next u 后再加一直线段连接ptt与第一点。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-7 20:20:00 | 显示全部楼层

      firstpt0 = pt0t
改为
      firstpt0 = ptt
在 Next u后加上:
If IsArray(firstpt0) Then
    Set objline = ThisDrawing.ModelSpace.AddLine(firstpt0, pt0t) '实际轮廓线
    objline.Color = acRed
End If
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-7 20:25:00 | 显示全部楼层
其实按照你的程序,可以使用动态数组的方法保存顶点,然后通过添加二维多段线的方法来生成封闭边界。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-10-7 20:31:00 | 显示全部楼层
另外,看了你的程序有点乱。
其实编程可以自己写些自定义函数,通过函数来传递参数并返回值,这样的思路会清晰一点。
象你这样一直在使用Call来调用其它过程,而该过程计算些什么就很难看懂了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:13 , Processed in 0.397637 second(s), 75 queries .

© 2020-2025 乐筑天下

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