【问题标题】:Modifying set_Basis values for a transform in Revit在 Revit 中修改变换的 set_Basis 值
【发布时间】:2014-07-11 14:05:13
【问题描述】:

我在 Revit 中使用变换来显示单个梁的立面视图(用于详细说明)。只要梁是平的(相同的开始和结束偏移),这工作正常,但如果我有一个倾斜的梁,我不得不“压平”端点。

我试图沿着实际的起点/终点定义一个单位向量,并在穿过定义的变换“.Origin”的 XY 平面上垂直于该向量。然后我使用简单的方程来定义这两个向量的法线...... 双newx = first.Y * second.Z - first.Z * second.Y; 双newy = first.Z * second.X - first.X * second.Z; 双newz = first.X * second.Y - first.Y * second.X; 双 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 值时斜梁的端点,当我尝试使用这些值时程序会失败。

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

我导出了我的三个向量的计算值,并验证它们都是单位长度和正交,这应该是变换所需的全部。谁能解释为什么这些基础值会失败?

【问题讨论】:

  • 更新:我尝试手动旋转柱子的视图,使其平放(这是制造商最典型的柱子视图),Revit“帮助”我,这样当我将视图旋转 90 度,视图会自动恢复为垂直状态(出于一个没人能证明的隐藏原因)。我仍然想在 4:12 的屋顶坡度上查看横梁并将其显示为平坦的。

标签: c# revit-api


【解决方案1】:

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

                    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;
                    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 2016-10-24
    • 2020-06-21
    • 2017-06-26
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多