Форум профессиональных мебельщиков PROMEBELclub
 
PROMEBELclub - Форум для мебельщиков: конструкторов, дизайнеров, мастеров, технологов и всех, кто имеет отношение к производству и изготовлению мебели. Программы для конструирования и дизайна мебели. Мебельная литература и обучающие пособия.
 
 

Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 13.01.2014, 13:22  
БАЗИС 9 - Скрипты
 
Аватар для Igor_482
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174

Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Версия для печати Отправить по электронной почте
Igor_482 Igor_482 вне форума 13.01.2014, 13:22
Рейтинг: ()

ВНИМАНИЕ! Правила выкладывания скриптов.

1. Если в скрипте нет ссылок на фурнитуру, фрагменты и.т.д то достаточно его упаковать в архив и выложить.

2. Если в скрипте есть ссылки на фурнитуру, фрагменты и т.д. то архив должен содержать папку с самим скриптом и всеми файлами на которые есть ссылки в тексте скрипта.


Т.к. при запуске скрипта на другом компе возникает ошибка о не возможности открыть то или иной файл и скрипт до конца не отрабатывает свой текст. Не соблюдается "чистота проверки" работы скрипта.

__________________________________________________ _______________

Интересует информация по редактору скриптов в БМ8. Существует ли справочная документация и примеры использования скриптов в БМ8. Какие возможности дает данная функция? Владеющим информацией по данному вопросу просьба поделиться ею.

Для работы скриптов от Igor_482 необходим установленный ODBC драйвер FireBird, установленные и зарегистрированные в ОС модули FBDBDialog.dll, MSDATGRD.OCX, MSCOMCTL.OCX и MSSTDFMT.DLL (сообщение с описанием установки этих модулей в ОС, ссылка на модули и исходник "FBDBDialog.dll") а так же файл "ADODB.ini" с настройками соединения к БД в папке со скриптом.

ADODB.ini


[General]
FDBServ = t001
FBSPort = 14357
FDBFile = D:\DBBM\Библиотека\БД\BMDB09.FDB
FBCFile = C:\Windows\System32\fbclient.dll
----------------------------------------------
Переменные .ini:
FDBServ - имя ПК на котором находится сервер FireBird с используемой БД (если локально, то параметр: localhost или 127.0.0.1);
FBSPort - в настройке не нуждается (по умолчанию: 14357);
FDBFile - локальный путь к БД на сервере FireBird;
FBCFile - путь к файлу "fbclient.dll" (находится в корневой папке программы Базис).
[свернуть]

Последний раз редактировалось systland; 23.09.2016 в 11:52..
Просмотров: 995804
Ответить с цитированием Вверх
Пользователь сказал cпасибо:
evilbaby1989 (10.07.2023)
Старый 11.03.2016, 15:24   #1021
cudesnic09
VIP
 
Аватар для cudesnic09
 
Регистрация: 14.07.2009
Адрес: А где придётся!Злые они.....
Сообщений: 6,908
Сказал(а) спасибо: 20,983
Поблагодарили 25,949 раз(а) в 6,382 сообщениях
Вес репутации: 6096
cudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспоримаcudesnic09 репутация неоспорима
По умолчанию

Цитата:
Сообщение от fanest Посмотреть сообщение
Но надо чтоб этот паз шел не полностью вдоль стороны, а не доходил до конца на 14мм и начинался не сначала детали, а также с отступом на 14мм.
А не проще паз сразу строить как надо???
__________________
...Как искали искры в сыром бору.......
cudesnic09 вне форума   Ответить с цитированием Вверх
Старый 11.03.2016, 17:48   #1022
fanest
Пользователь
 
Регистрация: 26.09.2014
Сообщений: 46
Сказал(а) спасибо: 55
Поблагодарили 15 раз(а) в 5 сообщениях
Вес репутации: 124
fanest на пути к лучшему
По умолчанию

