Показать сообщение отдельно
Старый 18.12.2019, 14:28   #79
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от bbb i ko Посмотреть сообщение
Поскольку сечение паза можно вручную отредактировать, то возникают варианты .. Копал в сторону чтения контура сечения, получаю его смещение по Х относительно 0 (Contour.Min.X), но вот как далее понять прибавить нужно это значение или отнять (то есть в какую сторону сместить траекторию) ? Допустим для прямоугольной панели имеющей два паза по противолежащим сторонам (если берем одинаковый паз, одинаковое смещение) это полученное значение будет одинаковым, но для одного паза его нужно вычесть, а для другого прибавить.
В поисках предыдущего решения писал вариант с преобразованием траектории (спойлер - не получилось применить):

Код


PHP код:
var Panel Model.Selected.AsPanel;
Result 0;
var 
Cnt Panel.Contour;
for (var 
0Panel.Cuts.Counti++) {
    
/**@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 = { x0y};
        if (
copy.Min.Cnt.Max.0.1)
            
shift.-= 0.1;
        if (
copy.Max.Cnt.Min.0.1)
            
shift.+= 0.1;
        if (
copy.Min.Cnt.Max.0.1)
            
shift.-= 0.1;
        if (
copy.Max.Cnt.Min.0.1)
            
shift.+= 0.1;
        
copy.Move(shift);
    }
    if (
copy.IsInContour(Cnt)) {
        
Result += 1
    
}
}
alert(Result); 
[свернуть]

Суть этой идей была в следующем - анализировать положение траектории паза относительно контура и сдвигать саму траекторию внутрь контура. Проблема возникла банальная с пазом на сторону панели - там происходило смещение по одной оси, а по второй точки оставались на границе контура. Я не совсем понял что и куда вам надо смещать, но, думаю, код, где переменная shift меняется, может вам помочь с определением знака.
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
bbb i ko (18.12.2019)