Форум профессиональных мебельщиков PROMEBELclub

Форум профессиональных мебельщиков PROMEBELclub (https://промебельклуб.рф/forum/index.php)
-   Базис-мебельщик. Скрипты (https://промебельклуб.рф/forum/forumdisplay.php?f=273)
-   -   Обсуждение скриптов в Системе Базис (https://промебельклуб.рф/forum/showthread.php?t=13614)

Guamoko 18.06.2018 00:02

Спасибо большое за помощь. Попробовал все 3 варианта. Результат одинаков.
1). Выдает ошибку в строке arguments[0].SetActive();
TypeError: Cannot read properti "SetActive" of undefined at HNap at Function Window1.Hprm.OnValuehange
2) Я поменял arguments[0] и arguments[1] на Mater11 и HNap11 и теперь иоя функция выглядит так:

function HNap(Mater11,Hnap11){

Window1.Mater11.SetActive();

var thick = ActiveMaterial.Thickness;
if(thick == 10){

Window1.Hnap11.Value=Window1.Hprm.Value-99;
Window1.Hnap11.Layout.Top=Window1.Hnap11.Layout.To p;
}
if(thick == 4){

Window1.Hnap11.Value=Window1.Hprm.Value-102;
Window1.Hnap11.Layout.Top=Window1.Hnap11.Layout.To p;
}
}

Window1.Hprm.OnValueChange=function(){
Hdvr(); LVProf(); LChleg();LObVProf();
for (var i = 0; i < mater.length; i++) {
HNap(Window1[mater + i + '1'], Window1[hnap + i + '1']);
}
}
Но при вызове через for срабатывает только Mater11 и HNap11 все 3 варианта. Наверное что то в функции

P.S. Я изначально писал через имена, но что то не получалось, а через
arguments получилось запустить хотя бы перечислением.

Letos 18.06.2018 00:49

Цитата:

Сообщение от Guamoko (Сообщение 458251)
Я поменял arguments[0] и arguments[1] на Mater11 и HNap11
Но при вызове через for срабатывает только Mater11 и HNap11 все 3 варианта.

Нужно использовать не "Window1.Mater11" а просто "Mater11" - параметр, который у вас передаётся в функции (аналог arguments[0]).

Цитата:

Сообщение от Guamoko (Сообщение 458251)
Выдает ошибку в строке arguments[0].SetActive();
TypeError: Cannot read properti "SetActive" of undefined at HNap at Function Window1.Hprm.OnValuehange

Рекомендую тогда для проверки использовать второй способ:
Код:

var mater = [Window1.Mater11, Window1.Mater21, Window1.Mater31];
//исправил регистр буквы n
var hnap = [Window1.Hnap11, Window1.Hnap21, Window1.Hnap31];
Window1.Hprm.OnValueChange = function () {
    for (var i = 0, j = 0; i < mater.length, j < hnap.length; i++ , j++) {
        HNap(mater[i], hnap[j]);
    }
}

Теоретически(!) оно должно работать. Если не работает, то напишите при каком конкретно коде оно не работает, и (маловажно, но не помешает хотя бы номер) версию Базиса .

Guamoko 18.06.2018 01:14

Цитата:

Сообщение от Letos (Сообщение 458253)
Нужно использовать не "Window1.Mater11" а просто "Mater11" - параметр, который у вас передаётся в функции (аналог arguments[0]).



Рекомендую тогда для проверки использовать второй способ:
Код:

var mater = [Window1.Mater11, Window1.Mater21, Window1.Mater31];
//исправил регистр буквы n
var hnap = [Window1.Hnap11, Window1.Hnap21, Window1.Hnap31];
Window1.Hprm.OnValueChange = function () {
    for (var i = 0, j = 0; i < mater.length, j < hnap.length; i++ , j++) {
        HNap(mater[i], hnap[j]);
    }
}

Теоретически(!) оно должно работать. Если не работает, то напишите при каком конкретно коде оно не работает, и (маловажно, но не помешает хотя бы номер) версию Базиса .

Цитата:

Сообщение от Letos (Сообщение 458253)
Нужно использовать не "Window1.Mater11" а просто "Mater11"

Если:
function HNap(Mater11,Hnap11){

Mater11.SetActive();

var thick = ActiveMaterial.Thickness;
if(thick == 10){

Window1.Hnap11.Value=Window1.Hprm.Value-99;
Window1.Hnap11.Layout.Top=Window1.Hnap11.Layout.To p;
}
if(thick == 4){

Window1.Hnap11.Value=Window1.Hprm.Value-102;
Window1.Hnap11.Layout.Top=Window1.Hnap11.Layout.To p;
}
}
ошибка
TypeError: Cannot read properti "SetActive" of undefined at HNap at Function Window1.Hprm.OnValuehange

Если Window1.Mater11.SetActive(); то

Window1.Hprm.OnValueChange=function(){
Hdvr(); LVProf(); LChleg();LObVProf();
for (var i = 0; i < mater.length; i++) {
HNap(Window1[mater + i + '1'], Window1[hnap + i + '1']);
}
}
срабатывает только Mater11 и HNap11.

Цитата:

Сообщение от Letos (Сообщение 458253)
(маловажно, но не помешает хотя бы номер) версию Базиса .

Базис- Мебельщик 10 Демо версия

Добавлено через 7 минут
Цитата:

Сообщение от Guamoko (Сообщение 458254)
Рекомендую тогда для проверки использовать второй способ:
Код:
var mater = [Window1.Mater11, Window1.Mater21, Window1.Mater31];
//исправил регистр буквы n
var hnap = [Window1.Hnap11, Window1.Hnap21, Window1.Hnap31];
Window1.Hprm.OnValueChange = function () {
for (var i = 0, j = 0; i < mater.length, j < hnap.length; i++ , j++) {
HNap(mater[i], hnap[j]);
}
}

Скопировал Ваш код, срабатывает только Mater11, HNap11
и при
Mater11.SetActive();
и при
Window1.Mater11.SetActive();

Guamoko 18.06.2018 03:05

Спасибо большое за помощь и потраченное время. Код заработал, правда после того,
как я вернулся к arguments и учел Ваши поправки в цикле.Если Вам интересно, выглядит он так:
function BNap(Mater11,Bnap11){

arguments[0].SetActive();

var thick = ActiveMaterial.Thickness;
if(thick == 10){
arguments[1].Value=Window1.LGProf.Value+15;
arguments[1].Layout.Top=arguments[1].Layout.Top;
}
if(thick == 4){
arguments[1].Value=Window1.LGProf.Value+11;
arguments[1].Layout.Top=arguments[1].Layout.Top;
}
}
var mater = [Window1.Mater11, Window1.Mater21, Window1.Mater31];
var hnap = [Window1.Hnap11, Window1.Hnap21, Window1.Hnap31];

Window1.Hprm.OnValueChange=function(){
Hdvr(); LVProf(); LChleg();LObVProf();
for (var i = 0; i < mater.length; i++) {
HNap(mater[i], hnap[i]);
}
}
По Вашему совету избавился от лишней j.
Теперь попробую додуматься, как короче записать

var mater = [Window1.Mater11, Window1.Mater12, Window1.Mater13,
Window1.Mater21, Window1.Mater22, Window1.Mater23,
.................................................. ........................ ,
Window1.Mater51, Window1.Mater52, Window1.Mater53];

Максим Геннадьевич 04.07.2018 19:03

Редактировать панель
 
В справочнике есть пример редактирования панели, но панель ставиться фронтально. Если поставить горизонтальную панель то пример не подходит.
Планирую написание концевого модуля кухни с угловой дверкой 30,45 градусов.
Если нужно "срезать" угол нужно строить замкнутый треугольник и вычитать его из панели?
Может есть какие то решения. Или направьте на путь.
Спасибо

Letos 04.07.2018 23:00

Цитата:

Сообщение от Максим Геннадьевич (Сообщение 459003)
Если нужно "срезать" угол нужно строить замкнутый треугольник и вычитать его из панели?

Можно еще нарисовать по линиям уже срезанный контур, но на мой вгляд, вычитание треугольника проще написать и параметризовать. Вот пример создания треугольника и вычитания его из прямоугольного контура панели:
Код:

var p = AddPanel();
var c = p.Contour;
c.Clear();
//добавляем прямоугольник 100х200
c.AddRectangle(0, 0, 100, 200);
// создаём треугольник с координатами {0,0} {50, 0} {0, 100}
var tri = NewContour();
tri.AddLine(0, 0, 50, 0);
tri.AddLine(50, 0, 0, 100);
tri.AddLine(0, 100, 0, 0);
//Вычитаем треугольник
c.Subtraction(tri);


Максим Геннадьевич 05.07.2018 11:51

Цитата:

Сообщение от Letos (Сообщение 459022)
Вот пример создания треугольника и вычитания его из прямоугольного контура панели:

Именно этот пример и использую.
Насчет создания треугольника понял, просто у меня задается длина среза т.е гипотенуза треугольника, ну не беда будем вычислять по формуле устанавливать расположение точек линий.
Но как редактировать горизонтальную панель? Можно конечно создать фронт панель, отредактировать и потом ее повернуть.
И все таки есть ли еще варианты.

Letos 05.07.2018 13:59

Цитата:

Сообщение от Максим Геннадьевич (Сообщение 459075)
Но как редактировать горизонтальную панель? Можно конечно создать фронт панель, отредактировать и потом ее повернуть.
И все таки есть ли еще варианты.

Не совсем понял ваш вопрос. Если вы про редактирование уже существующей панели - то так же, как и фронтальную. А если вы про создание горизонтальной панели, то функция AddPanel() создает панель в ближайшей к текущему виду проекции. Также существуют отдельные функции для создания горизонтальной, фронтальной и вертикальной панелей:
Код:

// фронтальная
AddFrontPanel();
// вертикальная
AddVertPanel();
// горизонтальная
AddHorizPanel();


Максим Геннадьевич 06.07.2018 08:27

Цитата:

Сообщение от Letos (Сообщение 459085)
Также существуют отдельные функции для создания горизонтальной, фронтальной и вертикальной панелей:

Какие ставиться панели я знаю. Все разобрался, спасибо.

Максим Геннадьевич 15.07.2018 16:53

Цитата:

Сообщение от Letos (Сообщение 459022)
Код:

c.Clear();

А есть вариант без Clear(), просто редактировать контур.
Спасибо


Текущее время: 21:21. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
© 2007-2023 PROMEBEL