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

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

AlexBolton 14.09.2019 00:17

БАЗИС 11-2024 - Скрипты
 
Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 11 в этой теме.

Новшества Базис Мебельщик версии 11:
.....
6. Работоспособность скриптов, созданных в более ранних версиях, не гарантируется в версии БАЗИС 11.
.....
52. Разработана панель инструментов для скриптов, на которую можно вывести, например, часто используемые скрипты, со своими иконками, хинтами и т.д.
53. Добавлена возможность автозапуска выбранного скрипта на любое из двух событий – Загрузка модели, и/или Сохранение модели.
.....

Новшества Базис Мебельщик версии 2021:

16. Отладчик скриптов.

Новшества Базис Мебельщик версии 2024:

5.«Использовать новый движок скриптов (в бета-тесте)» - Node.js v20.2.0

https://files.catbox.moe/o5vr9e.png

[youtube]dThvA0BjKZ0[/youtube] [youtube]5D66vo3AeWg[/youtube]

VISUAL CODE
[youtube]8Ak-BFBlrjs[/youtube] [youtube]wCgG-5uUkIU[/youtube]
Код:

Примеры скриптов из видео

Вес панелей.js
Выделить панели без облицовки.js
Панель по 3 точкам.js
Прифуговка кромки.js

node.js обновился с 7.0.0 до 8.11.3

Напиши себе Базис или Моя первая тумбочка 2
Комплект - руководство+ файлы+ скрипт

IStiv 16.09.2019 18:42

:(эм...а по API изменений нет?

IStiv 13.10.2019 18:11

Цитата:

Сообщение от Letos (Сообщение 484053)
В 11 версии заработали асинхронные функции


1. так изменения в API все же есть? где найти список?
2. т.е. теперь можно HTTP GET запрос какой нибудь сделать из скрипта?
это же же отлично. *THUMBS UP*

Letos 14.10.2019 09:55

Цитата:

Сообщение от IStiv (Сообщение 484100)
1. так изменения в API все же есть? где найти список?
2. т.е. теперь можно HTTP GET запрос какой нибудь сделать из скрипта?
это же же отлично. *THUMBS UP*

1. Ну само API не менялось (это из коробки в node.js работает, просто к БМ это прикрутили наконец).
2. Да. И модули асинхронные также должны заработать. Только асинхронность работает пока скрипт жив, соответственно нужно Action.Continue() вызывать.

AlexBolton 14.10.2019 10:06

Цитата:

Сообщение от IStiv (Сообщение 484100)
где найти список?

Цитата:

Сообщение от Letos (Сообщение 484112)
это из коробки в node.js работает

8.11.3 прикрутили, IStiv можно почитать ченжлог node.js от 7.0.0 (в БМ 10 был) ->8.xx.x

IStiv 15.10.2019 18:03

Цитата:

Сообщение от AlexBolton (Сообщение 484116)
8.11.3 прикрутили, IStiv можно почитать ченжлог node.js от 7.0.0 (в БМ 10 был) ->8.xx.x

- в 7 node не было асинхронных вызовов? я так понял это на стороне БМ был проблемс..

прикрутили новую Node, асинхронность ) а где в описании нововведений в БАЗИС Мебельщик это написано ? Ткните пожалуйста, может есть документ какой от Базиса.

AlexBolton 15.10.2019 20:16

Цитата:

Сообщение от IStiv (Сообщение 484166)
может есть документ какой от Базиса.

кроме Script.pdf в папке Manual не видал ничего, может кто из инсайдеров просветит.
Раньше на github можно было глянуть кое-что.
-
Глобально, для общего ознакомления ченжлог node.js 8.x в интернете посмотрите на профильных ресурсах.

wizardpnz 19.10.2019 09:37

подскажите как теперь подключаться к firebird

var options = {};
options.host = '127.0.0.1';
options.port = 14357;
options.database = "D:\baza.fdb";
options.user = 'SYSDBA';
options.password = 'masterkey';
options.lowercase_keys = false; // set to true to lowercase keys
options.role = null; // default
options.pageSize = 4096; // default when creating database
var Firebird = require('node-firebird');



Firebird.attach(options, function(err, db) {
if (err)
throw err;

db.query('SELECT * FROM MATERIAL', function(err, result) {
db.detach();
});

});


не работает

https://developer.mozilla.org/ru/doc...bjects/Boolean

жесть они отключили стандартную функцию Boolean
в 10 работает в 11 нет)))

пришлось вставить костыль в node-firebird, хз насколько правильно я понял работу Boolean

function Boolean(obj){ return !!obj }


excelljs тоже не пашет

Letos 21.10.2019 10:14

Цитата:

Сообщение от wizardpnz (Сообщение 484334)
подскажите как теперь подключаться к firebird

var options = {};
options.host = '127.0.0.1';
options.port = 14357;
options.database = "D:\baza.fdb";
options.user = 'SYSDBA';
options.password = 'masterkey';
options.lowercase_keys = false; // set to true to lowercase keys
options.role = null; // default
options.pageSize = 4096; // default when creating database
var Firebird = require('node-firebird');



Firebird.attach(options, function(err, db) {
if (err)
throw err;

db.query('SELECT * FROM MATERIAL', function(err, result) {
db.detach();
});

});


не работает

https://developer.mozilla.org/ru/doc...bjects/Boolean

жесть они отключили стандартную функцию Boolean
в 10 работает в 11 нет)))

пришлось вставить костыль в node-firebird, хз насколько правильно я понял работу Boolean

function Boolean(obj){ return !!obj }


excelljs тоже не пашет

