乐筑天下

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

_fillt圆角多段线,如何获得多段线的点

[复制链接]

2

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
13
发表于 2010-5-12 00:58:00 | 显示全部楼层 |阅读模式
感谢大家了!上次的问题,我已经明白了,感谢大家的帮忙!这次又有一个问题!
我想使用sendcommand  圆角一个直线和一个多段线
这个直线交在多段线的中间某段
圆角的时候要获得这两个对象的拾取点,直线的可以line.endpoint,多段线的点该怎么获得啊???!
我试着用几何算法,算了一个点,
但是,圆角的时候图全乱了,说是 命令: (list(handent"3A14")(list 305.32 .15 0)) ; 错误: 输入中的点位置不正确
小弟不明白这种问题怎么处理啊???请大家帮忙啊!急!!!!
回复

使用道具 举报

2

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
13
发表于 2010-5-12 12:10:00 | 显示全部楼层
我现在已经知道怎么获得多段线上的点通过oblect.Coordinates(index)
我自己做了个小例子:
Rem 倒圆角是对双元表时
Public Function GetDoubleEntTable(entObj As AcadEntity, Pnt As Variant) As String
    Dim entHandle As String
    entHandle = entObj.Handle
    GetDoubleEntTable = "(list(handent" & Chr(34) & entHandle & Chr(34) & ")(list" & Str(Pnt(0)) & Str(Pnt(1)) & Str(Pnt(2)) & "))"
End Function
Rem 倒圆角实体
Public Function axEnt2lspEnt(entObj As AcadEntity) As String
Dim entHandle As String
entHandle = entObj.Handle
axEnt2lspEnt = "(handent" & Chr(34) & entHandle & Chr(34) & ")"
End Function

Public Function TdnPLC(LWPLN1 As AcadLine, LWPLN2 As AcadLWPolyline, PikPt As Variant, FiltR As Double)
Dim Comd As String
Dim EHadl As String
Dim LHadl As String
Rem 倒圆角使用command
Comd = "_fillet r " & FiltR & " "
ThisDrawing.SendCommand Comd
EHadl = axEnt2lspEnt(LWPLN1)
LHadl = GetDoubleEntTable(LWPLN2, PikPt)
'Comd = "(handent" & Chr(34) & Trim(LWPLN1.Handle) & Chr(34) & ") " & "(handent" & Chr(34) & Trim(LWPLN2.Handle) & Chr(34) & ") "
Comd = EHadl & " " & LHadl & " "
ThisDrawing.SendCommand Comd
ThisDrawing.Application.ZoomExtents
End Function


Public Sub sy()
Dim myline1 As AcadLine
Dim myline3 As AcadLWPolyline
Dim myline2 As AcadLine
Dim pt1(1 To 3) As Double
Dim pt2(1 To 3) As Double
Dim pt3(1 To 12) As Double
Dim pt13(0 To 2) As Double
Dim pt23(0 To 2) As Double
Dim r As Double
Dim i As Integer
pt1(1) = 0
pt1(2) = 60
pt1(3) = 0
pt2(1) = 10
pt2(2) = 30
pt2(3) = 0
Set myline1 = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
pt1(1) = 40
pt1(2) = 30
pt1(3) = 0
pt2(1) = 50
pt2(2) = 60
pt2(3) = 0
Set myline2 = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
r = 3
pt3(1) = 0
pt3(2) = 0
pt3(3) = 10
pt3(4) = 30
pt3(5) = 20
pt3(6) = 40
pt3(7) = 30
pt3(8) = 40
pt3(9) = 40
pt3(10) = 30
pt3(11) = 50
pt3(12) = 0
Set myline3 = ThisDrawing.ModelSpace.AddLightWeightPolyline(pt3)
pt13(0) = myline3.Coordinates(4)
pt13(1) = myline3.Coordinates(5)
pt13(2) = 0
pt23(0) = myline3.Coordinates(6)
pt23(1) = myline3.Coordinates(7)
pt23(2) = 0
Call TdnPLC(myline1, myline3, pt13, r)
Call TdnPLC(myline2, myline3, pt23, r)
End Sub
完全可以执行!
但是,我真正用的时候,就不行了!总是提示半径太大!但是不大!因为图形要用到数据库的东西,代码不好发~不好意思!
我用list查看生成的信息,发现了问题!
就是小例子的代码执行时:选择第二个对象: (list(handent"4B61")(list 30 40 0)) ( (30 40
0))
真正代码执行时:选择第二个对象: (list(handent"4B5C")(list 163.320007324219-2.96499999403954 0))
( (nil 0))
大家注意看多了一个(nil 0)!!!!什么意思?是不是提示没有选中的意思!
请大家帮忙啊!我都搞了好几天了!实在不懂怎么回事了!
就像我以前说的,周围就我一个人,连请教的人都没有~就靠大家了!
我在这里谢过了!
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-5-15 00:55:00 | 显示全部楼层
GetDoubleEntTable = "(list(handent" & Chr(34) & entHandle & Chr(34) & ")(list " & Str(Pnt(0)) & " " & Str(Pnt(1)) & " " & Str(Pnt(2)) & "))"
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-1 12:40 , Processed in 0.567672 second(s), 58 queries .

© 2020-2025 乐筑天下

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