Пазы на ящиках ставятся автоматом. Ящиков бывает штук8-10 и подрезать все три панели(две боковины и задняя панель) под паз оооочень долго....
fanest вне форума   Ответить с цитированием Вверх
Старый 12.03.2016, 01:10   #1023
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от fanest Посмотреть сообщение
Народ, подскажите пожалуйста есть ли такой скрипт, чтобы находил в модели ????все пазы???? и подрезал их длину с обоих сторон на определенное значение? Например, есть деталь, где есть паз под ХДФ. Но надо чтоб этот паз шел не полностью вдоль стороны, а не доходил до конца на 14мм и начинался не сначала детали, а также с отступом на 14мм. ( Тему как-то поднимал, но видимо решения не найдено)
тут не вижу никаких проблем:
цикл панелей
цикл пазов
если паз линия
(если линия горизонтальная по равенству координат Y) или (серьезными геометрическими формулами считать отступы по 14 с каждой стороны)
Поз1.X+14
Поз2.X-14
ВСЁ.
Для этого Базис-Скрипт и нужен, чтоб решать индивидуальный бред, т.е. задичи.


Проверь, вроде должно работать.

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



Model.forEachPanel(function(p) {
StartEditing(p)
cts = p.Cuts
ctsC = cts.Count
for(i=0;i<ctsC;i++)
{
tr = cts[i].Trajectory
ct = tr[0]
p1 = ct.Pos1
p2 = ct.Pos2
cc= NewContour()
c1=cc.AddCircle(p1.x, p1.y, 14)
c2 = cc.AddCircle(p2.x, p2.y, 14)

ar = geometry.Intersect(ct, c1)
newp1 = ar[0]
ar = geometry.Intersect(ct, c2)
newp2 = ar[0]

index = tr.IndexOf(ct)
tr.Extract(index)

tr.AddLine(newp1.x,newp1.y,newp2.x,newp2.y)
//tr.Subtraction(cc)


//p1.x = p1.x+14
//p2.x = p2.x-14
//system.log(p2.x)

}
//cts.Assign()
p.Build()
});

[свернуть]


Однако сколько раз нажмёшь - столько раз и подрежется, и, разумеется, пазы не только ящика, но и фасадов, скругление столешек, если используешь, и все остальные..

Цитата:
Сообщение от fanest Посмотреть сообщение
Тему как-то поднимал, но видимо решения не найдено
Неужто на такое Великое дело как скрипты не находится по часу в день? За месяц можно обрести СЕРЬЁЗНЫЙ инструмент - навык.

Добавлено через 3 минуты
Цитата:
Сообщение от fanest Посмотреть сообщение
Пазы на ящиках ставятся автоматом.
Обычно Автомат можно либо настраивать либо перепрограммировать...







Уважаемые разработчики Базис-Скрипта ответьте, пожалуйста:

Как Определяется направление Эквидистанты в команде?

Есть ли предусмотренный способ получить контур панели с подрезкой канта: ДА или НЕТ?

Есть ли возможность перебрать элементы Subfolders?

fso = NewCOMObject ("Scripting.FileSystemObject");
f = fso.GetFolder("C:\\Program Files");
system.log(f.Name)
fc = new Enumerator(f.SubFolders);
s = "";
for (;!fc.atEnd(); fc.moveNext())
{
system.log(fc.Name)
}

Последний раз редактировалось DTioutiou; 12.03.2016 в 11:39.
v22884 вне форума   Ответить с цитированием Вверх
5 пользователя(ей) сказали cпасибо:
Briz (12.03.2016), DTioutiou (12.03.2016), fanest (14.03.2016), zorro (12.03.2016), тех.нолог (15.03.2016)
Старый 12.03.2016, 10:21   #1024
Briz
Местный
 
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
Briz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личность
По умолчанию

1) Контур панели с подрезкой из скрипта не получить. В будущем должен быть
2) направление Эквидистанты в команде скрипта всегда справа относительно контура. чтобы построить эквидистанту с другой стороны делайте предварительно Contour.InvertDirection()
3)C Scripting.FileSystemObject не уверен, что получится перебрать из-за того, чтобы пройтись по списку SubFolders нужен специальный Enumerator, который Microsoft специально реализовала для VisualBasic и который недоступен в JavaScript.
Briz вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
DTioutiou (12.03.2016), v22884 (12.03.2016), тех.нолог (15.03.2016)
Старый 16.03.2016, 09:36   #1025
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от fanest Посмотреть сообщение
Огромное спасибо!!!
отблагодари изучением Базис-скрипта и новыми полезными скриптами.



Есть ли предусмотренная возможность и какой алгоритм самый простой скопировать с одной панели на другую Cutts, Butts, Plastics ?
v22884 вне форума   Ответить с цитированием Вверх
Старый 16.03.2016, 15:50   #1026
Igor_482
VIP
 
Аватар для Igor_482
 
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
Igor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личность
По умолчанию Операции с контуром панели.

