找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7070|回复: 24

[求助] 【已解决】修改UCS老是提示非单一的UCS Y轴,啥情况?

[复制链接]
发表于 2016-7-12 20:17:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 taocitc 于 2016-7-12 22:16 编辑

QQ截图20160712200850.png
QQ截图20160712200922.png
生成的图纸老是提示这个,XAxis和YAxis的值应该怎么取?
为什么
acUCSTblRec.Origin = pt1;
acUCSTblRec.XAxis = new Vector3d(1, 0, 0);
acUCSTblRec.YAxis = new Vector3d(0, 1, 0);
这样就没事?
“可以使用 UCSTable 对象的 Add 方法创建新的用户坐标系。这个方法需要输入四个值:原点的坐标、X 轴和 Y 轴上的坐标以及 UCS 的名称”
X轴和Y轴是指世界坐标系的值吗?求高手解答
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-12 20:53:44 | 显示全部楼层
凡是  提到 轴 的,都应该是单位向量,你试下单位向量行吗?

点评

试过了,果然是需要换成单位向量,谢谢  详情 回复 发表于 2016-7-12 22:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-12 22:14:59 | 显示全部楼层
newer 发表于 2016-7-12 20:53
凡是  提到 轴 的,都应该是单位向量,你试下单位向量行吗?

试过了,果然是需要换成单位向量,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-12 22:16:53 | 显示全部楼层
你可以看下系统变量 ucsxdir ,ucsydir的值


  1. 命令: (getvar "ucsxdir")
  2. (1.0 0.0 0.0)
  3. 命令: (getvar "ucsydir")
  4. (0.0 1.0 0.0)
复制代码


是单位向量。

点评

[attachimg]54061[/attachimg] 请问你知道如何把空间任意直线的坐标系做成这种吗?  详情 回复 发表于 2016-7-12 22:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-12 22:27:04 | 显示全部楼层
newer 发表于 2016-7-12 22:16
你可以看下系统变量 ucsxdir ,ucsydir的值

QQ截图20160712222033.png
请问你知道如何把空间任意直线的坐标系做成这种吗?

点评

帮你贴个 和 命令 UCS+V作用一样的C#代码,你参考下如果修改UCS  详情 回复 发表于 2016-7-12 22:39
你用C#吧? 参考下ARX的AcDbUCSTableRecord类方法 设置下 原点、算出X轴,算出Y轴 就应该行了。  详情 回复 发表于 2016-7-12 22:33
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-12 22:33:00 | 显示全部楼层
taocitc 发表于 2016-7-12 22:27
请问你知道如何把空间任意直线的坐标系做成这种吗?

你用C#吧?


参考下ARX的AcDbUCSTableRecord类方法


  1. AcDbUCSTableRecord::setOrigin Function void

  2. setOrigin(

  3. const AcGePoint3d& newOrigin);

  4. newOrigin Input new origin point (in WCS coordinates) for the UCS

  5. Sets the AcDbUCSTableRecord to use newOrigin as the UCS origin point for the UCS it represents. newOrigin must be in WCS coordinates.

  6. The newOrigin value is used for DXF group code 10.



  1. AcDbUCSTableRecord::setXAxis Function void

  2. setXAxis(

  3. const AcGeVector3d& xAxis);

  4. xAxis Input new X axis vector (in WCS coordinates) for the UCS

  5. Sets the AcDbUCSTableRecord to use xAxis as the new X axis for the UCS it represents. xAxis must be in WCS coordinates and must have non-zero in length.

  6. The xAxis value is used for DXF group code 11.



  1. AcDbUCSTableRecord::setYAxis Function void

  2. setYAxis(

  3. const AcGeVector3d& yAxis);

  4. yAxis Input new Y axis vector (in WCS coordinates) for the UCS

  5. Sets the AcDbUCSTableRecord to use yAxis as the new Y axis for the UCS it represents. yAxis must be in WCS coordinates and must be non-zero in length.

  6. The yAxis value is used for DXF group code 12.



设置下 原点、算出X轴,算出Y轴 就应该行了。

点评

看来没有别的办法,只能算x,y轴了,可是x和y轴的坐标算出来应该是一个圆,难道要随便指定一个点当x或是y?  详情 回复 发表于 2016-7-12 22:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-12 22:38:48 | 显示全部楼层

看来没有别的办法,只能算x,y轴了,可是x和y轴的坐标算出来应该是一个圆,难道要随便指定一个点当x或是y?

点评

上面我给你贴的代码里面有向量操作的代码, 下面是两个点减法,得到向量。 比如: Vector3d direction = (view.Target - view.Position); 得到方向向量。再normalize得到单位向量。 你查下Vector3d类下面的方  详情 回复 发表于 2016-7-12 22:44
你得到两个点后,你可以用向量的方法,求向量,在单位化,都有现成的函数。 看下ARX的帮助 AcGeVector3d类下面的方法。 我不用C#,只是给你个提示,语言都是相通的。  详情 回复 发表于 2016-7-12 22:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-12 22:39:08 | 显示全部楼层
taocitc 发表于 2016-7-12 22:27
请问你知道如何把空间任意直线的坐标系做成这种吗?