1. При работе с базой используете продолжение скрипта Action.Continue()? Если нет, то проблема, скорее всего, в этом. В 11 БМ реализовали корректную работу асинхронных функций и теперь они не вешают БМ. Здесь я описывал "особенности" работы асинхронных функций в БМ10, в БМ 11 теперь иначе: БМ теперь не ждёт завершения асинхронной функции, а выполняется дальше и если скрипт завершается по окончании кода (без Action.Continue()), то результат асинхронной функции может не вызваться, если асинхронная функция не закончила выполнение.

2. Посмотрел стандартные типы - Boolean действительно объект, а не функция. Остальные типы (Number, Object, Array, Error, Function, Date) вроде функции-конструкторы. Погуглил информацию - нигде нет упоминания того, что Boolean - объект, а не функция-конструктор, так что это, скорее всего, проблема БМ.

3. А в exceljs какая ошибка? Поможет ли переустановка модуля?

wizardpnz 21.10.2019 14:11

там много букв сейчас курю excell4node вроде работает

теперь вопрос как подключить visual studio code к Б11

Letos 21.10.2019 14:35

Цитата:

Сообщение от wizardpnz (Сообщение 484489)
там много букв сейчас курю excell4node вроде работает

теперь вопрос как подключить visual studio code к Б11

Отладчик к БМ11 ещё не завезли. С новой версией ноды новый протокол отладки появился. Вот такая конфигурация подключается к базису

Скрытый текст


