首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在set_Basis中修改变换的Revit值

在set_Basis中修改变换的Revit值
EN

Stack Overflow用户
提问于 2014-05-22 21:34:39
回答 1查看 663关注 0票数 1

我在Revit中使用变换来显示各个梁的立面视图(用于绘制细节)。只要梁是平坦的(相同的起点和终点偏移),这就可以很好地工作,但如果我有一个倾斜的梁,我就不得不“展平”端点。

我试着沿着实际的起点/终点定义一个单位向量,并在XY平面上定义一个垂直于该向量的向量,该向量穿过定义的变换".Origin“。然后我用简单的方程式定义了这两个向量的法线。double newx = first.Y * second.Z。Z- first.Z *second.Z d.Y;double newy = first.Z *second.Z d.X- first.X *second.Z d.Z;double newz = first.X *second.Z d.Y- first.Y *second.Z d.X;double vectlong = Math.Sqrt(newx * newx + newy * newy + newz * newz);XYZ normal = new Autodesk.Revit.DB.XYZ(newx / vectlong,newy / vectlong,newz / vectlong);

然后我使用这三个向量作为我的".set_Basis“0,1和2。

只要我强制梁的起点和终点是平的(这表明生成的“法线”是有效的),该代码就可以工作,但是当我删除代码以展平并使用倾斜梁端点的实际Z值时,当我尝试使用这些值时,程序就会失败。

通过梁的中间部分(CreateViewSection)生成截面的SDK示例似乎也发现了同样的问题,但是程序员放弃了,只是强制程序只接受已经在同一XY平面上的梁,这并不是梁的真正“规则”。

我导出了三个向量的计算值,并验证了它们都是单位长度和正交,这应该是转换所需的全部内容。

EN

回答 1

Stack Overflow用户

发布于 2018-04-23 13:22:37

请使用此代码设置程序集转换。它将正确地对齐装配原点和轴,以便装配视图始终与XYZ轴对齐!

代码语言:javascript
复制
                    var assyTransform = Transform.Identity;
                    var beamInst = mainElement as FamilyInstance;
                    if( beamInst != null )
                    {
                        assyTransform = beamInst.GetTransform();
                        assyTransform.Origin = ( assyInstance.Location as LocationPoint ).Point;
                    }

                    if ( !assyInstance.GetTransform()
                        .AlmostEqual( assyTransform ) )
                    {
                        assyInstance.SetTransform( assyTransform );
                        return true;
                    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23808452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档