从getreal中选择的点
**** Hidden Message ***** 谢谢Keith但是如果我必须翻译这一点(绿点有效),我想我得到的是Ucs点而不是Wcs点。
这确实让人困惑。 不,你得到的是一个WCS点,但是放置的对象将插入点解释为一个UCS点。
这只是与AutoCAD编程的另一个不一致之处。试试这个例子...
设置一个非WCS的UCS并获取任意点。那将是WCS。采用WCS点并将其应用到新的(或编辑的)实体,您提供的点将被解释为相对于UCS,而不是WCS。然而,一旦创建了对象,您将发现对象的插入点不再与WCS点匹配,因为先前的点将在读取实体时自动转换为WCS。
简而言之,当修改或创建插入点时,您必须使用UCS点,但是当您从对象中读取该插入点时,它将被读取为WCS,因此转换函数 啊哈!实际上是GetEntity的文档出错了。它不返回WCS坐标中的点。它以UCS坐标返回。
输入和输出坐标没有使用相同的坐标系来表示,这仍然很愚蠢。 谢谢伙计们。
我有一个小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函数是否应该总是转换选择点 是的,这让我有点上当了。返回的拾取点始终与当前坐标系相关,因此这意味着在将对象添加到图形数据库时,会使用该点添加对象,从而将对象放置在与wcs相关的点上。
这意味着您必须反转当前的ucs矩阵,并通过它推动该点,以获得在世界cs中的真实位置。
真正有趣的是,当您在不同的坐标系中选取具有不同“z”值的2个点(例如,绘制一条线)并将这些点放在正确的位置时,包括线的法线!
页:
[1]