Я использую преобразование в 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, что не является действительно «правило» для балок.
Я экспортировал вычисленные значения трех моих векторов и убедился, что все они имеют единичную длину и ортонормированы, что должно быть всем, что требуется для преобразования. Может ли кто-нибудь объяснить, почему эти базовые значения не работают?