|
|
|
|
|
21.03.2018, 14:48
|
|
Обсуждение скриптов в Системе Базис
Letos
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
21.03.2018, 14:48
Рейтинг:
()
Если вы не знаете, или не уверены, куда задавать вопрос по скриптам в Системе Базис, то эта тема для вас.
Обратите внимание на полезные ответы в этой теме!
|
Просмотров: 253452
|
2 пользователя(ей) сказали cпасибо:
|
|
18.04.2018, 11:41
|
#31
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 346
|
Цитата:
Сообщение от Rudolf
Добрый день.
Есть ли возможность имортировать через скрипт в Базис 8 данные из формата csv, например
артикул1;длина1;ширина1;колво1
артикул2;длина2;ширина2;колво2
...
После импорта будут созданы панели с этими параметрами.
|
Вот пример для описанного Вами случая:
PHP код:
//имя файла
var csvName = system.askFileName('csv');
//содержимое файла
var content = system.readTextFile(csvName);
// массив, элемент которого равен строке из файла
var panels = content.split('\r\n');
// позиция (геометрическая) панели
var curPos = NewVector(0,0,0);
for (var i = 0; i < panels.length; i++){
// массив, содержащий информацию по конкрентой панели
var panel = panels[i].split(';');
// Позиция (артикул) панели
var art = panel[0];
//длина панели
var length = panel[1];
//ширина панели
var width = panel[2];
// кол-во панелей
var count = panel[3];
for (var k = 0; k < count; k++){
//добавление панели
var p = AddVertPanel(0, 0, width, length, 0);
//назначение позиции (артикула)
p.ArtPos = art;
// назначение позиции геометрической
p.Position = curPos;
// увеличение позиции по х, чтобы все панели были на одной линии
curPos.x += 50;
}
}
Писал в 10 версии, но, думаю, будет работать во всех. Если вдруг не заработает, запустите его из встроенного редактора и напишите текст ошибки, попробую исправить.
|
|
|
3 пользователя(ей) сказали cпасибо:
|
|
18.04.2018, 12:07
|
#32
|
VIP
Регистрация: 31.10.2009
Адрес: Рівне. УкраЇна
Сообщений: 10,580
Сказал(а) спасибо: 14,588
Поблагодарили 20,031 раз(а) в 6,492 сообщениях
Вес репутации: 5260
|
Цитата:
Сообщение от Letos
PHP код:
|
Сергей, просветите, пожалуйста, что сделать с PHP-кодом, что бы он стал полноценным скриптом ? ) То есть, вставил в редактор скриптов и сразу можно нажимать Запуск ..
__________________
Уж лучше беспокойство в сомнении, чем успокоенность в заблуждении. .
(Мандзони Алессандро)
------------------------------------
Троллей не кормлю...
|
|
|
18.04.2018, 12:23
|
#33
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 346
|
Цитата:
Сообщение от Uncle
Сергей, просветите, пожалуйста, что сделать с PHP-кодом, что бы он стал полноценным скриптом ? ) То есть, вставил в редактор скриптов и сразу можно нажимать Запуск ..
|
Да. Контейнер "PHP код" я использовал для более красивого отображения на форме, ибо контейнер "код" пишет все сплошным текстом без выделения ключевых слов и комментариев.
|
|
|
Пользователь сказал cпасибо:
|
|
18.04.2018, 13:29
|
#34
|
Новичок
Регистрация: 29.11.2014
Сообщений: 6
Сказал(а) спасибо: 2
Поблагодарили 4 раз(а) в 1 сообщении
Вес репутации: 0
|
Огромное спасибо.
Все работает на 99% - читает из файла и создает детали, но почему-то размером 2х2
Алерты перед AddVertPanel показывают правильные цифры, разбираюсь.
|
|
|
19.04.2018, 10:54
|
#35
|
Новичок
Регистрация: 29.11.2014
Сообщений: 6
Сказал(а) спасибо: 2
Поблагодарили 4 раз(а) в 1 сообщении
Вес репутации: 0
|
Нашел проблему.
Значения размеров записывались в переменные как строка.
Вот такой все заработало:
PHP код:
var csvName = system.askFileName('csv');
var content = system.readTextFile(csvName);
var panels = content.split('\r\n');
var curPos = NewVector(0,0,0);
for (var i = 0; i < panels.length; i++){
var panel = panels[i].split(';');
var art = panel[0];
var length = Number(panel[1]); // из строки в число
var width = Number(panel[2]); // из строки в число
var count = panel[3];
for (var k = 0; k < count; k++){
var p = AddVertPanel(0, 0, width, length, 0);
p.Name = art; // у меня артикул - имя
p.Position = curPos;
curPos.x += 50;
}
}
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
19.04.2018, 21:24
|
#36
|
VIP
Регистрация: 04.07.2012
Сообщений: 1,968
Сказал(а) спасибо: 4,006
Поблагодарили 3,557 раз(а) в 1,174 сообщениях
Вес репутации: 1052
|
Подскажите пож.(не нашел в мануале): как назначить ориентацию текстуры для создаваемой панели HPanel=AddHorizPanel(...) ?
и еще такой вопрос: кромку на панель ставлю так:
for(var side_butt=0; side_butt < 4; side_butt++){
Butt_Material = arr[row][4+side_butt*3];
if (Butt_Material != '')
{
Butt = HPanel.Butts.Add();
Butt.Material = arr[row][4+side_butt*3];
Butt.Material.Allowance = 0.5;
Butt.Material.ClipPanel = true;
Butt.ElemIndex = side_butt;
Butt.Sign = arr[row][6+side_butt*3];
Butt.Thickness = Number(arr[row][5+side_butt*3],10);
}
}
}
в итоге толщина кромки в БМ не попадает, хотя в исходнике(строка CSV) толщина присутствует
соответственно, что делаю неправильно?
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
|
|
|
20.04.2018, 10:00
|
#37
|
Консультант
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,034 раз(а) в 367 сообщениях
Вес репутации: 346
|
Цитата:
Сообщение от bbb i ko
Подскажите пож.(не нашел в мануале): как назначить ориентацию текстуры для создаваемой панели HPanel=AddHorizPanel(...) ?
|
HPanel.TextureOrientation = TextureOrientation.Horizontal; //Например
Цитата:
Сообщение от bbb i ko
и еще такой вопрос: кромку на панель ставлю так:
for(var side_butt=0; side_butt < 4; side_butt++){
Butt_Material = arr[row][4+side_butt*3];
if (Butt_Material != '')
{
Butt = HPanel.Butts.Add();
Butt.Material = arr[row][4+side_butt*3];
Butt.Material.Allowance = 0.5;
Butt.Material.ClipPanel = true;
Butt.ElemIndex = side_butt;
Butt.Sign = arr[row][6+side_butt*3];
Butt.Thickness = Number(arr[row][5+side_butt*3],10);
}
}
}
в итоге толщина кромки в БМ не попадает, хотя в исходнике(строка CSV) толщина присутствует
соответственно, что делаю неправильно?
|
Сделал тестовый пример у себя на основе вашего кода - у меня все нормально (БМ10). Все, написанное ниже относится к 10 версии, поэтому где-то я могу быть не прав:
1. Вот эти две строки мне не понятны:
Код:
Butt.Material.Allowance = 0.5;
Butt.Material.ClipPanel = true;
в БМ10 свойство Material - строковое. А свойства Allowance и ClipPanel доступны у объекта кромки. Думаю, эти строки должны быть такими:
Код:
Butt.Allowance = 0.5;
Buttl.ClipPanel = true;
2. Самый простой способ проверить, проверить, почему толщина кромки не попадает, это алертом вывести толщину, например:
Код:
alert(Number(arr[row][5+side_butt*3],10))
Butt.Thickness = Number(arr[row][5+side_butt*3],10);
алерт выведет, какое значение вы пытаетесь получить.
Кстати, с дробными числами есть еще одна неприятная вещь: если в строке разделитель дроби - запятая, а не точка, то такое преобразование вернет Nan. Возможно, в этом проблема.
P.S. И, напоследок, пара советов: - У вас идет два присвоения одного и того же сложного значения:
Код:
//1
Butt_Material = arr[row][4+side_butt*3];
//промежуточный код
//2
Butt.Material = arr[row][4+side_butt*3];
Предлагаю во второй раз брать значение из уже заданной переменной:
Код:
//1
Butt_Material = arr[row][4+side_butt*3];
//промежуточный код
//2
Butt.Material = Butt_Material;
Так уже идет доступ сразу к Butt_material, а не к arr->arr[row]->arr[row][4+side_butt*3]. Но, что более важно, если что-то изменится (например, нужно будет брать значение не из [4+side_butt*3], а из [2+side_butt*2]), то править код надо будет всего в одном месте, что уменьшает вероятность ошибки при запуске измененного/исправленного кода
- У вас очень часто повторяется arr[row]. Можно и его записать в отдельную переменную. Особо видимых плюсов не принесет, поэтому это из разряда "придраться".
- И еще из разряда "придраться" по поводу правил хорошего тона. В JS принято называть переменные с маленькой буквы (а названия функций и классов - с большой). Из видимых плюсов - меньше Shift лишний раз нажимать.
|
|
|
4 пользователя(ей) сказали cпасибо:
|
|
20.04.2018, 17:44
|
#38
|
VIP
Регистрация: 04.07.2012
Сообщений: 1,968
Сказал(а) спасибо: 4,006
Поблагодарили 3,557 раз(а) в 1,174 сообщениях
Вес репутации: 1052
|
Цитата:
Сообщение от Letos
Кстати, с дробными числами есть еще одна неприятная вещь: если в строке разделитель дроби - запятая, а не точка, то такое преобразование вернет Nan. Возможно, в этом проблема.
|
да, спасибо - дело было именно в запятой. Исправил на точку - и все ок.
Сбило с толку, что в материале толщина проставляется, а в кромке - нет. А там как раз целочисленное значение просто.
__________________
Автоматизация автоматизаций на АСУ, ТП и тд и тп..
Комплексное решение
|
|
|
25.04.2018, 15:11
|
#39
|
Местный
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 169
Сказал(а) спасибо: 57
Поблагодарили 246 раз(а) в 46 сообщениях
Вес репутации: 140
|
Цитата:
Сообщение от Letos
И еще хотелось бы узнать, какую ошибку выдает.
|
Ошибка была банальная. Пример брался из справки Subtraction(contour) и в примере допущена ошибка c.Substraction(Hole).
|
|
|
25.05.2018, 08:22
|
#40
|
Местный
Регистрация: 02.07.2011
Сообщений: 191
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 197
|
это можно сделать в смете без скриптов назначив каждому материалу сопутствующий материал вес
добавил сопутствующий материал МАССА 1кг на 1кв м зеркала
|
|
|
Пользователь сказал cпасибо:
|
|
|
|
|
Нижняя навигация
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 15:50. Часовой пояс GMT +3.
|