- UID
- 1
- 积分
- 16111
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
发表于 2003-8-28 22:27:50
|
显示全部楼层
Re: [编程申请]:仍然是关于UCS的疑问?
最初由 bucolicwind 发布
[B]我首先用AcDbUCSTableRecord 创建了一个用户坐标系,然后将其添加到AcDbUCSTable中。打算运用acdbSetCurrentUCS全局函数将其设定为当前坐标系,当以AcGeMatics3d类型的矩阵为参数调用上述全局函数时,程序却会生成另... [/B]
你先在ACAD命令行交互输入:
UCS
O
任意选一点
这时,你建立了一个用户坐标系。
然后在命令行输入
UCSMAN
进入对话框后,点“命名UCS”标签,可以看到多出了一个“未命名”的坐标系。
这个就是你上面说的现象,这个是正常的,如果你在UCS命令设置坐标系的时候不用S选项设置名字,那么就显示“未命名”。
回到你的问题,你添加了一个AcDbUCSTable下的UCS(AcDbUCSTableRecord),紧紧是加入到UCS符号表里面,你并没有把他设置为当前的UCS,所以用我你另个帖子里面告诉你的方法,用AcDbSetCurentUcs(mat) 来设置当前的UCS,这个MAT就是和你上面添加AcDbUCSTableRecord时候用到的基点、XDIR、YDIR参数能得到的矩阵。
这个矩阵你可以用下面的函数得到:
- [font=courier]
- void
- XdDbUtils::getUcsToWcsMatrix(AcGeMatrix3d& m,AcGePoint3d orgPt, AcGeVector3d xDir,AcGeVector3d yDir)
- {
- AcGeVector3d zDir = xDir.crossProduct(yDir);
-
- m.setCoordSystem(orgPt, xDir, yDir, zDir);
- }
- [/font]
复制代码
上面给参数UCS原点坐标orgPt, UCS的X方向矢量xDir,UCS的Y方向矢量yDir, 计算UCS到WCS转换矩阵m
用全局函数acdbSetCurentUcs(mat)这个操作,就不用你上面说的那个添加AcDbUCSTableRecord的操作了,这个全局函数就是命令UCS命令设置UCS的底层ARX实现,自动建立AcDbUCSTableRecord并设置当前了。
严格说,acdbSetCurentUcs(mat)还不是UCS命令的底层ARX实现,仅仅是全局函数,ADS级别的,又把添加错AcDbUCSTableRecord和设置当前给包装起来了。 |
|