oknosoft / windowbuilder

Окнософт:Заказ дилера
http://www.oknosoft.ru/zd/
Other
10 stars 19 forks source link

Возврат элемента в массиве периметра и рефакторинг perimeter_inner() #423

Closed admake closed 6 years ago

admake commented 6 years ago

elm не являлся тем, кем кого ожидала вставка по периметру. В своих целях делаю попытку подправить.

admake commented 6 years ago

Я тут подумал, что бесполезные изменения это. Не знаю, если не навредят, то принимайте. Если не интересно - не обижусь.

unpete commented 6 years ago

если не навредят, то принимайте

Там есть замена rib.profile <- rib.elm, но люди в своих формулах могли создать контекст, в котором rib имеет свойство profile

В своих целях делаю попытку подправить

Лучше это сделать в том месте, где вызывается perimeter_inner - вы ведь можете добавить алиасы своим объектам или завернуть в Proxy. Последнее - вообще полезно. Не просто расширяет кругозор, но всю картину мира переворачивает - вы становитесь Богом.

admake commented 6 years ago

Так в том и дело, что вот этот кусок

const perimeter = elm.perimeter ? elm.perimeter : (
  this.insert_type == $p.enm.inserts_types.МоскитнаяСетка
    ? elm.layer.perimeter_inner(row_ins_spec.sz)
    : elm.layer.perimeter
)`

Что значит алиасы в этом контексте?

Proxy это круто, всё ждал момента, где же их применить.

Получается напрямую запрещаем переопределить rib.profile -> rib.elm. Предусмотреть в своем коде (Модификаторе) обращение к .profile из rib проксировав к .elm? Всё-таки, как, не испортив ни чьи ожидания, расширить возможности этого куска?

unpete commented 6 years ago

Внутри perimeter_inner Proxy не нужен - его можно использовать выше, чтобы притвориться элементом. У вас elm и layer какого типа? Ну и вообще, Proxy - это тяжелая артиллерия. Если нужные контексту свойства известны заранее, их проще определить явно, через defineProperty

admake commented 6 years ago

elm просто Object, собранный вот так для контекста вставки:

const elm = {
  _row: {},
  elm: 0,
  clr: clr,
  layer: contour,
};

А вот layer класса Contour

Можно поступить так: Вы примете первый коммит, он привносит только косметические изменения и дополнительно прокидывает elm. Никто ничего не заметит. Логические изменения я сам внесу через модификатор. Осталось придумать как. Вообще я против строго переопределять .profile. С Proxy можно придумать умный get(), который бы отдавал то, что ждут.

unpete commented 6 years ago

По первому коммиту, там где elm: curr.elm - в переменной curr, нет свойства elm - не надо ничего прокидывать. Какая именно вставка и в каком контексте вас беспокоит?

Корректировку угла в +360 сделал. Остальное мне не понятно.

admake commented 6 years ago

Я полез сюда, потому, что хотел научить формулу для Москитки забирать и углы у профилей периметра. И оказалось, что не во всех случаях углы a1 и a2 корректные. Это тянулось от того, что периметр москитки это вовсе не створка, на которой она будет висеть, а то что за ней.

Вот эскиз например:

image

Долгая история. Хотел обойтись малой кровью. Вообще встала потребность дать больше данных для производства 'кривых' москиток.

unpete commented 6 years ago

забирать и углы у профилей периметра

У каждого ребра есть sub_path типа Paper.Path, и расчет угла в точке касания путей не должен вызывать трудностей. Этот PR закрываю, давайте с чистого листа.

admake commented 6 years ago

Принято