К развитию темы по предыдущему сообщению новый пример кода с расширенными возможностями:

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

PHP код:
Properties Action.Properties;
Operation Properties.NewCombo('Действие''Скруглениe\nФаска\n' +
                                            
'Дуга3Т\nВолна\nПодрез\n' +
                                            
'Вырез');
Dimension Properties.NewNumber('Размер');
Divide    Dimension.NewBool('Делить дуги');
Step      Dimension.NewNumber('Шаг');
Save      Dimension.NewBool('Запоминать указанный объект');
Clear     Dimension.NewBool('Удалять кромку объекта');

var 
BackUps = new Array();
var 
Panel   = new Object();
var 
Bazis9  system.apiVersion >= 90;

Properties.Load('СкруглениеУглов.xml');
Action.ShowPoints true;

Properties.NewButton('Размер: +/-').OnClick  = function() {
  
Dimension.Value = -Dimension.Value;
};

Properties.NewButton('Размер: -Ш').OnClick  = function() {
  
Dimension.Value -= Step.Value;
};

Properties.NewButton('Размер: +Ш').OnClick  = function() {
  
Dimension.Value += Step.Value;
};

Properties.NewButton('Отменить действие').OnClick = function() {
  if (
BackUps.length 0) {
    
OldObject BackUps.pop();
    
OldPanel OldObject.Panel;
    
StartEditing(OldPanel);
    
OldPanel.Contour.Clear();
    
OldPanel.Contour.AddList(OldObject.Contour.MakeCopy());
    
OldPanel.Build();
  };
};

