明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3091|回复: 10

[求助]求助:如何完成这样的程序(如何让偏移的线段延长)

[复制链接]
发表于 2007-12-17 11:59:00 | 显示全部楼层 |阅读模式

求助:如何完成这样的程序(如何让偏移的线段延长)

在DWG文件中已包含有宏,但是程序运行时总是无法按预期的目标完成工作。

附件中为图形文件。

肯定各位大虾帮忙看看这里的程序为什么会出错?

小弟在此先行跪地拜谢了。

您可以直接在贴子上回复,也可以直接回复到我的信箱中:STYLE6301@126.COM

本帖子中包含更多资源

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

x
发表于 2007-12-18 11:19:00 | 显示全部楼层

没找到你的宏,偏移的线段延长的话用IntersectWith求交点,再改变直线的端点

 楼主| 发表于 2007-12-20 10:14:00 | 显示全部楼层

 

实在不好意思,上次上传文件时没有注意宏没有保存进图形,

现在重新上传文件,希望各位大虾们多多指教,谢谢!

本帖子中包含更多资源

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

x
发表于 2007-12-20 14:34:00 | 显示全部楼层
本帖最后由 作者 于 2007-12-20 14:45:05 编辑
  1. Sub tt()
  2. On Error Resume Next
  3.     Dim ObjLimits(5) As AcadEntity
  4.     Dim p1, p2, pnt, p3, p4
  5.     Dim dLen As Double
  6.     Dim oLine1 As AcadLine, oLine2 As AcadLine
  7.     Dim iStandandWidth As Double
  8.     Dim i, j
  9.     Dim iMaxLimitNum As Integer
  10.     Dim dAngle As Double
  11.     Dim m As Integer
  12.    
  13.     iStandandWidth = 550
  14.    
  15.     p1 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第一个点:")      '抓取起始点
  16.     p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "第二个点:")    '抓取终止点,以确定总宽度
  17.    
  18.     iMaxLimitNum = 5
  19.     For i = 0 To 5
  20.         ThisDrawing.Utility.GetEntity ObjLimits(i), pnt, vbCrLf & " 请选取第" & i +1 & "个天花板长度边界(最多可选取6个):"
  21.         If Err Then
  22.             Err.Clear
  23.             iMaxLimitNum = i - 1
  24.             Exit For
  25.         End If
  26.     Next i
  27.    
  28.     Set oLine1 = ThisDrawing.ModelSpace.AddLine(p1, p2)
  29.     dAngle = oLine1.Angle + 2 * Atn(1)
  30.     dLen = oLine1.Length
  31.     m = dLen \ iStandandWidth
  32.     p3 = p1
  33.    
  34.     For i = 1 To m
  35.         p3 = ThisDrawing.Utility.PolarPoint(p3, oLine1.Angle, iStandandWidth)
  36.         p4 = ThisDrawing.Utility.PolarPoint(p3, dAngle, 50)
  37.         Set oLine2 = ThisDrawing.ModelSpace.AddLine(p3, p4)
  38.         For j = 0 To iMaxLimitNum
  39.             p4 = oLine2.IntersectWith(ObjLimits(j), acExtendThisEntity)
  40.             If UBound(p4) = 2 Then Exit For
  41.         Next j
  42.         oLine2.EndPoint = p4
  43.     Next i
  44.    
  45.     oLine1.Delete
  46. End Sub

 楼主| 发表于 2007-12-20 16:32:00 | 显示全部楼层

非常感谢您的帮助,一下班我就会去研究您给的代码。

如果有机会来九江·彭泽,请一定发邮件给我,我一定请你喝酒。

呵呵,虽然我的酒量不大,但是一定把您陪好。

 楼主| 发表于 2007-12-21 15:06:00 | 显示全部楼层

致 lzh741206:

     如果您方便的话是否可以看看我的PTA.DVB文件中的程序,看看我的程序为什么不能正确运行,是否是因为Offset的用法不对,程序中用法不对的地方是否可以帮我注解一下,谢谢!

发表于 2007-12-21 23:41:00 | 显示全部楼层

1、我的感觉,offset最好不要用;

2、最好用For循环而不用Do While

3、Dim douAngleFromXaxis, degreesN, radN As Double类似的声明是错误的,这样的声明是将douAngleFromXaxis, degreesN声明为变体而不是双精度浮点,要么分行声明,要么这样Dim douAngleFromXaxis As Double, degreesN As Double, radN As Double

4、Atn(1)是45°的弧度表示,你的角度计算部分太乱了

发表于 2021-6-19 21:04:53 | 显示全部楼层
你的PTA.dwg文件下载后仍然是打不开?怎么回事?
发表于 2021-6-19 21:13:46 | 显示全部楼层
希望成为QQ好友,我的QQ是516092541
发表于 2021-6-22 15:46:38 | 显示全部楼层
明经通道上下载的DVB和DWG文件好像前面都会多几码。
在16进制下是0D0A,把这几码删除就可以打开了。

你这个需求的程序设计思路应该调整下:
1)第1步用getentity获取第一条天花板线(底边),同时可以取得C点
2)然后用getpoint获取终点P2,同时用斜率或坐标判断P2是否在第一条天花板沿线上,否则重新选取
3)然后依次获取其它天花板线,并用redim preserve保存到一个数组
4)结合C点,P2点和斜率,可以计算得到偏移线的直线参数
5)利用直线相交公式求得交点(利用距离可以很容易判断哪些交点是在直线上(保留),哪些是在延长线上(剔除)),连线

以上是可能比较可靠的做法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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