Bryco 发表于 2006-4-26 09:48:23

从getreal中选择的点

**** Hidden Message *****

Keith™ 发表于 2006-4-26 10:18:58

谢谢Keith
但是如果我必须翻译这一点(绿点有效),我想我得到的是Ucs点而不是Wcs点。
这确实让人困惑。

Bryco 发表于 2006-4-26 11:40:19

不,你得到的是一个WCS点,但是放置的对象将插入点解释为一个UCS点。
这只是与AutoCAD编程的另一个不一致之处。试试这个例子...
设置一个非WCS的UCS并获取任意点。那将是WCS。采用WCS点并将其应用到新的(或编辑的)实体,您提供的点将被解释为相对于UCS,而不是WCS。然而,一旦创建了对象,您将发现对象的插入点不再与WCS点匹配,因为先前的点将在读取实体时自动转换为WCS。
简而言之,当修改或创建插入点时,您必须使用UCS点,但是当您从对象中读取该插入点时,它将被读取为WCS,因此转换函数

Keith™ 发表于 2006-4-26 11:51:09

啊哈!实际上是GetEntity的文档出错了。它不返回WCS坐标中的点。它以UCS坐标返回。
输入和输出坐标没有使用相同的坐标系来表示,这仍然很愚蠢。

Bryco 发表于 2006-4-26 13:07:30

谢谢伙计们。
我有一个小pickpoint函数,可以将点转换为plines elevtion。我刚刚把它从使用当前视口viewdirection(需要保存才能更新)改为使用viewdir setvar。这是一个行为古怪,所以我有一个地狱的时间追查问题。我以为是在twistangle。但现在,它似乎通过输入翻译后的varpick来工作。我还在追查。这是在一个类中,所以有很多情况下,我可以得到混淆的翻译。
Private Function PickPointToPolyElevation() As Variant
'Ax+ By + Cz + d = 0 formula for a plane where d=-oPline.Elevation
'pickpoint is line of sight to a ucs point w/ z=zero
    Dim v, N, Dir
    Dim newV(2) As Double
    Dim dist As Double
    Dim dViewtwist As Double
    Dim dOrigin As Variant
    N = oPline.Normal 'A 3D normal unit vector in WCS. Being a unit vector it's length=1
    v = VarPick
    addpt v, , 8
    Dir = ThisDrawing.GetVariable("viewdir")
    dist = (oPline.Elevation - (v(0) * N(0)) - (v(1) * N(1)) - (v(2) * N(2))) _
                        / ((Dir(0) * N(0)) + (Dir(1) * N(1)) + (Dir(2) * N(2)))
    newV(0) = v(0) + dist * Dir(0)
    newV(1) = v(1) + dist * Dir(1)
    newV(2) = v(2) + dist * Dir(2)
   
    PickPointToPolyElevation = newV
   
   ' dViewtwist = ThisDrawing.GetVariable("Viewtwist")
    'If dViewtwist0 Then
   ' Dim dAng As Double
    'dAng = Tan
    'End If
End Function
现在我想知道entsel函数是否应该总是转换选择点

MickD 发表于 2006-4-26 13:13:27

是的,这让我有点上当了。返回的拾取点始终与当前坐标系相关,因此这意味着在将对象添加到图形数据库时,会使用该点添加对象,从而将对象放置在与wcs相关的点上。
这意味着您必须反转当前的ucs矩阵,并通过它推动该点,以获得在世界cs中的真实位置。
真正有趣的是,当您在不同的坐标系中选取具有不同“z”值的2个点(例如,绘制一条线)并将这些点放在正确的位置时,包括线的法线!
页: [1]
查看完整版本: 从getreal中选择的点