Цитата:
Сообщение от bbb i ko
Поскольку сечение паза можно вручную отредактировать, то возникают варианты .. Копал в сторону чтения контура сечения, получаю его смещение по Х относительно 0 (Contour.Min.X), но вот как далее понять прибавить нужно это значение или отнять (то есть в какую сторону сместить траекторию) ? Допустим для прямоугольной панели имеющей два паза по противолежащим сторонам (если берем одинаковый паз, одинаковое смещение) это полученное значение будет одинаковым, но для одного паза его нужно вычесть, а для другого прибавить.
|
В поисках предыдущего решения писал вариант с преобразованием траектории (спойлер - не получилось применить):
Код
PHP код:
var Panel = Model.Selected.AsPanel;
Result = 0;
var Cnt = Panel.Contour;
for (var i = 0; i < Panel.Cuts.Count; i++) {
/**@type {Contour2D} */
var TCut = Panel.Cuts[i].Trajectory;
if (TCut.Count == 0)
TCut = Panel.Cuts[i].Contour;
/**@type {Contour2D} */
var copy = TCut.MakeCopy();
if (!copy.IsClosedContour()) {
var shift = { x: 0, y: 0 };
if (copy.Min.x > Cnt.Max.x - 0.1)
shift.x -= 0.1;
if (copy.Max.x < Cnt.Min.x + 0.1)
shift.x += 0.1;
if (copy.Min.y > Cnt.Max.y - 0.1)
shift.y -= 0.1;
if (copy.Max.y < Cnt.Min.y + 0.1)
shift.y += 0.1;
copy.Move(shift);
}
if (copy.IsInContour(Cnt)) {
Result += 1
}
}
alert(Result);
[свернуть]
Суть этой идей была в следующем - анализировать положение траектории паза относительно контура и сдвигать саму траекторию внутрь контура. Проблема возникла банальная с пазом на сторону панели - там происходило смещение по одной оси, а по второй точки оставались на границе контура. Я не совсем понял что и куда вам надо смещать, но, думаю, код, где переменная shift меняется, может вам помочь с определением знака.