Собственно последовательность действий, я уже описала выше:
Цитата |
---|
Batarejka написал: Прогаммно делается так: 1. Строится точка, в которой будет вставлен 3D фрагмент (например, отверстие) 2. В этой точке создается ЛСК, к которой он будет привязан 3. Вставляется фрагмент 4. Привязывается к построенной ЛСК 5. Вычитается из тела. |
И вот как происходит. В моем меню есть пункт "Вставить КТЭ". Я нажимаю на него и происходит следующий диалог с пользователем:
- Выберите грань для расположения КТЭ - ожидание выбора
- Выберите первую грань для привязки КТЭ - ожидание выбора, после выбора задание расстояния, на котором от этой грани расположен КТЭ
- Выберите вторую грань для привязки КТЭ - аналогично предыдущему пункту
Всё!
И вот как только пользователь это сделал, у меня есть нормали выбранных граней. На моих рисунках есть эти значения. Так вот, получается, что нормаль может быть направлена и внутрь тела (верхняя грань, нормаль 0,0-1). А я хочу, чтобы ось Z создаваемой мной ЛСК для КТЭ была параллельна нормали плоскости привязки, но обязательна направлена вне тела.
По факту задачу можно сформулировать так: Как программно построить ЛСК на плоскости, чтобы ось Z была перпендикулярна ей и направлена вне тела?
Код |
---|
//нормаль и точка на выбранной грани
var pSurf = modelFace.Surface as PlaneSurface;
if (pSurf != null)
{
pt = pSurf.Plane.Origin;
dir = pSurf.Plane.Normal;
}
//точка для ЛСК, координаты для положения вычисляются после выбора всех граней
var nd3D = new CoordinateNode3D(currentDocument)
{
X = otLSK.Geometry.Origin.X*1000,
Y = otLSK.Geometry.Origin.Y*1000,
Z = otLSK.Geometry.Origin.Z*1000
};
//ЛСК для КТЭ
var lks = new PointsLCS(currentDocument)
{
Name = insKTE.LSKname,
Color = 13,
PointToOrigin = nd3D.Geometry.Point
};
//доворот ЛСК
var transformations = lks.Transformations.AddBaseTransfGroup();
transformations.SetLCS(otLSK, false);
transformations.TransfContainer.SourceCSType = TransformationLCSType.CenterOfBoundBox;
transformations.Name = insKTE.Name + "_MoveRotate";
|
и вот тут нужно понять, как перевернуть оси.
Я уже не знаю, как это еще объяснить, если опять не понятно.