style6301 发表于 2007-12-17 11:59:00

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

<p><font color="#f70938">求助:如何完成这样的程序(如何让偏移的线段延长)</font></p><p><font color="#f70938">在DWG文件中已包含有宏,但是程序运行时总是无法按预期的目标完成工作。</font></p><p><font color="#f70938">附件中为图形文件。</font></p><p><font color="#f70938">肯定各位大虾帮忙看看这里的程序为什么会出错?</font></p><p><font color="#f70938">小弟在此先行跪地拜谢了。</font></p><p><font color="#f70938">您可以直接在贴子上回复,也可以直接回复到我的信箱中:STYLE6301@126.COM</font></p>

雪山飞狐_lzh 发表于 2007-12-18 11:19:00

<p>没找到你的宏,<font color="#f70938">偏移的线段延长的话用</font><font color="#000000">IntersectWith求交点,再改变直线的端点</font></p>

style6301 发表于 2007-12-20 10:14:00

<p>&nbsp;</p><p><font color="#ff0066">实在不好意思,上次上传文件时没有注意宏没有保存进图形,</font></p><p><font color="#ff0066">现在重新上传文件,希望各位大虾们多多指教,谢谢!</font></p>

雪山飞狐_lzh 发表于 2007-12-20 14:34:00

本帖最后由 作者 于 2007-12-20 14:45:05 编辑

Sub tt()
On Error Resume Next
    Dim ObjLimits(5) As AcadEntity
    Dim p1, p2, pnt, p3, p4
    Dim dLen As Double
    Dim oLine1 As AcadLine, oLine2 As AcadLine
    Dim iStandandWidth As Double
    Dim i, j
    Dim iMaxLimitNum As Integer
    Dim dAngle As Double
    Dim m As Integer
   
    iStandandWidth = 550
   
    p1 = ThisDrawing.Utility.GetPoint(, vbCrLf & "第一个点:")      '抓取起始点
    p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "第二个点:")    '抓取终止点,以确定总宽度
   
    iMaxLimitNum = 5
    For i = 0 To 5
      ThisDrawing.Utility.GetEntity ObjLimits(i), pnt, vbCrLf & " 请选取第" & i +1 & "个天花板长度边界(最多可选取6个):"
      If Err Then
            Err.Clear
            iMaxLimitNum = i - 1
            Exit For
      End If
    Next i
   
    Set oLine1 = ThisDrawing.ModelSpace.AddLine(p1, p2)
    dAngle = oLine1.Angle + 2 * Atn(1)
    dLen = oLine1.Length
    m = dLen \ iStandandWidth
    p3 = p1
   
    For i = 1 To m
      p3 = ThisDrawing.Utility.PolarPoint(p3, oLine1.Angle, iStandandWidth)
      p4 = ThisDrawing.Utility.PolarPoint(p3, dAngle, 50)
      Set oLine2 = ThisDrawing.ModelSpace.AddLine(p3, p4)
      For j = 0 To iMaxLimitNum
            p4 = oLine2.IntersectWith(ObjLimits(j), acExtendThisEntity)
            If UBound(p4) = 2 Then Exit For
      Next j
      oLine2.EndPoint = p4
    Next i
   
    oLine1.Delete
End Sub

style6301 发表于 2007-12-20 16:32:00

<p><font color="#ff0066">非常感谢您的帮助,一下班我就会去研究您给的代码。</font></p><p><font color="#ff0066">如果有机会来九江·彭泽,请一定发邮件给我,我一定请你喝酒。</font></p><p><font color="#ff0066">呵呵,虽然我的酒量不大,但是一定把您陪好。</font></p>

style6301 发表于 2007-12-21 15:06:00

<p><strong><font face="Verdana" color="#da2549">致 lzh741206:</font></strong></p><p><strong><font face="Verdana" color="#da2549">&nbsp;&nbsp;&nbsp;&nbsp; 如果您方便的话是否可以看看我的PTA.DVB文件中的程序,看看我的程序为什么不能正确运行,是否是因为Offset的用法不对,程序中用法不对的地方是否可以帮我注解一下,谢谢!</font></strong></p>

雪山飞狐_lzh 发表于 2007-12-21 23:41:00

<p>1、我的感觉,offset最好不要用;</p><p>2、最好用For循环而不用Do While</p><p>3、Dim douAngleFromXaxis, degreesN, radN As Double类似的声明是错误的,这样的声明是将douAngleFromXaxis, degreesN声明为变体而不是双精度浮点,要么分行声明,要么这样Dim douAngleFromXaxis As Double, degreesN As Double, radN As Double</p><p>4、Atn(1)是45°的弧度表示,你的角度计算部分太乱了</p>

lyggsjianzhu 发表于 2021-6-19 21:04:53

你的PTA.dwg文件下载后仍然是打不开?怎么回事?

lyggsjianzhu 发表于 2021-6-19 21:13:46

希望成为QQ好友,我的QQ是516092541:handshake

bluelover 发表于 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)利用直线相交公式求得交点(利用距离可以很容易判断哪些交点是在直线上(保留),哪些是在延长线上(剔除)),连线

以上是可能比较可靠的做法。
页: [1] 2
查看完整版本: [求助]求助:如何完成这样的程序(如何让偏移的线段延长)