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

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

Letos 18.04.2018 12:41

Цитата:

Сообщение от Rudolf (Сообщение 453853)
Добрый день.
Есть ли возможность имортировать через скрипт в Базис 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 
0panels.lengthi++){
    
// массив, содержащий информацию по конкрентой панели
    
var panel panels[i].split(';');
    
// Позиция (артикул) панели
    
var art panel[0];
    
//длина панели
    
var length panel[1];
    
//ширина панели
    
var width panel[2];
    
// кол-во панелей
    
var count panel[3];
    for (var 
0countk++){
        
//добавление панели
        
var AddVertPanel(00widthlength0);
        
//назначение позиции (артикула)
        
p.ArtPos art;
        
// назначение позиции геометрической
        
p.Position curPos;
        
// увеличение позиции по х, чтобы все панели были на одной линии
        
curPos.+= 50;
    }


Писал в 10 версии, но, думаю, будет работать во всех. Если вдруг не заработает, запустите его из встроенного редактора и напишите текст ошибки, попробую исправить.

Uncle 18.04.2018 13:07

Цитата:

Сообщение от Letos (Сообщение 453869)
PHP код:

Сергей, просветите, пожалуйста, что сделать с PHP-кодом, что бы он стал полноценным скриптом ? ) То есть, вставил в редактор скриптов и сразу можно нажимать Запуск ..

Letos 18.04.2018 13:23

Цитата:

Сообщение от Uncle (Сообщение 453874)
Сергей, просветите, пожалуйста, что сделать с PHP-кодом, что бы он стал полноценным скриптом ? ) То есть, вставил в редактор скриптов и сразу можно нажимать Запуск ..

Да. Контейнер "PHP код" я использовал для более красивого отображения на форме, ибо контейнер "код" пишет все сплошным текстом без выделения ключевых слов и комментариев.

Rudolf 18.04.2018 14:29

Огромное спасибо. *THUMBS UP*
Все работает на 99% - читает из файла и создает детали, но почему-то размером 2х2 :)
Алерты перед AddVertPanel показывают правильные цифры, разбираюсь.

Rudolf 19.04.2018 11:54

Нашел проблему.
Значения размеров записывались в переменные как строка.
Вот такой все заработало:
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 
0panels.lengthi++){
    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 
0countk++){
        var 
AddVertPanel(00widthlength0);
        
p.Name art// у меня артикул - имя
        
p.Position curPos;
        
curPos.+= 50;
    }



bbb i ko 19.04.2018 22:24

Вложений: 1
Подскажите пож.(не нашел в мануале): как назначить ориентацию текстуры для создаваемой панели 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) толщина присутствует
соответственно, что делаю неправильно?

Letos 20.04.2018 11:00

Цитата:

Сообщение от bbb i ko (Сообщение 454023)
Подскажите пож.(не нашел в мануале): как назначить ориентацию текстуры для создаваемой панели HPanel=AddHorizPanel(...) ?

HPanel.TextureOrientation = TextureOrientation.Horizontal; //Например

Цитата:

Сообщение от bbb i ko (Сообщение 454023)
и еще такой вопрос: кромку на панель ставлю так:
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. У вас идет два присвоения одного и того же сложного значения:
    Код:

    //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]), то править код надо будет всего в одном месте, что уменьшает вероятность ошибки при запуске измененного/исправленного кода
  2. У вас очень часто повторяется arr[row]. Можно и его записать в отдельную переменную. Особо видимых плюсов не принесет, поэтому это из разряда "придраться".
  3. И еще из разряда "придраться" по поводу правил хорошего тона. В JS принято называть переменные с маленькой буквы (а названия функций и классов - с большой). Из видимых плюсов - меньше Shift лишний раз нажимать:).

bbb i ko 20.04.2018 18:44

Цитата:

Сообщение от Letos (Сообщение 454052)
Кстати, с дробными числами есть еще одна неприятная вещь: если в строке разделитель дроби - запятая, а не точка, то такое преобразование вернет Nan. Возможно, в этом проблема.

да, спасибо - дело было именно в запятой. Исправил на точку - и все ок.
Сбило с толку, что в материале толщина проставляется, а в кромке - нет. А там как раз целочисленное значение просто.

Максим Геннадьевич 25.04.2018 16:11

Цитата:

Сообщение от Letos (Сообщение 453481)
И еще хотелось бы узнать, какую ошибку выдает.

Ошибка была банальная. Пример брался из справки Subtraction(contour) и в примере допущена ошибка c.Substraction(Hole).

wizardpnz 25.05.2018 09:22

Вложений: 1
это можно сделать в смете без скриптов назначив каждому материалу сопутствующий материал вес

добавил сопутствующий материал МАССА 1кг на 1кв м зеркала


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

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
© 2007-2021 PROMEBEL