if (
Bazis9Properties.NewSeparator();

Properties.NewButton('Завершить').OnClick = function() {
  
Action.Finish();
};

function 
SortByArea(List) {
  for (var 
= List.length 10i--) {
    for (var 
0ij++) {
      if (
geometry.Area(List[j]) < geometry.Area(List[1])) {
        var 
Value = List[j];
        List[
j] = List[1];
        List[
1] = Value;
      };
    };
  };
  return List;
};

function 
FindClosedContours(Original) {
  var 
Copy NewContour();
  var 
Result = new Array();
  
Copy.AddList(Original.MakeCopy());
  while (
true) {
    
ClosedContour NewContour();
    if (
Copy.FindContour(ClosedContourtrue)) {
      
Result.push(ClosedContour)
    } else {
      break;
    };
  };
  return 
SortByArea(Result);
};

function 
EqualsArea(AB) {
  if (
geometry.Area(A) != geometry.Area(B)) return false;
  return 
true
};

function 
ObjectsLength(List) {
  var 
Result = new Number();
  for (var 
0< List.Counti++) {
    
Result += List[i].ObjLength();
  };
  return 
parseFloat(Result.toFixed(10));
};

function 
EqualsLength(AB) {
  if (
ObjectsLength(A) != ObjectsLength(B)) return false;
  return 
true;
};

Action.OnFinish = function() {
  
Properties.Save('СкруглениеУглов.xml');
  
Model.UnHighlightAll();
};

Action.OnMove = function() {
  
Obj Action.Get3DObject();
  if (
Obj instanceof TFurnPanel) {
    
Panel Obj.AsPanel;
    if (!
Panel.Highlighted) {
      
Model.UnHighlightAll();
      
Panel.Highlighted true;
    };
  } else if (!
Save.Value) {
    
Panel = new Object();
    
Model.UnHighlightAll();
  };
};

Action.OnClick = function() {
  if (
Panel.AsPanel != undefined) {
    
StartEditing(Panel);
    
Contour Panel.Contour;
    
Contour.OrderContours(true);
    if (
Contour.IsClockOtherWise()) Contour.InvertDirection();
    
OldContour NewContour();
    
OldContour.AddList(Contour.MakeCopy());
    if (
Dimension.Value != 0) {
      
Point Contour.ClosestPoint(Panel.ToObject(Action.Pos3));
      switch (
Operation.Value) {
        case 
'Скруглениe':
          
Contour.Rounding(Point.xPoint.yDimension.Value);
          if (
EqualsLength(ContourOldContour)) {
            
Contour.Rounding(Point.xPoint.y, -Dimension.Value);
          };
          break;
        case 
'Фаска':
          
Arc Contour.Rounding(Point.xPoint.yDimension.Value);
          if (
EqualsLength(ContourOldContour)) {
            
Arc Contour.Rounding(Point.xPoint.y, -Dimension.Value);
          };
          if (!
EqualsLength(ContourOldContour)) {
            
Contour.AddLine(Arc.Pos1.xArc.Pos1.yArc.Pos2.xArc.Pos2.y);
            
Contour.Delete(Arc);
          };
          break;
        case 
'Дуга3Т':
          
Line Contour.Find(Point.xPoint.y);
          if (
Line.IsLine()) {
            
Offset NewPoint(0               Line.NormDir().-
                              
Dimension.Value Line.NormDir().y,
                              
Dimension.Value Line.NormDir().+
                              
0               Line.NormDir().y);
            
Center NewPoint(Line.LineCenter().Offset.x,
                              
Line.LineCenter().Offset.y);
            
Arc3 Contour.AddArc3(Line.Pos1CenterLine.Pos2);
            if (
Divide.Value) {
              
Contour.AddArc(Line.Pos1CenterArc3.CenterDimension.Value 0);
              
Contour.AddArc(CenterLine.Pos2Arc3.CenterDimension.Value 0);
              
Contour.Delete(Arc3);
            };
            
Contour.Delete(Line);
          };
          break;
        case 
'Волна':
          
Line Contour.Find(Point.xPoint.y);
          if (
Line.IsLine()) {
            
Line01 Contour.AddLine(Line.Pos1.xLine.Pos1.y,
                                     
Line.LineCenter().xLine.LineCenter().y);
            
Line02 Contour.AddLine(Line.LineCenter().xLine.LineCenter().y,
                                     
Line.Pos2.xLine.Pos2.y);
            
Contour.Delete(Line);
            
Offset NewPoint(0               Line01.NormDir().-
                              
Dimension.Value Line01.NormDir().y,
                              
Dimension.Value Line01.NormDir().+
                              
0               Line01.NormDir().y);
            
Center NewPoint(Line01.LineCenter().Offset.x,
                              
Line01.LineCenter().Offset.y);
            
Arc3 Contour.AddArc3(Line01.Pos1CenterLine01.Pos2);
            if (
Divide.Value) {
              
Contour.AddArc(Line01.Pos1CenterArc3.CenterDimension.Value 0);
              
Contour.AddArc(CenterLine01.Pos2Arc3.CenterDimension.Value 0);
              
Contour.Delete(Arc3);
            };
            
Contour.Delete(Line01);
            
Offset NewPoint0               Line02.NormDir().-
                              -
Dimension.Value Line02.NormDir().y,
                              -
Dimension.Value Line02.NormDir().+
                               
0               Line02.NormDir().y);
            
Center NewPoint(Line02.LineCenter().Offset.x,
                              
Line02.LineCenter().Offset.y);
            
Arc3 Contour.AddArc3(Line02.Pos1CenterLine02.Pos2);
            if (
Divide.Value) {
              
Contour.AddArc(Line02.Pos1CenterArc3.Center, -Dimension.Value 0);
              
Contour.AddArc(CenterLine02.Pos2Arc3.Center, -Dimension.Value 0);
              
Contour.Delete(Arc3);
            };
            
Contour.Delete(Line02);
          };
          break;
        case 
'Подрез':
          if (
Bazis9) {
            var 
Contours FindClosedContours(Contour);
            
Contour.Clear();
            for (var 
0Contours.lengthi++) {
              if (
Contours[i].IsClockOtherWise()) Contours[i].InvertDirection();
              var 
Equidistant NewContour();
              switch (
true) {
              case 
== 0:
                
Equidistant.AddEquidistant(Contours[i], Dimension.Valuefalsefalse);
                break;
              case 
0:
                
Equidistant.AddEquidistant(Contours[i], -Dimension.Valuefalsefalse);
                break;
              };
              
Contour.AddList(Equidistant.MakeCopy());
            };
          } else {
            
alert('БМ8 не имеет API функции построения эквидистанты.');
          };
          break;
        case 
'Вырез':
        if (
Bazis9) {
          var 
Contours FindClosedContours(Contour);
          
Contour.Clear();
          
Contour.AddList(Contours[0].MakeCopy());
          if (
Contour.IsClockOtherWise()) Contour.InvertDirection();
          var 
Equidistant NewContour();
          
Equidistant.AddEquidistant(ContourDimension.Valuefalsefalse);
          
Contour.AddList(Equidistant.MakeCopy());
        } else {
          
alert('БМ8 не имеет API функции построения эквидистанты.');
        };
          break;
        };
      
Contour.OrderContours(true);
    } else {
      
alert('Параметр "Размер" должен отличаться от нуля!');
    };
    for (var 
0Contour.Counti++) {
      if (
Contour[i].IsArc()) {
        if (
parseFloat(Contour[i].ObjLength().toFixed(12)) == ||
            
parseFloat(Contour[i].ObjLength().toFixed(12)) ==
            
parseFloat((Contour[i].ArcRadius() * Math.PI).toFixed(12))) {
          
Contour.Delete(Contour[i]);
          
Contour.OrderContours(true);
          
system.log('Найдена дуга длинной 2PI*R!');
        };
      };
        if (
Contour[i].IsLine()) {
        if (
parseFloat(Contour[i].ObjLength().toFixed(12)) == 0) {
          
Contour.Delete(Contour[i]);
          
Contour.OrderContours(true);
          
system.log('Найден отрезок нулевой длинны!');
        };
      };
    };
    if (!
Contour.IsClosedContour()) {
      
Contour.Clear();
      
Contour.AddList(OldContour.MakeCopy());
      
Contour.OrderContours(true);
      
system.log('Контур не замкнут!');
    };
    if (!
EqualsLength(ContourOldContour)) {
      var 
BackUp = {
        
PanelPanel,
        
ContourOldContour
      
};
      
BackUps.push(BackUp);
      if (
Panel.Butts.Count && Clear.ValuePanel.Butts.Clear();
    };
    
Panel.Build();
  };
};

Action.Continue(); 
[свернуть]

Так же вопрос к знатокам и специалистам.
В каком порядке выводится результат поиска замкнутых контуров функцией "Contour.FindContour(ClosedContour, true)" c учетом площади и по её убыванию (или возрастанию) или нет?

В скрипте присутствует функция сравнение контура до изменения с этим же контуром после его изменения, сравнение происходит по его площади.
Есть ли другой более простой способ (за исключением варианта "Contour.ObjLength()") сравнения двух контуров с учетом того, что он может состоять из нескольких замкнутых контуров?

Последний раз редактировалось Igor_482; 17.03.2016 в 10:16.
Igor_482 вне форума   Ответить с цитированием Вверх
7 пользователя(ей) сказали cпасибо:
Старый 18.03.2016, 22:45   #1027
Briz
Местный
 
Регистрация: 30.11.2011
Сообщений: 283
Сказал(а) спасибо: 275
Поблагодарили 803 раз(а) в 179 сообщениях
Вес репутации: 358
Briz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личностьBriz - просто великолепная личность
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Есть ли предусмотренная возможность и какой алгоритм самый простой скопировать с одной панели на другую Cutts, Butts, Plastics ?
Попробуйте newPanel.Assign(oldPanel); Должно скопироваться всё, включая контур и положение
Briz вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
maxgmv (18.03.2016), v22884 (19.03.2016)
Старый 19.03.2016, 02:48   #1028
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Briz Посмотреть сообщение
Должно скопироваться всё, включая контур и положение
Спасибо. Работает!
А Без Контура и Положения?
Присвоить прошлые?

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


p = AddPanel(100, 200)
cc = p.Cuts.Add()
cc.Contour.AddCircle(0, 0, 10)
cc.Trajectory.AddLine(0, 0, 50, 50)

b = p.Butts.Add()
b.ElemIndex = 2;
b.Thickness = 3;
b.Material = 'Кант Ш-обр Вишня';
b.Sign = 'Ш-Вишня';
b.ClipPanel = true

p2= AddPanel(30, 20)
p2.Translate(NewVector(100, 80, 50))
p2c = p2.Contour.MakeCopy()
p2Pos = p2.Position
p2.Assign(p)

p2.Contour.Clear()
p2.Contour.Addition(p2c) //а можно оказывается вместо этих двух строк и так: p2.Contour.Assign(p2c)

p2.Position= p2Pos

[свернуть]


да работает! Спасибо!

Я, пожалуй, повторюсь, однако ОЧ хотелось бы ВСЕ функции в справке.
Оказывается Cutts, Butts и Plastics можно по отдельности копировать. В Assign() параметр тож должен быть Cutts, Butts и Plastics, другой панели например.

Когда все функции будут в справке?
Не верю что сложно записать какой параметр должен быть в функции.
Хотябы запишите все типы параметров, на каждую функцию, которые должны быть, дальше мы и без справки разберёмся.
по приципу цикла с key.

Может просто в этом коде с key добавить таки возможность показывать Типы параметров?

Как взять пути из настроек, например путь Фрагментов?

Вроде бы не плохой вариант запуска VBS:

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


vbs = Action.Properties.Options.CurrentPath + '2.vbs'
vbsText = 'WScript.Echo 2'
system.writeTextFile(vbs, vbsText)
oShell = NewCOMObject ("WScript.Shell")
oShell.run(vbs)


[свернуть]


буду использовать для работы с файловой системой.

Вариант Удаления Файла:

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


file = Action.Properties.Options.CurrentPath + 'Файл'

system.writeTextFile(file, ' ')


if(system.fileExists(file)) {
system.log('Файл есть')
deletefile(file)
}



function deletefile(file)
{
vbsText = 'Dim fso\r\n Set fso = CreateObject("Scripting.FileSystemObject")\r\n fso.DeleteFile("'+file+'")'
vbs = Action.Properties.Options.CurrentPath + 'delFile.vbs'
system.writeTextFile(vbs, vbsText)
oShell = NewCOMObject ("WScript.Shell")
oShell.run(vbs)
while(system.fileExists(file)) {
system.log('жду удаления файла')
system.sleep(500);
}
system.log('Файл удалён!!!')
}
[свернуть]


и всё таки будет ли когда работать в базис скрипте команды КОМ объектов такие как Run c параметрами и DeleteFile и цикл SubFolders ?

Добавлено через 7 минут
Вариант Чтения Списка Файлов в Каталоге:

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


folder = '\\\\192.168.137.5\\!заказы\\__________ПО\\Bazis8\\Фрагменты\\Фрезы'
vbs = Action.Properties.Options.CurrentPath + 'fl.vbs'
fileListFile = Action.Properties.Options.CurrentPath + 'fl'

deletefile(fileListFile)
vbsText = 'Option Explicit\r\nOn Error Resume Next\r\nDim FolderPath \r\nDim objFSO\r\nDim objFolder\r\nDim colFiles\r\nDim objFile\r\nDim s\r\nDim f1\r\n \r\nFolderPath = "'+ folder +'"\r\nSet objFSO = CreateObject("Scripting.FileSystemObject")\r\nSet objFolder = objFSO.GetFolder(FolderPath)\r\nSet colFiles = objFolder.Files\r\n s = "Name Size DateCreated DateLastModified Type"& vbCrLf\r\nFor Each objFile in colFiles\r\n \r\n f1 = objFile.Name & VbTab & objFile.Size & VbTab & objFile.DateCreated & VbTab & objFile.DateLastModified & VbTab & objFile.Type\r\n s = s & f1 \r\n \r\n s = s & vbCrLf\r\n \r\nNext\r\n\r\nWriteText(s)\r\n\r\nSub WriteText(Text)\r\n Dim fso, tf\r\n Set fso = CreateObject("Scripting.FileSystemObject")\r\n Set tf = fso.CreateTextFile("'+fileListFile +'", True)\r\n tf.Write (Text) \r\n tf.Close\r\nEnd Sub'
system.writeTextFile(vbs, vbsText)
oShell = NewCOMObject ("WScript.Shell")
oShell.run(vbs)

while (!system.fileExists(fileListFile)) {
system.sleep(500);
}

fileListText = system.readTextFile(fileListFile);

stroki = fileListText.split('\r\n')


for(i=1;i< stroki.length-1;i++)
{

str = stroki[i].split('\t')

fname = str[0]
fSize = str[1]
fDateCreated = str[2]
fDateLastModified = str[3]
fType = str[4]


log = fname + ' -- ' +fSize + ' -- '+ fDateCreated + ' -- '+ fDateLastModified + ' -- '+ fType
system.log(log)

}

function deletefile(file)
{
vbsText = 'Dim fso\r\n Set fso = CreateObject("Scripting.FileSystemObject")\r\n fso.DeleteFile("'+file+'")'
vbs = Action.Properties.Options.CurrentPath + 'delFile.vbs'
system.writeTextFile(vbs, vbsText)
oShell = NewCOMObject ("WScript.Shell")
oShell.run(vbs)
while(system.fileExists(file)) {
system.log('жду удаления файла')
system.sleep(500);
}
system.log('Файл удалён!!!')
}

[свернуть]

Последний раз редактировалось DTioutiou; 20.03.2016 в 11:39.
v22884 вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Briz (19.03.2016), maxgmv (21.03.2016), zorro (21.03.2016)
Старый 21.03.2016, 11:48   #1029
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 242
Поблагодарили 1,094 раз(а) в 210 сообщениях
Вес репутации: 386
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

askFileName - очень хороший метод.
askFolderName - надо добавить. c хорошим окном(как для файла), а не как для сохранения dxf из библиотеки. (пожалуйста, поменяйте и для для сохранения dxf из библиотеки окно на удобное)

vbs 5 часов искал не нашёл хорошего окна для выбора папки.
ктонить богат решениями?

Вариант Чтения Списка Файлов в Каталоге со всеми свойствами:

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


folder = '\\\\192.168.137.5\\!заказы\\__________ПО\\Bazis8\\Фрагменты\\Фрезы'
readFolder(folder)

function readFolder(folder)
{
vbs = Action.Properties.Options.CurrentPath + 'fl.vbs'
fileListFile = Action.Properties.Options.CurrentPath + 'fl'

deletefile(fileListFile)
vbsText = 'Option Explicit\r\nOn Error Resume Next\r\nDim FolderPath \r\nDim objFSO\r\nDim objFolder\r\nDim colFiles\r\nDim objFile\r\nDim s\r\nDim f1\r\n \r\nFolderPath = "'+folder+'"\r\nSet objFSO = CreateObject("Scripting.FileSystemObject")\r\nSet objFolder = objFSO.GetFolder(FolderPath)\r\nSet colFiles = objFolder.Files\r\n s = "Name Size DateCreated DateLastModified Type Attributes DateLastAccessed Drive ParentFolder Path ShortName ShortPath"& vbCrLf\r\nFor Each objFile in colFiles\r\n \r\n f1 = objFile.Name & VbTab & objFile.Size & VbTab & objFile.DateCreated & VbTab & objFile.DateLastModified & VbTab & objFile.Type & VbTab & objFile.Attributes & VbTab & objFile.DateLastAccessed & VbTab & objFile.Drive & VbTab & objFile.ParentFolder & VbTab & objFile.Path & VbTab & objFile.ShortName & VbTab & objFile.ShortPath\r\n s = s & f1 \r\n '+
' \r\n s = s & vbCrLf\r\n \r\nNext\r\n\r\nWriteText(s)\r\n\r\nSub WriteText(Text)\r\n Dim fso, tf\r\n Set fso = CreateObject("Scripting.FileSystemObject")\r\n Set tf = fso.CreateTextFile("'+fileListFile+'", True)\r\n tf.Write (Text) \r\n tf.Close\r\nEnd Sub'
system.writeTextFile(vbs, vbsText)
oShell = NewCOMObject ("WScript.Shell")
oShell.run(vbs)

while (!system.fileExists(fileListFile)) {
system.sleep(500);
}

fileListText = system.readTextFile(fileListFile);

stroki = fileListText.split('\r\n')

ar = []
for(i=1;i< stroki.length-1;i++)
{

str = stroki[i].split('\t')
f = {}
f.Name = str[0]
f.Size = str[1]
f.DateCreated = new Date(str[2].replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1'));
f.DateLastModified = new Date(str[3].replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1'))
f.Type = str[4]
f.Attributes = str[5]

/* Attributes
Constant Value Description
Normal 0 Normal file. No attributes are set.
ReadOnly 1 Read-only file. Attribute is read/write.
Hidden 2 Hidden file. Attribute is read/write.
System 4 System file. Attribute is read/write.
Volume 8 Disk drive volume label. Attribute is read-only.
Directory 16 Folder or directory. Attribute is read-only.
Archive 32 File has changed since last backup. Attribute is read/write.
Alias 64 Link or shortcut. Attribute is read-only.
Compressed 128 Compressed file. Attribute is read-only.
https://msdn.microsoft.com/en-us/lib...=vs.60%29.aspx
*/

f.DateLastAccessed = new Date(str[6].replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1'));
f.Drive = str[7]
f.ParentFolder = str[8]
f.Path = str[9]
f.ShortName = str[10]
f.ShortPath = str[11]

ar.push(f)
log = f.Name + ' -- ' +f.Size + ' -- '+ f.DateCreated + ' -- '+ f.DateLastModified + ' -- '+ f.Type + ' -- '+ f.Attributes+ ' -- '+ f.DateLastAccessed+ ' -- '+ f.Drive+ ' -- '+ f.ParentFolder+ ' -- '+ f.Path+ ' -- '+ f.ShortName+ ' -- '+ f.ShortPath
system.log(log)

}
system.log(ar.length)
return ar
}


function deletefile(file)
{
vbsText = 'Dim fso\r\n Set fso = CreateObject("Scripting.FileSystemObject")\r\n fso.DeleteFile("'+file+'")'
vbs = Action.Properties.Options.CurrentPath + 'delFile.vbs'
system.writeTextFile(vbs, vbsText)
oShell = NewCOMObject ("WScript.Shell")
oShell.run(vbs)
while(system.fileExists(file)) {
system.log('жду удаления файла')
system.sleep(500);
}
system.log('Файл удалён!!!')
}

[свернуть]

Последний раз редактировалось DTioutiou; 21.03.2016 в 15:51.
v22884 вне форума   Ответить с цитированием Вверх
Старый 22.03.2016, 14:13   #1030
Igor_482
VIP
 
Аватар для Igor_482
 
Регистрация: 03.09.2008
Сообщений: 174
Сказал(а) спасибо: 34
Поблагодарили 794 раз(а) в 113 сообщениях
Вес репутации: 367
Igor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личностьIgor_482 - просто великолепная личность
По умолчанию

Цитата:
Сообщение от Briz Посмотреть сообщение
чтобы пройтись по списку SubFolders нужен специальный Enumerator
Надеялся решение найдется следующим образом:

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

PHP код:
ScriptControl NewCOMObject('MSScriptControl.ScriptControl');
ScriptControl.Language 'JScript';
try {
  
ScriptControl.AddCode(
  
'function GetFileList(Path) {                                \n' +
    
'var List = new String();                                  \n' +
    
'var FSO = new ActiveXObject("Scripting.FileSystemObject");\n' +
    
'var Folder = FSO.GetFolder(Path);                         \n' +
    
'FilesEnum = new Enumerator(Folder.files);                 \n' +
    
'for (; !FilesEnum.atEnd(); FilesEnum.moveNext()) {        \n' +
      
'List += FilesEnum.item() + \n;                          \n' +
    
'};                                                        \n' +
    
'return List;                                              \n' +
  
'};                                                          \n'
  
);
  
system.log(ScriptControl.Run('GetFileList''C:\\'));
} catch(
Error) {
  
system.log(Error.message);
}; 
[свернуть]

но код выполняется до строки "ScriptControl.AddCode()", далее сообщается об ошибке: "...the script engine has not been initialized to a valid language...".
При написании этого же кода в Excel

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

PHP код:
Sub test()
Set ScriptControl CreateObject("MSScriptControl.ScriptControl")
ScriptControl.Language "JScript"
ScriptControl.AddCode _
"function GetFileList(Path) {                                " _
  
"var List = new String();                                  " _
  
"var FSO = new ActiveXObject('Scripting.FileSystemObject');" _
  
"var Folder = FSO.GetFolder(Path);                         " _
  
"FilesEnum = new Enumerator(Folder.files);                 " _
  
"for (; !FilesEnum.atEnd(); FilesEnum.moveNext()) {        " _
  
"  List += FilesEnum.item() + '\n';                        " _
  
"};                                                        " _
  
"return List;                                              " _
"};                                                          " _
)
MsgBox ScriptControl.Run("GetFileList""C:\")
Set ScriptControl = Nothing
End Sub 
[свернуть]
все прекрасно работает.
Просьба пояснить в чем заключается проблема в данном случае.
Igor_482 вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
v22884 (24.03.2016)
Ответ

Нижняя навигация
Вернуться   Форум профессиональных мебельщиков PROMEBELclub > Программы для мебельщиков > Программы для конструирования и дизайна мебели > Система БАЗИС > Базис-мебельщик. Скрипты


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 8 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1525 30.03.2024 15:03
БАЗИС 9 nayrogi Базис-мебельщик 9 785 01.10.2022 23:13
БАЗИС-ЧПУ 8 chingisnah Базис-мебельщик 8 119 21.12.2017 22:04
Заявки на скрипты dr_john Система БАЗИС 37 01.03.2016 10:36
Базис-7,"Народный Базис"и Windows-8 sergeyzak18 "НАРОДНЫЙ" базис 23 16.01.2014 00:37


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


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

џндекс.Њетрика