明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 830|回复: 4

求助:如何用vba做offset?

[复制链接]
发表于 2015-6-2 16:04:42 | 显示全部楼层 |阅读模式
我的目的是这样的:
根据用户输入的apnt和bpnt,也就是一个直线的起点和终点,绘制一个直线(设为cline)。用acadline。然后,根据用户输入的宽度,比如200,用cline的offset命令,在cline两侧各生成一个直线,分别叫b1和b2.因为我在用offset之后,还要继续操作b1和b2,怎么实现?

我现在是这样的:定义b1和b2为acadline,然后set b1=cline.offset(b),执行出错。但是仍然出现了一条直线。

请问该如何实现?
 楼主| 发表于 2015-6-2 16:10:19 | 显示全部楼层
代码如下:

    Dim aPNT As ACAD_POINT
    Dim bPNT As ACAD_POINT
   
    Dim cLine As AcadLine
   
    Dim B1 As AcadLine
    Dim B2 As AcadLine
   
    Dim B As Double 'áoμÄ¿í¶è
    B = ThisDrawing.Utility.GetReal("áoμÄ¿í¶è£o")
   
   
    aPNT = ThisDrawing.Utility.GetPoint(, "êäèëÆeμã£o")
    bPNT = ThisDrawing.Utility.GetPoint(aPNT, "ÖÕμã£o")
    Set cLine = ThisDrawing.ModelSpace.AddLine(aPNT, bPNT)
    With cLine
        .Lineweight = acLnWt100
        .color = acGreen
        .Update
    End With
   
    Set B1 = cLine.Offset(B / 2)
    With B1
        .Lineweight = acLnWt000
        .color = acRed
        .Update
    End With
   
    B2 = cLine.Offset(-B / 2)
    With B1
        .Lineweight = acLnWt000
        .color = acRed
        .Update
    End With
 楼主| 发表于 2015-6-3 16:04:39 | 显示全部楼层
明白了,offset命令返回的是一个variant的数组!也就是说,经过:B1 = cLine.Offset(B / 2) 后返回的b1,实际上已经变成了一个数组,虽然这个数组只有一个实体,也就是B1(0)
发表于 2015-6-4 15:34:32 | 显示全部楼层
OFFset是一个高深的问题,尤期是在图形退化的时候,最好能搞一个纯算法的偏移

点评

纯算法的,相当有难度了  发表于 2015-6-4 22:26
 楼主| 发表于 2015-6-12 10:05:11 | 显示全部楼层
什么是“图形退化”?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:52 , Processed in 0.147863 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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