明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1680|回复: 8

急:关于坐标系的问题

[复制链接]
发表于 2005-4-8 14:40:00 | 显示全部楼层 |阅读模式
问题如下:



        图形中已经包含一条多段线,但是由于坐标系不同,属性中的显示坐标值和corridates取得的值不同,此时,我要让用户选择一点,然后找到该点和多段线的交点,由于坐标系不同,用户选择点的位置是用户坐标系的值,而据此值画线使用的是wcs,所以找不到和多段线的交点,但是如果wcs和用户坐标系一致,就可以了。应该怎么解决这类问题呢,现在如果坐标的值一致,程序没有问题,可是不一致,一点都干不了。
发表于 2005-4-8 21:42:00 | 显示全部楼层
VBA下获得的点都是WCS下的,没有你说的那种情况
发表于 2005-4-9 23:43:00 | 显示全部楼层
"点和多段线的交点"怎么理解?
 楼主| 发表于 2005-4-21 14:26:00 | 显示全部楼层
点和多段线的交点"怎么理解?


        点在垂直方向上和多断线的交点
发表于 2005-4-21 14:39:00 | 显示全部楼层
这里有统一坐标的程,在1:1000条件下运行,希望对你有帮助。 Sub ()
On Error Resume Next
Dim rotationangle As Double
Dim pt1 As Variant
Dim pt2 As Variant
Dim pt3 As Variant
Dim pt4 As Variant

pt1 = ThisDrawing.Utility.GetPoint(, "请输入第一点:")
pt2 = ThisDrawing.Utility.GetPoint(, "请输入第二点:")
pt3 = ThisDrawing.Utility.GetPoint(, "请选择第一点:")
pt4 = ThisDrawing.Utility.GetPoint(, "请选择第二点:")
Dim SSet As AcadSelectionSet
If Not IsNull(ThisDrawing.SelectionSets.Item("this")) Then
Set SSet = ThisDrawing.SelectionSets.Item("this")
SSet.Delete
End If
Set SSet = ThisDrawing.SelectionSets.Add("this")
SSet.SelectOnScreen
Dim element As AcadEntity
For Each element In SSet
rotationangle = Atn((pt2(1) - pt1(1)) / (pt2(0) - pt1(0))) - Atn((pt4(1) - pt3(1)) / (pt4(0) - pt3(0)))
element.rotate pt3, rotationangle
element.Move pt3, pt1
element.Update
Next
SSet.Delete
End Sub
 楼主| 发表于 2005-4-21 15:50:00 | 显示全部楼层
cqy:对不起,我不太理解rotationangle的作用,能解释一下最后几句话的意义吗。


版主:随心飘荡:你好:有这种情况,getentity中的basepnt的值不是WCS的
发表于 2005-4-21 18:27:00 | 显示全部楼层
[WEB]http://www.vba.cn/object/acad2004/idh_getentity.htm[/WEB]
 楼主| 发表于 2005-4-22 14:11:00 | 显示全部楼层
我在看看,怎么和我印象中的结果不一致,


谢谢随心飘荡
 楼主| 发表于 2005-4-30 14:34:00 | 显示全部楼层
请帮忙看一看代码哪里出现了问题: 要求用户在多段线上选择一点,然后找到该点在垂直方向上和多段线的交点,但是提示找不到交点:在debug状态下。basepnt的值为2230.24,-85;dmxPolyLineObj的Cooridinates的值横坐标在4700以上,纵坐标的值在153左右,所以找不到交点,为什么会发生这种情况。应该怎么解决? ThisDrawing.Utility.GetEntity obj, basePnt, '在多段线上选择一点'
Set dmxPolyLineObj = obj
basePnt = GetIntersectPntWithDmx(basePnt, dmxPolyLineObj)
'函数:GetIntersectPntWithDmx Public Function GetIntersectPntWithDmx(pnt As Variant, PLine As AcadLWPolyline) As Variant
Dim lineobj As AcadLine
Dim pnt1(0 To 2) As Double, pnt2(0 To 2) As Double
Dim intersectVarient As Variant
Dim intersectPnt(0 To 2) As Double



pnt1(0) = pnt(0): pnt1(1) = pnt(1): pnt1(2) = 0:
pnt2(0) = pnt(0): pnt1(1) = pnt(1) - 1: pnt1(2) = 0:
Set lineobj = ThisDrawing.ModelSpace.AddLine(pnt1, pnt2)
intersectVarient = GetIntersectPoint(lineobj, PLine)

intersectPnt(0) = intersectVarient(0): intersectPnt(1) = intersectVarient(1): intersectPnt(2) = intersectVarient(2)
GetIntersectPntWithDmx = intersectPnt
lineobj.Delete
End Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-27 18:00 , Processed in 0.187726 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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