乐筑天下

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

圆范数

[复制链接]

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-2 19:21:56 | 显示全部楼层 |阅读模式
我知道一个圆在插入时会取当前ucs法线,但我没有&35;039;我不知道,当被添加到块记录时,它也需要正常
我想答案是在使用vba创建任何块之前,将活动ucs设置为world
有点乏味
有更好的主意吗?
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-8-2 19:27:31 | 显示全部楼层
考虑到您使用的当前ucs法线,您应该能够计算wcs项中的法线,这与获取点有时可能会使用不同的ucs绊倒您一样's、 bt记录仅在当前ucs上下文中看到法线,这与wcs非常不同。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-2 19:38:09 | 显示全部楼层
所以我要么把每个物体都设置为法线,要么把世界设为当前,它#039;这可能是一种清洗。米克,这种情况在C中也会发生吗?
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-8-2 20:10:33 | 显示全部楼层
是的,还有ARX
数据库不知道ucs或wcs中法线之间的差异,它's只是一个值,但所有值都存储为'世界#039;因此,当绘制所有内容时,它不会#039;t需要在ucs和#039之间切换;对于在不同ucs中创建的每个对象,如果这有意义的话
无论哪种方式,您都需要计算法线或空间方向,即即使您将ucs设置为“世界”,您仍然需要计算>旋转(&lt);在将圆添加到db之前,在wcs中正常
编辑:阐明所需法线是从世界法线旋转而来的
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-2 21:52:23 | 显示全部楼层
谢谢你的回复,
实际上,如果我将Wcs设为当前值,则正常值很好(0,0,1)
blockref在插入时也会接收ucs法线,因此我正在计算旋转并保持法线不变。数学有点复杂(我可以看到所有内容,但我似乎需要一个矩阵,所以它不值得),所以我认为;我插入它,将法线设置为0,0,1,然后使用ucs矩阵进行变换。It#039;这是一个简单的解决方案,但我不会#039;不要说最好。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-2 22:00:57 | 显示全部楼层
万一有人懂数学。通过将ucs xdir矢量从ucs法线(x和y的叉积)转换为世界法线,然后将新矢量角度与世界x轴进行比较,可以找到旋转。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2007-8-2 22:20:13 | 显示全部楼层
听起来你需要按照你在op中说的做,在wcs中创建块,然后将其变换到所需的位置,这是一个很好的实践,并且保持了原始数学的简单性。如果在插入块时可以获得目标ucs,则很容易-在原点创建块,获取当前ucs(或类似对象)
使用ucs构建矩阵并完成变换块
hth
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-8-3 17:03:29 | 显示全部楼层
好建议,米克
作为插入函数,以下操作很好,但我必须稍后更改插入点(oBref.InsertionPoint=insPt),don'我不知道为什么
[代码0和函数
  1. Function GetActiveUcs() As AcadUCS
  2.     Dim Origin
  3.     Dim Xaxis
  4.     Dim Yaxis
  5.     Dim strNm As String, sUcs As String
  6.     sUcs = ThisDrawing.GetVariable("UCSNAME")
  7.     If sUcs = "" Then
  8.         ' Current UCS is not saved so get the data and save it
  9.         'A ucs is saved when a user makes and saves one or
  10.         ' a user clicks on an isoview button
  11.         With ThisDrawing
  12.             If .GetVariable("WORLDUCS") = 1 Then
  13.                 Xaxis = Zero: Yaxis = Zero
  14.                 Xaxis(0) = 1: Yaxis(1) = 1
  15.                 Set GetActiveUcs = ThisDrawing.UserCoordinateSystems.Add(Zero, Xaxis, Yaxis, "World")
  16.                 Exit Function
  17.             End If
  18.             Origin = .GetVariable("UCSORG")
  19.             Xaxis = .GetVariable("UCSXDIR")
  20.             Yaxis = .GetVariable("UCSYDIR")
  21.             strNm = "Active"
  22.         End With
  23.         Set GetActiveUcs = ThisDrawing.UserCoordinateSystems.Add(Zero, Xaxis, Yaxis, strNm)
  24.         'Changing the origin later stops the error message
  25.         '-2145320930   UCS X axis and Y axis are not perpendicular
  26.         GetActiveUcs.Origin = Origin
  27.         ThisDrawing.ActiveUCS = GetActiveUcs
  28.     Else
  29.         Select Case sUcs
  30.             Case "*TOP*", "TOP"
  31.                 Set GetActiveUcs = SetOrthoUCS("Top")
  32.             Case "*BOTTOM*"
  33.                 Set GetActiveUcs = SetOrthoUCS("Bottom")
  34.             Case "*LEFT*"
  35.                 Set GetActiveUcs = SetOrthoUCS("Left")
  36.             Case "*RIGHT*"
  37.                 Set GetActiveUcs = SetOrthoUCS("Right")
  38.             Case "*FRONT*"
  39.                 Set GetActiveUcs = SetOrthoUCS("Front")
  40.             Case "*BACK*"
  41.                 Set GetActiveUcs = SetOrthoUCS("Back")
  42.             Case Else
  43.                 Set GetActiveUcs = ThisDrawing.ActiveUCS  'current UCS is saved
  44.             End Select
  45.     End If
  46. End Function
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2008-1-2 17:47:44 | 显示全部楼层
嗨,布莱科,我想;d将此线程复活为I'我现在也有同样的问题,我可以#039;我一辈子都不知道他们为什么不#039;t在vba中实现更多的几何类,尤其是矩阵。哦,好吧…
我从上面的函数中得到,如果没有ucs名称,即它是“&引用;我们将得到一个空对象id错误,因此我们必须将当前ucs保存到ucs表中,并从那里获取它,以将对象转换为当前ucs,对吗
还有,你手头有SetOrthoUCS函数吗
谢谢,米克。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-1-2 19:17:00 | 显示全部楼层
同意,米克,C有这么多好的数学
  1. Public Function SetOrthoUCS(Optional strUcs As String = "Top") As AcadUCS
  2.     Dim dOrigin(2) As Double
  3.     Dim dXaxisPnt(2) As Double
  4.     Dim dYaxisPnt(2) As Double
  5.     'all the ucs' will originate from 0,0,0 as per the behavior in acad
  6.     Select Case strUcs
  7.         Case "Top"
  8.             dXaxisPnt(0) = 1: dXaxisPnt(1) = 0: dXaxisPnt(2) = 0
  9.             dYaxisPnt(0) = 0: dYaxisPnt(1) = 1: dYaxisPnt(2) = 0
  10.       
  11.         Case "Bottom"
  12.             dXaxisPnt(0) = -1: dXaxisPnt(1) = 0: dXaxisPnt(2) = 0
  13.             dYaxisPnt(0) = 0: dYaxisPnt(1) = 1: dYaxisPnt(2) = 0
  14.         
  15.         Case "Right"
  16.             dXaxisPnt(0) = 0: dXaxisPnt(1) = 1: dXaxisPnt(2) = 0
  17.             dYaxisPnt(0) = 0: dYaxisPnt(1) = 0: dYaxisPnt(2) = 1
  18.         
  19.    
  20.         Case "Left"
  21.             dXaxisPnt(0) = 0: dXaxisPnt(1) = -1: dXaxisPnt(2) = 0
  22.             dYaxisPnt(0) = 0: dYaxisPnt(1) = 0: dYaxisPnt(2) = 1
  23.         
  24.    
  25.         Case "Front"
  26.             dXaxisPnt(0) = 1: dXaxisPnt(1) = 0: dXaxisPnt(2) = 0
  27.             dYaxisPnt(0) = 0: dYaxisPnt(1) = 0: dYaxisPnt(2) = 1
  28.    
  29.       
  30.         Case "Back"
  31.             dXaxisPnt(0) = -1: dXaxisPnt(1) = 0: dXaxisPnt(2) = 0
  32.             dYaxisPnt(0) = 0: dYaxisPnt(1) = 0: dYaxisPnt(2) = 1
  33.             
  34.         Case Else
  35.             Exit Function
  36.     End Select
  37.     Set SetOrthoUCS = ThisDrawing.UserCoordinateSystems.Add(dOrigin, dXaxisPnt, dYaxisPnt, strUcs)
  38.     ThisDrawing.ActiveUCS = SetOrthoUCS
  39. End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 13:51 , Processed in 0.649597 second(s), 73 queries .

© 2020-2025 乐筑天下

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