Изменение значений set_Basis для преобразования в Revit

Я использую преобразование в Revit, чтобы показать виды отдельных балок (с целью детализации). Это работает нормально, пока балка является плоской (идентичные начальное и конечное смещения), но если у меня балка с наклоном, я вынужден «сгладить» конечные точки.

Я попытался определить единичный вектор вдоль фактических начальных / конечных точек и перпендикуляр к этому вектору на плоскости XY, проходящей через определенный «.Origin» преобразования. Затем я использовал простые уравнения для определения нормали к этим двум векторам ... double newx = first.Y * second.Z - first.Z * second.Y; double newy = first.Z * second.X - first.X * second.Z; double newz = first.X * second.Y - first.Y * second.X; двойной vectlong = Math.Sqrt (newx * newx + newy * newy + newz * newz); XYZ normal = новый Autodesk.Revit.DB.XYZ (newx / vectlong, newy / vectlong, newz / vectlong);

Затем я использовал эти три вектора как свои ".set_Basis" 0, 1 и 2.

Этот код работает до тех пор, пока я заставляю начальную и конечную точки балки быть плоскими (что показывает, что сгенерированный «нормальный» действителен), но когда я удаляю код, чтобы сгладить и использовать фактические значения Z конечных точек наклонный луч, программа терпит неудачу, когда я пытаюсь использовать эти значения.

Образец SDK для создания сечения посередине балки (CreateViewSection), похоже, обнаружил ту же проблему, но программист отказался и просто вынуждает программу принимать только балки, которые уже находятся в той же плоскости XY, что не является действительно «правило» для балок.

Я экспортировал вычисленные значения трех моих векторов и убедился, что все они имеют единичную длину и ортонормированы, что должно быть всем, что требуется для преобразования. Может ли кто-нибудь объяснить, почему эти базовые значения не работают?


person KeachyPeen    schedule 22.05.2014    source источник
comment
Обновление: я попытался вручную повернуть вид колонны, чтобы она лежала ровно (это наиболее типичный вид колонны для производителей), и Revit помогает мне, чтобы при повороте вида на 90 градусов вид автоматически возвращался обратно в вертикальное положение (по скрытой причине, которую никто не мог оправдать). Я все же хотел бы сделать вид на балку на скате крыши 4:12 и сделать так, чтобы она была плоской.   -  person KeachyPeen    schedule 08.07.2014


Ответы (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;
                    }
person Kailas Dhage    schedule 23.04.2018