帮你贴个 和 命令 UCS+V作用一样的C#代码,你参考下如果修改UCS

  1. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2. // Use: Sync UCS with Current view like command UCS V
  3. //
  4. ///////////////////////////////////////////////////////////////////////////////////////////////////
  5. [CommandMethod("UcsV")]
  6. public static void UcsV()
  7. {
  8.     Document doc = Application.DocumentManager.MdiActiveDocument;
  9.     Database db = doc.Database;
  10.     Editor ed = doc.Editor;

  11.     Autodesk.AutoCAD.GraphicsSystem.Manager mng = doc.GraphicsManager;

  12.     short cvport = (short)Application.GetSystemVariable("CVPORT");

  13.     Autodesk.AutoCAD.GraphicsSystem.View view = mng.GetGsView(cvport, true);

  14.     Vector3d direction = (view.Target - view.Position);
  15.     direction = direction.MultiplyBy(1 / direction.Length);

  16.     Vector3d upVector = view.UpVector;
  17.     upVector = upVector.MultiplyBy(1 / upVector.Length);

  18.     Vector3d xAxis = direction.CrossProduct(upVector);

  19.     Matrix3d ucs = Matrix3d.AlignCoordinateSystem(
  20.         new Point3d(0, 0, 0), Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis,
  21.         new Point3d(0, 0, 0), xAxis, upVector, direction);

  22.     ed.CurrentUserCoordinateSystem = ucs;
  23. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-12 22:42:04 | 显示全部楼层
taocitc 发表于 2016-7-12 22:38
看来没有别的办法,只能算x,y轴了,可是x和y轴的坐标算出来应该是一个圆,难道要随便指定一个点当x或是y ...

你得到两个点后,你可以用向量的方法,求向量,在单位化,都有现成的函数。

看下ARX的帮助 AcGeVector3d类下面的方法。

我不用C#,只是给你个提示,语言都是相通的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-12 22:44:48 | 显示全部楼层
taocitc 发表于 2016-7-12 22:38
看来没有别的办法,只能算x,y轴了,可是x和y轴的坐标算出来应该是一个圆,难道要随便指定一个点当x或是y ...

上面我给你贴的代码里面有向量操作的代码, 下面是两个点减法,得到向量。

比如: Vector3d direction = (view.Target - view.Position); 得到方向向量。再normalize得到单位向量。

你查下Vector3d类下面的方法。

点评

我想了下,通过计算得到xy轴太复杂,是不是可以通过旋转任意ucs得到指定方向的ucs?  详情 回复 发表于 2016-7-13 22:23
这段代码我先慢慢消化消化,因为我用的是teigha,有些写法还不太一样,求Z轴,我今天写了一天的方程式……总觉得不对劲,不能这么麻烦  详情 回复 发表于 2016-7-12 22:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2016-7-12 22:45:25 | 显示全部楼层
用 SDK 中的函数去计算轴,否则可能因为浮点误差造成 ACAD 认为不是正交坐标系的坐标轴

点评

嗯。谢谢提醒  详情 回复 发表于 2016-7-12 22:59
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-12 22:54:37 | 显示全部楼层
newer 发表于 2016-7-12 22:44
上面我给你贴的代码里面有向量操作的代码, 下面是两个点减法,得到向量。

比如: Vector3d direction ...

这段代码我先慢慢消化消化,因为我用的是teigha,有些写法还不太一样,求Z轴,我今天写了一天的方程式……总觉得不对劲,不能这么麻烦
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-12 22:59:57 | 显示全部楼层
st788796 发表于 2016-7-12 22:45
用 SDK 中的函数去计算轴,否则可能因为浮点误差造成 ACAD 认为不是正交坐标系的坐标轴

嗯。谢谢提醒
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-13 22:23:24 | 显示全部楼层
newer 发表于 2016-7-12 22:44
上面我给你贴的代码里面有向量操作的代码, 下面是两个点减法,得到向量。

比如: Vector3d direction ...

我想了下,通过计算得到xy轴太复杂,是不是可以通过旋转任意ucs得到指定方向的ucs?

点评

怎么会复杂呢? 轴上两点你不好求吗?  详情 回复 发表于 2016-7-13 22:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-7-13 22:38:13 | 显示全部楼层
taocitc 发表于 2016-7-13 22:23
我想了下,通过计算得到xy轴太复杂,是不是可以通过旋转任意ucs得到指定方向的ucs?

怎么会复杂呢? 轴上两点你不好求吗?

点评

昨天你贴的代码没看明白 我想做的是空间任意两点创建实体,需要用到这两点在ucs的z轴,现在已知的就是这任意两点,想不明白怎么求  详情 回复 发表于 2016-7-13 22:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-18 23:08 , Processed in 0.475776 second(s), 58 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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