PHP код:

 {
            
"type""node",
            
"request""launch",
            
"name""Bazis 11"
            
"runtimeExecutable""D:\\Bazis\\Bazis.exe",
            
"runtimeArgs": [
                
"--inspect-brk=5858",
            ],
            
"port"5858,
            
"cwd""C:\\",
            
"program""${file}"
        


[свернуть]

Где
  • "runtimeExecutable" - путь к БМ,
  • "cwd" - "текущая рабочая директория", в параметры запуска передаётся путь к скрипту относительно этой папки. В моём случае это другой диск, чтобы передавался полный путь скрипта, ибо он лежит на диске D. Возможно, подойдёт путь к папке скриптов.
  • "runtimeArgs" - дополнительные аргументы запуска. "--inspect-brk" - запуск отладки с остановкой на первой строке скрипта (для ожидания подключения, если точку останова не ставить, то в VSCode не остановится на первой строке), 5858 - порт отладки, продублирован в одноимённом параметре.

НО: При отладке скрипта в уже запущенном базисе у меня произошло следующее - скрипт остановился на первой точке останова (на первой же строке), через пару мгновений забил на нёё и продолжил выполнение. Через раз сыпятся аксессы.
Если запускать с выключенным БМ (то есть, VSCode запускает БМ и при завершении/отмене скрипта грохает процесс БМ), то всё нормально.

wizardpnz 21.10.2019 15:34

Model.forEach(function (obj) {

if (obj instanceof TFastener) console.log(obj.Name)

});

зависает если много предметов на сцене, или много нельзя в консоль посылать?

Добавлено через 15 минут
[INSPECTOR_ASYNC_STACK_TRACES_NOT_AVAILABLE] Warning: Warning: Async stack traces in debugger are not available on 32bit platforms. The feature is disabled.

ругается(((

Letos 21.10.2019 15:45

Цитата:

Сообщение от wizardpnz (Сообщение 484496)
Model.forEach(function (obj) {

if (obj instanceof TFastener) console.log(obj.Name)

});

зависает если много предметов на сцене, или много нельзя в консоль посылать?

Консоль, по сути своей, - буфер. Поэтому, возможно, она переполняется и из-за этого зависает. Попробуйте так:
PHP код:

var log '';
Model.forEach(function (obj) {
    if (
obj instanceof TFastener
        
log += obj.Name '\n';
});
console.log(log); 

PS. Скорее всего так же будет зависать, поэтому вместо console.log можно добавить следующий изврат (В конце выполнения скрипта запускается асинхронный вывод: при записи в консоль идёт следующая итерация таймера и в это время в лог выводится сообщение и буфер консоли очищается. Но это Костыль с большой буквы.):
PHP код:

Action.Continue();
var 
splittedlog log.split('\n');
var 
0;
var 
inter = require('timers').setInterval(()=>{
    
console.log(splittedlog[i]);
    
i++;
    if (
i>= splittedlog.length){
        require(
'timers').clearInterval(inter);
        
Action.Finish();
    }
}, 
1); 


wizardpnz 21.10.2019 16:56

блин а ведь люди скрипты за деньги заказывают теперь все заглючит у многих

я как бы сам писал на работе за ЗП, а теперь опять время тратить, а шефу платить

wizardpnz 23.10.2019 09:07

Вложений: 1
Код HTML:

var Excel = require('exceljs');
var workbook = new Excel.Workbook();
var ws = workbook.addWorksheet('Распиловка');
ws.getCell("A1").value = 123;
workbook.xlsx.writeFile(process.env.USERPROFILE
                + "/Desktop/"
                + Action.Control.Article.Name
                + ".xlsx").then(function() {});

как заставить работать этот код? В Б10 работает.

Letos 23.10.2019 10:01

Цитата:

Сообщение от wizardpnz (Сообщение 484582)
Код HTML:

var Excel = require('exceljs');
var workbook = new Excel.Workbook();
var ws = workbook.addWorksheet('Распиловка');
ws.getCell("A1").value = 123;
workbook.xlsx.writeFile(process.env.USERPROFILE
                + "/Desktop/"
                + Action.Control.Article.Name
                + ".xlsx").then(function() {});

как заставить работать этот код? В Б10 работает.

Та же проблема с Boolean. Я в начале скрипта добавил
Код:

Boolean = function(val){
        return !!val;
    }

и заработало без ошибок. Файл экселя оказался битым из-за незавершённого промиса, поэтому я модифицировал последние строки так:
PHP код:

Action.Continue();
workbook.xlsx.writeFile(process.env.USERPROFILE
                
"/Desktop/"
                
Action.Control.Article.Name
                
".xlsx").then(function() {
                    
Action.Finish();
                }); 

И у меня всё заработало.

wizardpnz 23.10.2019 10:06

фуууууууух заработало

ещё при отладке нельзя много писать в консольлог, иначе виснет

Vogel 26.10.2019 11:54

Коллеги, здравствуйте.
Подскажите участок кода, который позволяет выбрать плоскость панели и поместить на нее фрагмент из внешнего файла, который будет подогнан под габариты этой плоскости. Как бы облицевать плоскость фрагментом.

Еще интересует вывод имени "Типа" блока, к которому принадлежит выделяемая панель с плоскостью. Как до него добраться через скрипт?

IStiv 27.10.2019 17:00

синхронные вызовы
 
всем привет.
A синхронные функции не могли же сломаться в БМ 11 или могли?:(

тестирую на простом случае, всякие fs.writeFileSync() все вроде норм, но на реальном скрипте с большой логикой тот же fs.writeFileSync() не отрабатывает .
Однако если идти отладчиком, пошагово , я так понимаю вызовы "успевают" выполняться и fs.writeFileSync() отрабатывает.

Скрытый текст


PHP код:

var pth = require('path');
var 
fs = require('fs');

checkFileExistsAndWrite("D:\\""test.txt""hi");


function 
checkFileExistsAndWrite(targetDirectoryfileNamestr) {
  var 
absolutNameAndPt pth.join(targetDirectoryfileName);

  var 
isExists fs.existsSync(absolutNameAndPt);
  var 
flVersion 0;

  if (
isExists) {
    
flVersion++;
    
fileName flVersion "_" fileName;
    
checkFileExistsAndWrite(targetDirectoryfileName);
  }
  else {
    
fs.writeFileSync(absolutNameAndPtstr);
  }


[свернуть]


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

Сообщение от Vogel (Сообщение 484885)
Еще интересует вывод имени "Типа" блока, к которому принадлежит выделяемая панель с плоскостью. Как до него добраться через скрипт?

не уверен что верно понял вопрос.
все объекты выше в дереве модели можно получить через .Owner

Скрытый текст


PHP код:

var pn GetPanel();
var 
pnOwner pn.Owner;

if (
pnOwner instanceof TFurnBlock) {
  
alert("Hi I am BM block, my name is - " pnOwner.Name);


[свернуть]

Vogel 28.10.2019 07:39

Цитата:

Сообщение от IStiv (Сообщение 484981)
всем привет.
A синхронные функции не могли же сломаться в БМ 11 или могли?:(

тестирую на простом случае, всякие fs.writeFileSync() все вроде норм, но на реальном скрипте с большой логикой тот же fs.writeFileSync() не отрабатывает .
Однако если идти отладчиком, пошагово , я так понимаю вызовы "успевают" выполняться и fs.writeFileSync() отрабатывает.

Скрытый текст


PHP код:

var pth = require('path');
var 
fs = require('fs');

checkFileExistsAndWrite("D:\\""test.txt""hi");


function 
checkFileExistsAndWrite(targetDirectoryfileNamestr) {
  var 
absolutNameAndPt pth.join(targetDirectoryfileName);

  var 
isExists fs.existsSync(absolutNameAndPt);
  var 
flVersion 0;

  if (
isExists) {
    
flVersion++;
    
fileName flVersion "_" fileName;
    
checkFileExistsAndWrite(targetDirectoryfileName);
  }
  else {
    
fs.writeFileSync(absolutNameAndPtstr);
  }


[свернуть]


Добавлено через 25 минут

не уверен что верно понял вопрос.
все объекты выше в дереве модели можно получить через .Owner

Скрытый текст


PHP код:

var pn GetPanel();
var 
pnOwner pn.Owner;

if (
pnOwner instanceof TFurnBlock) {
  
alert("Hi I am BM block, my name is - " pnOwner.Name);


[свернуть]

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

Сообщение от Vogel (Сообщение 484993)
не уверен что верно понял вопрос.
все объекты выше в дереве модели можно получить через .Owner

Я имею ввиду Свойсво Блока, которое пользователь задает самостоятельно для Фрагментов. По нему еще происходит корректная замена одного блока на другой.

Letos 28.10.2019 09:44

Цитата:

Сообщение от Vogel (Сообщение 484993)
Я имею ввиду Свойсво Блока, которое пользователь задает самостоятельно для Фрагментов. По нему еще происходит корректная замена одного блока на другой.

Это свойство FurnType у блока

Letos 28.10.2019 10:04

Цитата:

Сообщение от IStiv (Сообщение 484981)
всем привет.
A синхронные функции не могли же сломаться в БМ 11 или могли?:(

тестирую на простом случае, всякие fs.writeFileSync() все вроде норм, но на реальном скрипте с большой логикой тот же fs.writeFileSync() не отрабатывает .
Однако если идти отладчиком, пошагово , я так понимаю вызовы "успевают" выполняться и fs.writeFileSync() отрабатывает.

Скрытый текст


PHP код:

var pth = require('path');
var 
fs = require('fs');

checkFileExistsAndWrite("D:\\""test.txt""hi");


function 
checkFileExistsAndWrite(targetDirectoryfileNamestr) {
  var 
absolutNameAndPt pth.join(targetDirectoryfileName);

  var 
isExists fs.existsSync(absolutNameAndPt);
  var 
flVersion 0;

  if (
isExists) {
    
flVersion++;
    
fileName flVersion "_" fileName;
    
checkFileExistsAndWrite(targetDirectoryfileName);
  }
  else {
    
fs.writeFileSync(absolutNameAndPtstr);
  }


[свернуть]

У меня нормально запустилось, в первый раз создал файл test.txt, во второй 1_test.txt, в третий - 1_1_test.txt.
Одно серьёзное замечание: в рекурсивном вызове функции вы не передаёте строку записи, поэтому во всех файлах кроме test.txt пишется undefined.

З.Ы. Перечитал ещё раз сообщение - у вас приведённый скрипт тоже нормально отрабатывает, и только на "боевом" скрипте нет?
Может объём данных большой?
Попробуйте запустить ваш реальный скрипт , но в файл писать маленькие строки, изменится ли что?
После выполнения скрипта, лог какие-нибудь ошибки выдаёт?
Я так понимаю, в 10 версии всё нормально работает?

IStiv 28.10.2019 18:48

Цитата:

Сообщение от Letos (Сообщение 485000)
З.Ы. Перечитал ещё раз сообщение - у вас приведённый скрипт тоже нормально отрабатывает, и только на "боевом" скрипте нет?
Может объём данных большой?
Попробуйте запустить ваш реальный скрипт , но в файл писать маленькие строки, изменится ли что?
После выполнения скрипта, лог какие-нибудь ошибки выдаёт?
Я так понимаю, в 10 версии всё нормально работает?

1. это для примера, тут все ок. на боевом не работает(.
2. объем данных..ну 20строк ,вроде не от этого зависит.
3. лог пустой , падает где то в дебрях 'fs'.
4. На 10 норм было, поставил 11 перестало работать, снес - не помогло.
в какую сторону смотреть, как то не понятно.
Еще момент. паралельно стоит node.js v10.15.3 (и ранее стояла) может это как то влияет.

p.s. мне кстати не понятно, как скрипт определяет на каком движке выполняться в какой момент это происходит.

Letos 29.10.2019 09:12

Цитата:

Сообщение от IStiv (Сообщение 485093)
1. это для примера, тут все ок. на боевом не работает(.
2. объем данных..ну 20строк ,вроде не от этого зависит.
3. лог пустой , падает где то в дебрях 'fs'.
4. На 10 норм было, поставил 11 перестало работать, снес - не помогло.
в какую сторону смотреть, как то не понятно.
Еще момент. паралельно стоит node.js v10.15.3 (и ранее стояла) может это как то влияет.

p.s. мне кстати не понятно, как скрипт определяет на каком движке выполняться в какой момент это происходит.

У базиса свой nodejs (node.dll) и к установленным на компе nodejs он не имеет отношения и не взаимодействует с ними.

Цитата:

падает где то в дебрях 'fs'
Попробуйте отладить по конфигурации из этого поста - укажет, где падает?

З.Ы. Ещё возможная проблема - функция Boolean, которая может где-то в скрипте использоваться, но в 11 версии она является объектом. Попробуйте в начало скрипта добавить
PHP код:

Boolean = function(val){
        return !!
val;
    } 

может, поможет.

t01849 02.11.2019 13:14

Всем привет. Как скриптом в 3D реализовать: выделить ребро, затем скрипт наносит размер этого ребра на видимую плоскость панели вдоль этого ребра в пару миллиметрах от него? Голову уже сломал, не получается...

Letos 05.11.2019 10:53

Цитата:

Сообщение от t01849 (Сообщение 485466)
Всем привет. Как скриптом в 3D реализовать: выделить ребро, затем скрипт наносит размер этого ребра на видимую плоскость панели вдоль этого ребра в пару миллиметрах от него? Голову уже сломал, не получается...

Опытным путём удалось получить следующий код:
PHP код:

var edge GetEdge('Выделите ребро', {
    
x0,
    
y0,
    
z0
);
var 
size AddSize(edge.GFirstedge.GLast, {
    
x: (edge.First.edge.Last.x) / 2,
    
y: (edge.First.edge.Last.y) / 2,
    
z: (edge.First.edge.Last.z) / 2
}); 


Uncle 05.11.2019 11:11

Цитата:

Сообщение от t01849 (Сообщение 485466)
Как скриптом в 3D реализовать: выделить ребро

Не совсем понял - как в 3D выделить ребро? Можно на картинках показать как этот скрипт работает?

seserg 05.11.2019 11:29

на форме не работают выпадающие списки http://prntscr.com/psm4pc заданные .ComboItems . никто не сталкивался с этим?

Letos 05.11.2019 15:22

Цитата:

Сообщение от seserg (Сообщение 485643)
на форме не работают выпадающие списки http://prntscr.com/psm4pc заданные .ComboItems . никто не сталкивался с этим?

Посмотрел, действительно не работают (на панели свойств тоже). Есть обходной костыль:
PHP код:

//вместо combo.ComboItems = ['213', '432'];
combo.ComboItems.Clear();
combo.ComboItems.Add('213');
combo.ComboItems.Add('432'); 


seserg 05.11.2019 16:26

теперь значение чекбокса в форме нужно писать без кавычек http://prntscr.com/psqwzx

Letos 05.11.2019 16:49

Цитата:

Сообщение от seserg (Сообщение 485689)
теперь значение чекбокса в форме нужно писать без кавычек http://prntscr.com/psqwzx

Странно, всю жизнь без кавычек писал. А когда у вас надо было с кавычками писать?

seserg 05.11.2019 17:21

Цитата:

Сообщение от Letos (Сообщение 485690)
Странно, всю жизнь без кавычек писал. А когда у вас надо было с кавычками писать?

10 базис при построении формы так записывал. Теперь сам удивляюсь, что все работало без ошибок.

t01849 06.11.2019 09:42

Цитата:

Сообщение от Letos (Сообщение 485639)
Опытным путём удалось получить следующий код:
PHP код:

var edge GetEdge('Выделите ребро', {
    
x0,
    
y0,
    
z0
);
var 
size AddSize(edge.GFirstedge.GLast, {
    
x: (edge.First.edge.Last.x) / 2,
    
y: (edge.First.edge.Last.y) / 2,
    
z: (edge.First.edge.Last.z) / 2
}); 


Есть где то информация по AddSize? И можно ли размер без стрелок ставить? Заранее спасибо!

Letos 06.11.2019 11:54

Цитата:

Сообщение от t01849 (Сообщение 485723)
Есть где то информация по AddSize? И можно ли размер без стрелок ставить? Заранее спасибо!

1. Информации по функции AddSize кроме автодополнения нигде нет. Для неё указываются точка начала, точка конца и точка "верхняя". Как я понял, "верхняя" точка нужна для определения поворота размера в пространстве.
2. По коду не нашёл ничего похожего на настройку "со стрелками или без", не знаю, есть ли вообще возможность убрать стрелки у размера.

t01849 08.11.2019 12:55

Всем привет. Может кто знает, как скриптом выделить несколько панелей(может и больше) и подсчитать их площадь. Пробовал через for, не получается. Спасибо.

Letos 08.11.2019 14:35

Цитата:

Сообщение от t01849 (Сообщение 485943)
Всем привет. Может кто знает, как скриптом выделить несколько панелей(может и больше) и подсчитать их площадь. Пробовал через for, не получается. Спасибо.

1. Смотря как вам выделить надо - если пользователь выделяет нужные панели, а потом запускает скрипт, то тут всё просто: надо лишь пройтись по выделенным панелям.
PHP код:

for (var 0Model.SelectionCounti++){
  
// Выделенный объект за номером i
  
var sel Model.Selections[i];
  
// Дальше действия с выделенным объектом.


Если скрипт сам должен выделить панели - то по какому алгоритму?

2. Подсчёт площади - серьёзная вещь. Простой способ - перемножить ширину на длину, например

Выдать площадь выделенной панели в метрах квадратных


PHP код:

var Model.Selected.AsPanel;
var 
panelS p.Contour.Width p.Contour.Height 0.000001;
alert(panelS ' m2'); 

[свернуть]


Способ сложнее - считать площадь по элементам контура. Этого пока вроде никто не делал.

t01849 08.11.2019 14:45

после запуска скрипта - форма(не модальная) с кнопкой "вычислить"(это сам сделаю), выделяю панели(какие необходимы для просчёта), нажимаю кнопку, алерт - площадь...(тоже сам). Не получается у меня что то.

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

Сообщение от t01849 (Сообщение 485948)
после запуска скрипта - форма(не модальная) с кнопкой "вычислить"(это сам сделаю), выделяю панели(какие необходимы для просчёта), нажимаю кнопку, алерт - площадь...(тоже сам). Не получается у меня что то.

Не могу сделать выделение нескольких панелей, затем суммировать их площади

Vaseok23 08.11.2019 15:28

в 10-тке работал, в 11 выдает кучу ошибок
 
подскажите в чем может быть дело

Скрытый текст


FileOptions = 'blum Box.xml';
MakeProperties();
NewBtn = NewButtonInput('APLICA');
NewBtn.OnChange = function() {
Action.Commit();
Action.OnFinish = function() {
Action.Properties.Save(FileOptions);

}
Action.Finish();
}

Action.Properties.Load(FileOptions);
function MakeProperties() {

Prop = Action.Properties;
Tip = Prop.NewCombo('Tip Box', 'TandemBox plus\nTandembox Antaro\nLegrabox')
T = Prop.NewImage('TandemBOX', 'Antaro.png')
L = Prop.NewImage('Legrabox', 'Legrabox.png')
Num = Prop.NewNumber('Numar Sertare',1)
HSertar = Prop.NewCombo('H-Sertar', 'M\nB-C\nF');
Spate = Prop.NewCombo('Tip Spate', 'PAL\nMetal')
Adancime = Prop.NewNumber('Adancime',500);
Material = Prop.NewMaterial('Material');
Cant = Prop.NewButt('Cant');




OkBtn = Prop.NewButton('Executa');
//Обработка нажатия на кнопку Построить
OkBtn.OnClick = function() {

Action.OnFinish = function() {
Action.Properties.Save(FileOptions);
}
Action.Finish();
}
Prop.OnChange = function(){
Make()}

}

SetCamera(p3dFront);
LeftPanel = GetPanel('Укажите левую панель');
RightPanel = GetPanel('Укажите правую панель');
Left = LeftPanel.GabMax.x;
Right = RightPanel.GabMin.x;
Top = GetEdge('Укажите верхнюю границу', AxisX).First.y;
Bottom = GetEdge('Укажите нижнюю границу', AxisX).First.y;

SetCamera(p3dLeft);
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;

Make()
function Make(){
T.Visible = true
L.Visible = true
DeleteNewObjects()
if (Tip.ItemIndex ==1){
NL = 24
LWspt = 87
Lwfund = 75
M = 84
C = 167
D = 199 }
if (Tip.ItemIndex ==0){
NL = 24
LWspt = 87
Lwfund = 75
M = 84
B = 135
D = 199 }
if (Tip.ItemIndex ==2){
NL = 10
LWspt = 38
Lwfund = 35
M = 63
C = 148
F = 212 }

Material.SetActive()
Count = Num.Value;
Thick = ActiveMaterial.Thickness;
function Glisiere(){
if (Tip.ItemIndex == 1){
if (Adancime.Value ==500){
if (HSertar.ItemIndex==1){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L500, L.fr3d')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L500, R.fr3d')
}}
if (Adancime.Value ==400){
if (HSertar.ItemIndex==1){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L400, L.fr3d')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L400, R.fr3d')
}}}

if (Tip.ItemIndex == 2){
if (Adancime.Value ==500){
if (HSertar.ItemIndex==0){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox M Orion L500, L.FR3D')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox M Orion L500, R.FR3D')
}
if (HSertar.ItemIndex==1){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox C Orion L500, L.FR3D')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox C Orion L500, R.FR3D')
}
if (HSertar.ItemIndex==2){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox F Orion L500, L.FR3D')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox F Orion L500, R.FR3D')
}
} }
GlisieraL.Mount1(LeftPanel, Left, PosY + Thick, Front, 0)

GlisieraR.Mount1(RightPanel, Right - Thick, PosY + Thick, Front, 0)
}
function FaltL16(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Cut.Contour.AddRectangle(0, 0, 38, 8)
Cut.Name = 'Falt L ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}
function FaltR16(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(Fund.GSize.x, 0, Fund.GSize.x, -Adancime.Value+NL)
Cut.Contour.AddRectangle(0, 0, -38, 8)
//Cut.Contour.AddRectangle(0, 18, 12, 16)
Cut.Name = 'Falt R ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}
function FaltTL(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddRectangle(0, 0, 16, 2)

Cut.Name = 'Falt L ' +'16/'+ 2 + ' pe ' + (Adancime.Value - NL);
}
function FaltTR(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(Fund.GSize.x, 0, Fund.GSize.x, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddRectangle(0, 0, -16, 2)

Cut.Name = 'Falt R ' +'16/'+ 2 + ' pe ' + (Adancime.Value - NL);
}


function FaltL18(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddLine(0, 0, 0, 10)
Paz.AddLine(0, 10, 38, 10)
Paz.AddLine(38, 10, 38, 2)
Paz.AddLine(38, 2, 54, 2)
Paz.AddLine(54, 2, 54, 0)
Paz.AddLine(54, 0, 0, 0)
Cut.Name = 'Falt L ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}

function FaltR18(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddLine(Fund.GSize.x, 0, Fund.GSize.x, 10)
Paz.AddLine(Fund.GSize.x, 10, Fund.GSize.x-38, 10)
Paz.AddLine(Fund.GSize.x-38, 10, Fund.GSize.x-38, 2)
Paz.AddLine(Fund.GSize.x-38, 2, Fund.GSize.x-54, 2)
Paz.AddLine(Fund.GSize.x-54, 2, Fund.GSize.x-54, 0)
Paz.AddLine(Fund.GSize.x-54, 0, Fund.GSize.x, 0)
Cut.Name = 'Falt R ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}

function abs(){
for (var c = 0; c < 4; c++) {
SpateP.AddButt(Cant, c)
Fund.AddButt(Cant, c)}
}

PosY = Bottom;
SectionHeight = Top - Bottom;

if (HSertar.ItemIndex==0) {
Hbox = M
HboxN = 'M'}
if (HSertar.ItemIndex==1) {
if (Tip.ItemIndex ==0){
Hbox = C
HboxN = 'C' }
if (Tip.ItemIndex ==1){
Hbox = C
HboxN = 'Plus B'}
if (Tip.ItemIndex ==2){
Hbox = C
HboxN = 'C'}
}
if (HSertar.ItemIndex==2) {
if (Tip.ItemIndex ==0){
Hbox = D
HboxN = 'D'}
if (Tip.ItemIndex ==1){
Hbox = D
HboxN = 'Plus D'}
if (Tip.ItemIndex ==2){
Hbox = F
HboxN = 'F'}
}
YInc = (SectionHeight - Count * Hbox) / (Count + 1);

for (var k = 0; k < Count; k++) {
PosY += YInc;

Block = BeginParametricBlock()

if (Tip.ItemIndex ==1){
T.Visible = true
L.Visible = false


Block.Name = ('Tandembox ' + HboxN + ' la '+ Adancime.Value )


if (HSertar.ItemIndex ==0) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar' ;
SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + M, Front - Adancime.Value + NL - Thick);
SpateP.Name = 'Spate Sertar' ;
} ;
if (HSertar.ItemIndex ==1) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar' ;
SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + C, Front - Adancime.Value + NL - Thick);
SpateP.Name = 'Spate Sertar' ;
};
if (HSertar.ItemIndex ==2) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar' ;
SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + D, Front - Adancime.Value + NL - Thick);
SpateP.Name = 'Spate Sertar' ;
};
if (Material.Thickness > 16){
FaltTL()
FaltTR() }

};
if (Tip.ItemIndex ==2){
L.Visible = true
T.Visible = false

Block.Name = ('Legrabox ' + HboxN + ' la '+ Adancime.Value )
if(HSertar.ItemIndex ==0) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar';
SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + M + Thick, Front - Adancime.Value + NL);
SpateP.Name = 'Spate Sertar';
};
if(HSertar.ItemIndex ==1){
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar';
SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + C + Thick, Front - Adancime.Value + NL);
SpateP.Name = 'Spate Sertar';
};
if(HSertar.ItemIndex ==2){
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar';
SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + F + Thick, Front - Adancime.Value + NL);
SpateP.Name = 'Spate Sertar';
};

if (Material.Thickness < 18){
FaltL16()
FaltR16() }
else{
FaltL18()
FaltR18()
}

}
Glisiere()

abs()
Fund.Build();
SpateP.Build();
PosY += Hbox;
EndParametricBlock()

}

SetCamera(p3dFront);}
Action.Continue()

[свернуть]


Добавлено через 14 минут

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

Сообщение от t01849 (Сообщение 485948)
Не могу сделать выделение нескольких панелей, затем суммировать их площади

может так ?

Скрытый текст


MakeProperties();

function MakeProperties() {
Prop = Action.Properties;

OkBtn = Prop.NewButton('Расчитать');

OkBtn.OnClick = function() {
alert((weight).toFixed(2) + 'm²');

}
OkBtn = Prop.NewButton('Закончить');

OkBtn.OnClick = function() {
Action.Finish()()

}

var weight = 0;

{
i=0
while (i<10)
{



panel = GetPanel("Alege Panou");
if (panel.AsPanel) {
weight = weight +
((panel.Contour.Width) /1000) *((panel.Contour.Height) /1000 )

} } } }

[свернуть]

t01849 08.11.2019 15:36

Цитата:

Сообщение от Vaseok23 (Сообщение 485952)
подскажите в чем может быть дело

Скрытый текст


FileOptions = 'blum Box.xml';
MakeProperties();
NewBtn = NewButtonInput('APLICA');
NewBtn.OnChange = function() {
Action.Commit();
Action.OnFinish = function() {
Action.Properties.Save(FileOptions);

}
Action.Finish();
}

Action.Properties.Load(FileOptions);
function MakeProperties() {

Prop = Action.Properties;
Tip = Prop.NewCombo('Tip Box', 'TandemBox plus\nTandembox Antaro\nLegrabox')
T = Prop.NewImage('TandemBOX', 'Antaro.png')
L = Prop.NewImage('Legrabox', 'Legrabox.png')
Num = Prop.NewNumber('Numar Sertare',1)
HSertar = Prop.NewCombo('H-Sertar', 'M\nB-C\nF');
Spate = Prop.NewCombo('Tip Spate', 'PAL\nMetal')
Adancime = Prop.NewNumber('Adancime',500);
Material = Prop.NewMaterial('Material');
Cant = Prop.NewButt('Cant');




OkBtn = Prop.NewButton('Executa');
//Обработка нажатия на кнопку Построить
OkBtn.OnClick = function() {

Action.OnFinish = function() {
Action.Properties.Save(FileOptions);
}
Action.Finish();
}
Prop.OnChange = function(){
Make()}

}

SetCamera(p3dFront);
LeftPanel = GetPanel('Укажите левую панель');
RightPanel = GetPanel('Укажите правую панель');
Left = LeftPanel.GabMax.x;
Right = RightPanel.GabMin.x;
Top = GetEdge('Укажите верхнюю границу', AxisX).First.y;
Bottom = GetEdge('Укажите нижнюю границу', AxisX).First.y;

SetCamera(p3dLeft);
Front = GetEdge('Укажите переднюю границу', AxisY).First.z;

Make()
function Make(){
T.Visible = true
L.Visible = true
DeleteNewObjects()
if (Tip.ItemIndex ==1){
NL = 24
LWspt = 87
Lwfund = 75
M = 84
C = 167
D = 199 }
if (Tip.ItemIndex ==0){
NL = 24
LWspt = 87
Lwfund = 75
M = 84
B = 135
D = 199 }
if (Tip.ItemIndex ==2){
NL = 10
LWspt = 38
Lwfund = 35
M = 63
C = 148
F = 212 }

Material.SetActive()
Count = Num.Value;
Thick = ActiveMaterial.Thickness;
function Glisiere(){
if (Tip.ItemIndex == 1){
if (Adancime.Value ==500){
if (HSertar.ItemIndex==1){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L500, L.fr3d')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L500, R.fr3d')
}}
if (Adancime.Value ==400){
if (HSertar.ItemIndex==1){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L400, L.fr3d')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Tandembox\\Tandembox Antaro C Alb L400, R.fr3d')
}}}

if (Tip.ItemIndex == 2){
if (Adancime.Value ==500){
if (HSertar.ItemIndex==0){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox M Orion L500, L.FR3D')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox M Orion L500, R.FR3D')
}
if (HSertar.ItemIndex==1){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox C Orion L500, L.FR3D')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox C Orion L500, R.FR3D')
}
if (HSertar.ItemIndex==2){
GlisieraL = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox F Orion L500, L.FR3D')
GlisieraR = OpenFurniture('D:\\Sharing\\Bazis10 Online\\003 Samples\\Blum\\Sertare\\Legrabox\\Legrabox F Orion L500, R.FR3D')
}
} }
GlisieraL.Mount1(LeftPanel, Left, PosY + Thick, Front, 0)

GlisieraR.Mount1(RightPanel, Right - Thick, PosY + Thick, Front, 0)
}
function FaltL16(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Cut.Contour.AddRectangle(0, 0, 38, 8)
Cut.Name = 'Falt L ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}
function FaltR16(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(Fund.GSize.x, 0, Fund.GSize.x, -Adancime.Value+NL)
Cut.Contour.AddRectangle(0, 0, -38, 8)
//Cut.Contour.AddRectangle(0, 18, 12, 16)
Cut.Name = 'Falt R ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}
function FaltTL(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddRectangle(0, 0, 16, 2)

Cut.Name = 'Falt L ' +'16/'+ 2 + ' pe ' + (Adancime.Value - NL);
}
function FaltTR(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(Fund.GSize.x, 0, Fund.GSize.x, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddRectangle(0, 0, -16, 2)

Cut.Name = 'Falt R ' +'16/'+ 2 + ' pe ' + (Adancime.Value - NL);
}


function FaltL18(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddLine(0, 0, 0, 10)
Paz.AddLine(0, 10, 38, 10)
Paz.AddLine(38, 10, 38, 2)
Paz.AddLine(38, 2, 54, 2)
Paz.AddLine(54, 2, 54, 0)
Paz.AddLine(54, 0, 0, 0)
Cut.Name = 'Falt L ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}

function FaltR18(){
Cut = Fund.AddCut()
Traj= Cut.Trajectory
Traj.AddLine(0, 0, 0, -Adancime.Value+NL)
Paz = Cut.Contour
Paz.AddLine(Fund.GSize.x, 0, Fund.GSize.x, 10)
Paz.AddLine(Fund.GSize.x, 10, Fund.GSize.x-38, 10)
Paz.AddLine(Fund.GSize.x-38, 10, Fund.GSize.x-38, 2)
Paz.AddLine(Fund.GSize.x-38, 2, Fund.GSize.x-54, 2)
Paz.AddLine(Fund.GSize.x-54, 2, Fund.GSize.x-54, 0)
Paz.AddLine(Fund.GSize.x-54, 0, Fund.GSize.x, 0)
Cut.Name = 'Falt R ' +'38/'+ 8 + ' pe ' + (Adancime.Value - NL);
}

function abs(){
for (var c = 0; c < 4; c++) {
SpateP.AddButt(Cant, c)
Fund.AddButt(Cant, c)}
}

PosY = Bottom;
SectionHeight = Top - Bottom;

if (HSertar.ItemIndex==0) {
Hbox = M
HboxN = 'M'}
if (HSertar.ItemIndex==1) {
if (Tip.ItemIndex ==0){
Hbox = C
HboxN = 'C' }
if (Tip.ItemIndex ==1){
Hbox = C
HboxN = 'Plus B'}
if (Tip.ItemIndex ==2){
Hbox = C
HboxN = 'C'}
}
if (HSertar.ItemIndex==2) {
if (Tip.ItemIndex ==0){
Hbox = D
HboxN = 'D'}
if (Tip.ItemIndex ==1){
Hbox = D
HboxN = 'Plus D'}
if (Tip.ItemIndex ==2){
Hbox = F
HboxN = 'F'}
}
YInc = (SectionHeight - Count * Hbox) / (Count + 1);

for (var k = 0; k < Count; k++) {
PosY += YInc;

Block = BeginParametricBlock()

if (Tip.ItemIndex ==1){
T.Visible = true
L.Visible = false


Block.Name = ('Tandembox ' + HboxN + ' la '+ Adancime.Value )


if (HSertar.ItemIndex ==0) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar' ;
SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + M, Front - Adancime.Value + NL - Thick);
SpateP.Name = 'Spate Sertar' ;
} ;
if (HSertar.ItemIndex ==1) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar' ;
SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + C, Front - Adancime.Value + NL - Thick);
SpateP.Name = 'Spate Sertar' ;
};
if (HSertar.ItemIndex ==2) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar' ;
SpateP = AddFrontPanel(Left + LWspt/2, PosY, Right - LWspt/2, PosY + D, Front - Adancime.Value + NL - Thick);
SpateP.Name = 'Spate Sertar' ;
};
if (Material.Thickness > 16){
FaltTL()
FaltTR() }

};
if (Tip.ItemIndex ==2){
L.Visible = true
T.Visible = false

Block.Name = ('Legrabox ' + HboxN + ' la '+ Adancime.Value )
if(HSertar.ItemIndex ==0) {
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar';
SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + M + Thick, Front - Adancime.Value + NL);
SpateP.Name = 'Spate Sertar';
};
if(HSertar.ItemIndex ==1){
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar';
SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + C + Thick, Front - Adancime.Value + NL);
SpateP.Name = 'Spate Sertar';
};
if(HSertar.ItemIndex ==2){
Fund = AddHorizPanel(Left + Lwfund/2, Front - Adancime.Value + NL, Right - Lwfund/2, Front, PosY);
Fund.Name = 'Fund Sertar';
SpateP = AddFrontPanel(Left + LWspt/2, PosY + Thick, Right - LWspt/2, PosY + F + Thick, Front - Adancime.Value + NL);
SpateP.Name = 'Spate Sertar';
};

if (Material.Thickness < 18){
FaltL16()
FaltR16() }
else{
FaltL18()
FaltR18()
}

}
Glisiere()

abs()
Fund.Build();
SpateP.Build();
PosY += Hbox;
EndParametricBlock()

}

SetCamera(p3dFront);}
Action.Continue()

[свернуть]


Добавлено через 14 минут

Добавлено через 2 минуты

может так ?

Скрытый текст


MakeProperties();

function MakeProperties() {
Prop = Action.Properties;

OkBtn = Prop.NewButton('Расчитать');

OkBtn.OnClick = function() {
alert((weight).toFixed(2) + 'm²');

}
OkBtn = Prop.NewButton('Закончить');

OkBtn.OnClick = function() {
Action.Finish()()

}

var weight = 0;

{
i=0
while (i<10)
{



panel = GetPanel("Alege Panou");
if (panel.AsPanel) {
weight = weight +
((panel.Contour.Width) /1000) *((panel.Contour.Height) /1000 )

} } } }

[свернуть]

Спасибо. Доковыряю дальше. А как сделать чтобы выделение оставалось, если выделяешь несколько панелей?

PEHAT 08.11.2019 15:56

Цитата:

Сообщение от Vaseok23 (Сообщение 485952)
подскажите в чем может быть дело

нет условия
if (Tip.ItemIndex == 0){
в котором назначается GlisieraL и GlisieraR


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

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