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

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

Меню

Маркет


беспроводные выключатели для мебели
Ответ
 
Опции темы Опции просмотра
Старый 13.01.2014, 13:22  
Скрипты. Готовые решения для БМ8-2023
 
Аватар для Igor_482
Igor_482
VIP
Регистрация: 03.09.2008
Сообщений: 174

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

Этот раздел предназначен для размещения готовых скриптов.
Здесь находятся ТОЛЬКО готовые скрипты. Для обсуждения есть отдельная тема: Обсуждение готовых скриптов.

Авторам:
  1. Давать уникальные названия скриптам (не совпадающие с названием уже выложенных скриптов, за исключением обновлений скрипта)
  2. Указывать работоспособность в разных версиях БМ.
  3. Общее описание работы скрипта.
  4. Если презентованный скрипт платный указывать стоимость, условия и контакты для приобретения.

Версии, указанные модератором, как прошедшие проверку:
8 - Демо-версия 8.0.7.9649
- "народная" 8.0.12.12765
9 - Демо-версия 9.0.8.18908
10 - Демо-версия 10.0.0.21602

Последний раз редактировалось AlexBolton; 03.03.2023 в 21:03..
Просмотров: 536927
Ответить с цитированием Вверх
13 пользователя(ей) сказали cпасибо:
Старый 22.05.2019, 16:33   #61
danzum
Новичок
 
Регистрация: 07.05.2018
Сообщений: 7
Сказал(а) спасибо: 14
Поблагодарили 12 раз(а) в 1 сообщении
Вес репутации: 0
danzum на пути к лучшему
По умолчанию Ростановка фурнитуры

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

PHP код:
FileOptions 'Кріплення.xml';


function 
MakeProperties()
{
Prop Action.Properties;
    
Type Prop.NewCombo('Тип','Горизонтальна\nВерикальна');
    
BlockVisible Prop.NewFurniture('Кріплення видиме');
    
BlockInVisible Prop.NewFurniture('Кріплення приховане');
    
ShkantType Prop.NewFurniture('Шкант');
    
    
    
FurnVis Prop.NewCombo('Видима боковина, верх чи дно','Видима ліва, або верх\nВидима права, або дно\nОбидві видимі\nОбидві не видимі');
    
NumberOnTheSide Prop.NewCombo('Кіл-ть кріплень по стороні''Одне\nДва\nТри');    
    
FastenerPosition Prop.NewCombo('Положення кріплення''Знизу, чи ліворуч від панелі\nЗверхи, чи праворуч від панелі');
    
TypeBasing Prop.NewCombo('База кріплення''Від переднього торця\nВід заднього торця');
    
ShcantWith Prop.NewCombo('Ставити шкант''Ні\nЛіворуч або верх\nПраворуч або дно\nЗ обох боків');
    
    
InitialSize Prop.NewNumber('Min. відстань'37);
    
StepFastener Prop.NewNumber('Крок кріплення'32);

}

MakeProperties()

Action.Properties.Load(FileOptions);

Action.OnFinish = function()
{
Model.UnPickAll();
Action.Properties.Save(FileOptions);
}

Bok1 GetPanel("Вкажіть ліву або верхню панель");
Bok2 GetPanel("Вкажіть праву або нижню панель");


x1 Bok2.GabMin.1;
x2 Bok1.GabMax.1;

while (
true)
{
Polka GetPanel("Виберіть панель що закріплюється");

if (
FastenerPosition.Value == 'Зверхи, чи праворуч від панелі') {Py Polka.GabMax.1
else {
Py Polka.GabMin.1};

z1 Polka.GabMin.z;
z2 Polka.GabMax.z;

if (
Type.Value == 'Горизонтальна')
    {
    
CoordinateA x2;
    
CoordinateB x1;
    
CoordinateC Py;
    
CoordinateD Py;
    }
if (
Type.Value == 'Верикальна')
    {
    
CoordinateA Py;
    
CoordinateB Py;
    
CoordinateC x1;
    
CoordinateD x2;    
    }




if (
TypeBasing.Value == 'Від переднього торця')
{
ZKrep1 Bok1.GabMax.InitialSize.Value;
while (
ZKrep1 z2 StepFastener.Value) { ZKrep1 ZKrep1 StepFastener.Value }

ZKrep2 ZKrep1 StepFastener.Value;
while (
ZKrep2 z1 StepFastener.Value) { ZKrep2 ZKrep2 StepFastener.Value }

ZKrep3 ZKrep1 StepFastener.Value;
while (
ZKrep3 > (z2 ) + StepFastener.Value) { ZKrep3 ZKrep3 StepFastener.Value }
}
else
{
ZKrep1 Bok1.GabMin.InitialSize.Value;
while (
ZKrep1 z1 StepFastener.Value) { ZKrep1 ZKrep1 StepFastener.Value }

ZKrep2 ZKrep1 StepFastener.Value;
while (
ZKrep2 z2 StepFastener.Value) { ZKrep2 ZKrep2 StepFastener.Value }

ZKrep3 ZKrep1 StepFastener.Value;
while (
ZKrep3 < (z2 ) - StepFastener.Value) { ZKrep3 ZKrep3 StepFastener.Value }
    
}


//alert("CoordinateA = "+CoordinateA+"\n"+"CoordinateB = "+CoordinateB+"\n"+"CoordinateC = "+CoordinateC+"\n"+"CoordinateD = "+CoordinateD+"\n"+"Py = "+Py+"\n");


if (NumberOnTheSide.Value == 'Одне')
{
    if (
FurnVis.Value == 'Обидві видимі')
    {
            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockInVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep1)    
            
            
            
    }
    if (
FurnVis.Value == 'Видима ліва, або верх')
    {            
            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep1)                
    }    
    if (
FurnVis.Value == 'Видима права, або дно')
    {
            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1)        
    }    
    if (
FurnVis.Value == 'Обидві не видимі')
    {
            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1)        
    }    

if (
ShcantWith.Value == 'Ліворуч або верх')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
    }
}

if (
ShcantWith.Value == 'Праворуч або дно')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
    }
}

if (
ShcantWith.Value == 'З обох боків')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
    }
}

}

if (
NumberOnTheSide.Value == 'Два')
{
    if (
FurnVis.Value == 'Обидві видимі')
    {        
            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2)

            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1)        
    }
    if (
FurnVis.Value == 'Видима ліва, або верх')
    {                
            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2)

            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1)                
    }    
    if (
FurnVis.Value == 'Видима права, або дно')
    {        
            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2)

            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1)        
    }    
    if (
FurnVis.Value == 'Обидві не видимі')
    {        
            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2)

            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1)        
    }    

if (
ShcantWith.Value == 'Ліворуч або верх')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
    }
}

if (
ShcantWith.Value == 'Праворуч або дно')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
}

if (
ShcantWith.Value == 'З обох боків')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
}

}

if (
NumberOnTheSide.Value == 'Три')
{        
    if (
FurnVis.Value == 'Обидві видимі')
    {        
            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2)

            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1)

            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep3)
            
BlockInVisible.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep3)        
    }
    if (
FurnVis.Value == 'Видима ліва, або верх')
    {                
            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep2)

            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep1)

            
BlockInVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep3)
            
BlockVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep3)                
    }    
    if (
FurnVis.Value == 'Видима права, або дно')
    {        
            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockInVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep2)

            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockInVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep1)

            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep3)
            
BlockInVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep3)        
    }    
    if (
FurnVis.Value == 'Обидві не видимі')
    {        
            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2)
            
BlockVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep2)

            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1)
            
BlockVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep1)

            
BlockVisible.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep3)
            
BlockVisible.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep3)        
    }    
    
if (
ShcantWith.Value == 'Ліворуч або верх')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
    }
}

if (
ShcantWith.Value == 'Праворуч або дно')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2,  CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
}

if (
ShcantWith.Value == 'З обох боків')
{
    if (
TypeBasing.Value == 'Від переднього торця')
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
    else
    {
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep2 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok1CoordinateACoordinateCZKrep1 StepFastener.Value)
        
ShkantType.Value.Mount(PolkaBok2CoordinateBCoordinateDZKrep1 StepFastener.Value)
    }
}

}

Action.Commit();

danzum вне форума   Ответить с цитированием Вверх
12 пользователя(ей) сказали cпасибо:
Старый 23.05.2019, 17:18   #62
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию Подсчёт площади поверхности объекта

Скрипт для подсчёта всей площади поверхности объекта. Погрешность вычислений зависит от параметров Базиса "Гладкость дуг" (меньше - хуже) и "ядро C3D" (выкл. - хуже).

Обсуждение скрипта и предложения по доработке писать сюда

Код

PHP код:
var area 0
// Получение площади поверхности объекта 
function GetSurfaceArea(obj){ 
  var 
result 0
  if (
obj.TriListsCount 0) { 
      for (var 
0obj.TriListsCountt++) { 
          var list = 
obj.TriLists[t]; 
          
result += list.SurfaceArea(); 
      } 
  } 
  return 
result


//Обработка объекта и вложенных объектов. 
function ProcessObject(obj){ 
    if (
obj.List){ 
        for (var 
0obj.AsList().Counti++){ 
            
ProcessObject(obj[i]); 
        } 
    } 
    else 
        
area += GetSurfaceArea(obj); 


for (var 
0Model.SelectionCounti++){ 
    var 
obj Model.Selections[i]; 
    
ProcessObject(obj); 


alert('Площадь поверхности выделенных объектов = ' area 'mm\u00b2'); 
[свернуть]
Вложения
Тип файла: rar surfaceArea.rar (502 байт, 198 просмотров)
Letos вне форума   Ответить с цитированием Вверх
14 пользователя(ей) сказали cпасибо:
Старый 15.08.2019, 12:35   #63
Ovsyanicov
Местный
 
Регистрация: 30.11.2013
Адрес: Кишинев
Сообщений: 734
Сказал(а) спасибо: 1,529
Поблагодарили 884 раз(а) в 376 сообщениях
Вес репутации: 402
Ovsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордитсяOvsyanicov за этого человека можно гордится
По умолчанию Поиск панелей по позициям

Цитата:
Сообщение от Uncle Посмотреть сообщение
К стати, одно неудобство в данном скрипте... Если скрипт запустить, но сразу же нажать кнопку Отмена, Базис слегка зависает, а потом выделяется все, что есть на модели. Нельзя как то устранить эту малоприятную особенность? Что бы просто, нажав Отмену, скрипт тут же закончил свою работу.
Добавил в скрипт выделения панелей по позициям обработчик, чтобы при отмене скрипта не выделялись какие-либо панели

Код

PHP код:
UnSelectAll();
Action.OnFinish = function(){
    if(
positions == '')
        
UnSelectAll();
}
var 
positions prompt("Введите номера позиций через пробел");
var 
nums positions.split(' ');
var 
finded = [];
function 
contains(arrelem) {
    for (var 
0arr.lengthi++) {
        if (
arr[i] === elem) {
            return 
true;
        }
    }
    return 
false;
}
Model.forEach(function(obj) {
    if (
obj) {
        if (
nums.indexOf(obj.ArtPos) >= 0) {
            
obj.Selected true;
            
finded.push(obj.ArtPos);
        }
    }
})
str '';
for (
i=0;i<nums.length;i++){
    if (!
contains(findednums[i])){
        
str=str+nums[i]+',';
    }
}
if (!
str==''){
    
alert('Не найдены позиции: '+str)

[свернуть]


UPD:

"Причесал" вывод сообщения о ненайденных панелях - немного раздражала лишняя запятая в конце строки ))

Код

PHP код:
UnSelectAll();
Action.OnFinish = function(){
    if(
positions == '')
        
UnSelectAll();
}
var 
positions prompt("Введите номера позиций через пробел");
var 
nums positions.split(' ');
var 
finded = [];
var 
not_finded = [];
function 
contains(arrelem) {
    for (var 
0arr.lengthi++) {
        if (
arr[i] === elem) {
            return 
true;
        }
    }
    return 
false;
}
Model.forEach(function(obj) {
    if (
obj) {
        if (
nums.indexOf(obj.ArtPos) >= 0) {
            
obj.Selected true;
            
finded.push(obj.ArtPos);
        }
    }
})
//str = '';
for (i=0;i<nums.length;i++){
    if (!
contains(findednums[i])){
        
//str=str+nums[i]+',';
        
not_finded.push(nums[i]);
    }
}
if (
not_finded.length 0){
    
alert('Не найдены позиции: '+not_finded)

[свернуть]

Последний раз редактировалось Ovsyanicov; 15.08.2019 в 15:47. Причина: Дополнение
Ovsyanicov вне форума   Ответить с цитированием Вверх
16 пользователя(ей) сказали cпасибо:
Старый 11.10.2019, 12:25   #64
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Надписи на панели с предварительно подготовленными вектарами.

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

мне лично нужно чтоб отправлять в DXF и знать где какая деталь, потому что много очень похожих деталей, но надо точно знать где какая.
(Апроксимирую вогнутый выпуклый поворот стола полосками пластика)
Изменил скрипт.
В новой версии добавлена возможность брать позицию панели. Также можно отключить интерактивный режим (не требовать от пользователя при каждом запуске выбирать, откуда брать панель). Для этого нужно выставить значение переменной interactive равное false и задать значение переменной mode.

Код скрипта v5


PHP код:
const settingsFile 'PanelNumbers.xml';
/**
 * Масштаб фрагмента
 */
const fragScale 10;
/**
 * Режим работы скрипта
 * 0 - надпись из имени панели
 * 1 - надпись из позиции
 */
var mode 0;

/**
 * Константа, указывающая, является ли скрипт интерактивным
 * Правится вручную под нужды пользователя
 */
const interactive true;

/**
 * ДЛя БМ8
 * @param {Contour2D} cont 
 */
function GetMax(cont) {
    var 
result = {
        
x: -100000000,
        
y: -100000000
    
}
    for (var 
0cont.Counti++) {
        var 
item cont.Objects[i];
        switch (
item.ElType) {
            case (
1): //ElementType.Line
                
var p1 item.AsLine().Pos1;
                var 
p2 item.AsLine().Pos2;
                
result.Math.max(result.xp1.xp2.x);
                
result.Math.max(result.yp1.yp2.y);
                break;
            case (
2): //ElementType.Arc
                
var p1 item.AsArc().Pos1;
                var 
p2 item.AsArc().Pos2;
                var 
item.AsArc().Center;
                
result.Math.max(result.xp1.xp2.xc.x);
                
result.Math.max(result.yp1.yp2.yc.y);
                break;
            case (
3): //3ElementType.Circle
                
var cir item.AsCircle();
                var 
cir.Center;
                
result.Math.max(result.xc.cir.CirRadius);
                
result.Math.max(result.yc.cir.CirRadius);
        }
    }
    return 
result;
}

/**
 * ДЛя БМ8
 * @param {Contour2D} cont 
 */
function GetMin(cont) {
    var 
result = {
        
x100000000,
        
y100000000
    
}
    for (var 
0cont.Counti++) {
        var 
item cont.Objects[i];
        switch (
item.ElType) {
            case (
1): //ElementType.Line
                
var p1 item.AsLine().Pos1;
                var 
p2 item.AsLine().Pos2;
                
result.Math.min(result.xp1.xp2.x);
                
result.Math.min(result.yp1.yp2.y);
                break;
            case (
2): //ElementType.Arc
                
var p1 item.AsArc().Pos1;
                var 
p2 item.AsArc().Pos2;
                var 
item.AsArc().Center;
                
result.Math.min(result.xp1.xp2.xc.x);
                
result.Math.min(result.yp1.yp2.yc.y);
                break;
            case (
3): //ElementType.Circle
                
var cir item.AsCircle();
                var 
cir.Center;
                
result.Math.min(result.xc.cir.CirRadius);
                
result.Math.min(result.yc.cir.CirRadius);
        }
    }
    return 
result;
}

// В БМ8 у контура нет свойств Min и Max, поэтому приходится выкручиваться.
// Берём наиболее удалённую точку и ищем ближайшую точку контура.
// На непрямоугольных панелях может некорректно работать.
/**
 * 
 * @param {Contour2D} cont 
 */
function GetContourMin(cont) {
    if (
cont.Min) {
        return 
cont.Min
    
}
    else { 
//ДЛя БМ8
        
return GetMin(cont)
        
// var min = {
        //     x: -10000000,
        //     y: -10000000
        // }
        // return cont.ClosestPoint(min);
    
}
}
/**
 * 
 * @param {Contour2D} cont 
 * @returns {Point}
 */
function GetContourMax(cont) {
    if (
cont.Max) {
        return 
cont.Max
    
}
    else { 
//ДЛя БМ8
        
return GetMax(cont);
        
// var max = {
        //     x: 10000000,
        //     y: 10000000
        // }
        // return cont.ClosestPoint(max);
    
}
}

var 
combo;
if (
interactive) {
    
combo Action.Properties.NewCombo('Брать из панели''Имя\nПозицию');
    
combo.OnChange combo.OnValueChange =
        function () {
            
mode combo.ItemIndex
        
};
    
Action.Properties.NewButton('Применить').OnClick = function () {
        Do();
        
Action.Finish();
    }
    
Action.Properties.Load(settingsFile);
    
mode combo.ItemIndex;
    
Action.OnFinish = function () {
        
Action.Properties.Save(settingsFile);
    }
    
Action.Continue();
}
else
    Do();


function 
CorrectSubContourPositionByPoint(subsrcp) {
    if (!
src.IsPointInside(p)) {
        var 
closedSrc src.ClosestPoint(p);
        var 
shift = {
            
xclosedSrc.p.x,
            
yclosedSrc.p.y
        
}
        
sub.Move(shift.xshift.y);
        
// sub.Move(shift);
        
return true;
    }
    return 
false;
}

/**
 * Попытка вписать вычитаемый контур в исходный
 * @param {Contour2D} sub Вычитаемый контур
 * @param {Contour2D} src Исходный контур
 */
function CorrectSubContourPosition(subsrc) {
    var 
subMax GetContourMax(sub);
    var 
corrected CorrectSubContourPositionByPoint(subsrcsubMax);
    var 
subMin GetContourMin(sub);
    
corrected |= CorrectSubContourPositionByPoint(subsrcsubMin);
    if (
corrected) {
        
subMin GetContourMin(sub);
        
subMax GetContourMax(sub);
    }
    var 
p1 = {
        
xsubMax.x,
        
ysubMin.y,
    }
    
corrected CorrectSubContourPositionByPoint(subsrcp1)
    if (
corrected) {
        
subMin GetContourMin(sub);
        
subMax GetContourMax(sub);
    }
    var 
p2 = {
        
xsubMin.x,
        
ysubMax.y,
    }
    
corrected CorrectSubContourPositionByPoint(subsrcp2)
}

function Do() {
    for (var 
0Model.SelectionCounti++) {
        
/** @type {Panel}*/
        
var pan Model.Selections[i].AsPanel;
        if (
pan) {
            
Undo.Changing(pan);
            var 
pan.Contour
            
var '';
            switch (
mode) {
                case 
0:
                    
pan.Name;
                    break;
                case 
1:
                    
pan.ArtPos;
                    break;
            }
            
n.toUpperCase();
            
nl n.length
            
var min GetContourMin(c);
            var 
max GetContourMax(c);
            var 
center = {
                
x: (min.max.x) / 2,
                
y: (min.max.y) / 2
            
}
            var 
polojeniyePosledSimvola 0;
            const 
rasstoyaniyemejdusimvolami 0.2
            
var NewContour();
            for (
ni 0ni nlni++) {
                var 
add NewContour()
                
add.Load(n[ni] + '.frw');
                var 
ss MashtabirovaniyeContura(addfragScale)
                
polojeniyePosledSimvola polojeniyePosledSimvola rasstoyaniyemejdusimvolami ss.Width
                ss
.Move(polojeniyePosledSimvola0)
                
polojeniyePosledSimvola polojeniyePosledSimvola ss.Width
                s
.Addition(ss);
            }
            
system.log(JSON.stringify(center));
            var 
sCenter = {
                
x: (GetContourMin(s).GetContourMax(s).x) / 2,
                
y: (GetContourMin(s).GetContourMax(s).y) / 2,
            };
            
system.log(JSON.stringify(sCenter));
            
s.Move(center.sCenter.xcenter.sCenter.y);
            
CorrectSubContourPosition(sc);
            var 
sCenter = {
                
x: (GetContourMin(s).GetContourMax(s).x) / 2,
                
y: (GetContourMin(s).GetContourMax(s).y) / 2,
            };
            
system.log(JSON.stringify(sCenter));
            
c.Subtraction(s);
            
pan.Build()
        }
    }
}

function 
MashtabirovaniyeContura(sconturscale) {
    
scontur
    sh 
s.Height
    sw 
s.Width
    s
.Fit(00swsh)
    
ss NewContour()
    
sc s.Count
    
for (0sci++) {
        if (
s[i].ElType == 1) {
            
x1 s[i].Pos1.scale
            y1 
s[i].Pos1.scale
            x2 
s[i].Pos2.scale
            y2 
s[i].Pos2.scale
            ss
.AddLine(x1y1x2y2)
        }
        if (
s[i].ElType == 2) {
            
p1 NewPoint(s[i].Pos1.scales[i].Pos1.scale)
            
p2 NewPoint(s[i].Pos2.scales[i].Pos2.scale)
            
centre NewPoint(s[i].Center.scales[i].Center.scale)

            
//проверка тру или фелс в направлении дуги
            
p1t NewPoint(s[i].Pos1.xs[i].Pos1.y)

            
p2t NewPoint(s[i].Pos2.xs[i].Pos2.y)

            
centre_t NewPoint(s[i].Center.xs[i].Center.y)

            
st NewContour()
            
st.AddArc(p1tp2tcentre_ttrue)
            if (
st[0].ObjLength() == s[i].ObjLength()) {
                
napravleniye true
            
}
            else {
                
napravleniye false
            
}
            
//----проверка тру или фелс в направлении дуги
            
ss.AddArc(p1p2centrenapravleniye)
        }

        if (
s[i].ElType == 3) {
            
xc s[i].Center.scale
            yc 
s[i].Center.scale
            rad 
s[i].CirRadius scale
            ss
.AddCircle(xcycrad)
        }
    }
    return 
ss

[свернуть]


Обновление 1: поправил работу скрипта в 8 версии.

Обновление 2: поправил работу скрипта с контурами, начинающимися не с 0 по ЛСК и обновил код в спойлере

Обновление 3 (12.10.19): Добавил сохранение настроек. Поправил положение надписи- теперь центр надписи совпадает с центром контура панели.

Обновление 4 (14.10.19): Поправил работу скрипта в БМ8 (у контура отсутствовали свойства Min и Max), поправил загрузку настроек (Загружалась в свойства настройка "Позиция", а режим в скрипте не менялся, поэтому брался режим "Имя").

Обновление 5 (17.10.19):
  • Поправил работу с нестандартными контурами: Если при расположении контура вычитания в центре габаритного прямоугольника контура панели контур вычитания выходит за границы контура панели, скрипт пытается сдвинуть контур вычитания так, чтобы он весь уместился на контуре панели.
  • Исправил вычисления минимума/максимума для контура в БМ8.
Из-за отсутствия свойств Min и Max у контура в БМ8 возможны различия в позиционировании контура вычитания между версиями БМ8 и БМ9+



Обсуждение скрипта и предложения по доработке писать сюда
Вложения
Тип файла: rar Номера на деталях.rar (7.1 Кб, 514 просмотров)

Последний раз редактировалось Letos; 17.10.2019 в 09:57. Причина: обновление 5
Letos вне форума   Ответить с цитированием Вверх
23 пользователя(ей) сказали cпасибо:
Старый 15.01.2020, 11:24   #65
zorro
VIP
 
Аватар для zorro
 
Регистрация: 18.01.2008
Сообщений: 1,047
Сказал(а) спасибо: 2,864
Поблагодарили 1,852 раз(а) в 435 сообщениях
Вес репутации: 695
zorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущееzorro обеспечил(а) себе прекрасное будущее
По умолчанию

Скрипт для построение панели по трем любым точкам не обязательно лежащим на плоскостях координат. Панель тогда будет наклонена под "дикими" углами.
Строится треугольная панель из текущего материала. Если точки задавать по часовой стрелке, толщина панели идет "от нас". Если точки задавать против часовой стрелки, толщина панели идет "на нас". Все по "правилу буравчика". Построенную панель можно вызвать на редактирование и треугольный контур заменить на любой другой. Все "дикие" углы поворота относительно осей сохраняются. Углы МЕЖДУ панелями можно померить Измерения/Угол между плоскостями. Около координат показывается острый и тупой угол. Угол нужен для расчета угла зарезания для паза Фаска. Линию пересечения плоскостей можно найти Вспомогательные построения/Пересечение плоскостей. По линии пересечения строится вспомогательная линия. При редактировании панели она не исчезает и точки пересечения этой линии с контуром панели можно захватить и тем самым обрезать панель до линии пересечения.

PHP код:
while (true)
{
p1 GetPoint("Укажите точку 1");
p2 GetPoint("Укажите точку 2");
p3 GetPoint("Укажите точку 3");
p1 = new Vector(p1.xp1.yp1.z);
p2 = new Vector(p2.xp2.yp2.z);
p3 = new Vector(p3.xp3.yp3.z);
v1 p1.subtract(p2);
v2 p1.subtract(p3);
normal v1.cross(v2);
panel AddHorizPanel(0010100);
panel.Orient(normalv1);
panel.Contour.Clear();
panel.Position p1;
p2 panel.ToObject(p2);
p3 panel.ToObject(p3);
panel.Contour.AddLine(00p2.xp2.y);
panel.Contour.AddLine(p2.xp2.yp3.xp3.y);
panel.Contour.AddLine(p3.xp3.y00);
//panel.Thickness = 1;
panel.Build();
Action.Commit();


Последний раз редактировалось AlexBolton; 03.03.2023 в 17:54.
zorro вне форума   Ответить с цитированием Вверх
20 пользователя(ей) сказали cпасибо:
Старый 14.02.2020, 21:03   #66
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 162
Сказал(а) спасибо: 57
Поблагодарили 242 раз(а) в 45 сообщениях
Вес репутации: 137
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию Скрипт обувница

Скрипт для построения обувницы с выбором по количеству отсеков. Делал для себя, надоело вставлять фрагменты.
Работает в версиях:
8н в остальных не проверял.
Вложения
Тип файла: rar Обувница.rar (9.0 Кб, 831 просмотров)
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
31 пользователя(ей) сказали cпасибо:
Старый 05.05.2020, 21:18   #67
АлКузнецов
Местный
 
Аватар для АлКузнецов
 
Регистрация: 15.04.2012
Адрес: Санкт-Петербург
Сообщений: 104
Сказал(а) спасибо: 56
Поблагодарили 276 раз(а) в 63 сообщениях
Вес репутации: 211
АлКузнецов как роза среди колючекАлКузнецов как роза среди колючекАлКузнецов как роза среди колючек
По умолчанию Скрипт построения гайки

Учился работать в JS с контурами, написал скрипт который чертит гайки. Может кому пригодиться.

создать гайку или головку болта

PHP код:

  
function okrugl(chn) {
  
// функция округления числа с заданной тоносттью
  // ch - число
  // n - количество знаков
    
if(isNaN(ch) || isNaN(n)) return false;
    var 
Math.pow(10,n);
  return 
Math.round(ch*m)/m;
}

var 
Sq =  13//prompt("размер ключа "); // Размер «под ключ»              //условно = 1.0
var lz =  1.25;  //prompt("шаг резьбы "); // Размер «под ключ»              //условно = 1.0
lz lz 1;
Sq Sq lz/6;
var 
Panel AddPanel();
var 
Panel.Contour ;

// строим шестигранник

var okrugl(Sq 1.1547005/23);        // радиус описанной окружности     //условно = 0.577'35025
var okrugl(Sq/23);                // отступы по "X"                //условно = 0.5
var okrugl(Sq 1.1547005/43);        // отступы по "Y"                //условно = 0.288'67512599
Panel.Thickness lz/2;  //            //Толщина гайки
Panel.Name 'Головка болта';
Panel.MaterialName 'Сталь';
//------------------------------------
var Line = [];
var 
0;
Line[++i] = C.AddLine(0cab);
Line[++i] = C.AddLine(aba, -b);
Line[++i] = C.AddLine(a, -b0, -c);
Line[++i] = C.AddLine(0, -c, -a, -b);
Line[++i] = C.AddLine(-a, -b, -ab);
Line[++i] = C.AddLine(-ab0c);


var 
fas Panel.AddCut('Ключ на 'okrugl(Sq0));
fas.Trajectory.AddCircle(00c+0.125/2)
var 
Fg fas.Contour;
//++++++++++++++++++++++++++++
// контур внешней фаски головки болта 6 линий
var dw lz*1.25;    //диаметр внешней фаски
var d_w dw/12.5;    //малая фаска
var hf lz*1.1;    //высота фаски
var lf lz*0.5;    //ширина фаски
var wf Panel.Thickness dw/10;    //длина ребра

Line[++i] = Fg.AddLine(-dw/10, -dw/10dw, -dw/10); // нижняя граница паза
Line[++i] = Fg.AddLine(-dw/10wfdwwf);  // верхняя граница паза
Line[++i] = Fg.AddLine(-dw/10, -dw/10, -dw/10wf);  // левая вертикальная
Line[++i] = Fg.AddLine(lf/4lflf/4wf-lf); // правая вертикальная
Line[++i] = Fg.AddLine(lf/4wf-lfdwwf);// верхняя наклонная
Line[++i] = Fg.AddLine(lf/4lfdw, -dw/10);// нижняя наклонная


var hz okrugl(lz*0.8660254037844393);   // lz*√3/2 = "шаг резьбы" х 0.866025403784439
var dn okrugl(hz1);                     //номинальный диаметр резьбы

//alert("диаметр контура" + dn );
Line[++i] = C.AddCircle(00okrugl(dn/3) ); // добавляем отверстие в панель
Panel.Name 'Гайка шестигранная,  М'okrugl(a+lz0) + 'х' okrugl(Panel.Thickness1);
Panel.ArtPos 'ГОСТ 5927-70(DIN 934)';
var 
rezba Panel.AddCut('Резьба М'okrugl(a+lz0));
rezba.Trajectory.AddCircle(00okrugl(dn-0.013) /2)
var 
zub rezba.Contour;
rezba.Name 'Резьба М'okrugl(a+lz0);
rezba.Sign 'М'okrugl(a+lz0);
//++++++++++++++++++++++++++++
// котур контур нарезки резьбы
qWf okrugl((wf+lz)/lz -10); //количество витков резьбы
//alert("количество витков резьбы " + qWf);
grN wf/qWf*lz/// расчет горизонтальной оси

for (var id_l 0;id_l qWf; ++id_l )
    {

Line[++i] = zub.AddLine(0lzhzlf);// верхняя наклонная
Line[++i] = zub.AddLine(hzlf00);// верхняя наклонная
    
zub.Move(0lz)
    }
    
zub.Move(-0, -lz)
Line[++i] = zub.AddLine(002*lz,0);// горизонтальная
Line[++i] = zub.AddLine(2*lz,02*lzqWf*lz);// вертикальная
Line[++i] = zub.AddLine(2*lzqWf*lz0,qWf*lz);// горизонтальная
//alert("зуб замкнут " + zub.IsClosedContour());
zub.Move(-hz/5*4, -lf*0.7)

//++++++++++++++++++++++++++++++++++ 
[свернуть]


Добавлено через 4 минуты
Тело по траектории нельзя сверлить или присаживать, а вот профилированную панель можно

Скрипт строит профильную трубу нужного сечения и толщины стенок


PHP код:
  function okrugl(chn) {
  
// функция округления числа с заданной точностью
  // ch - число
  // n - количество знаков
    
if(isNaN(ch) || isNaN(n)) return false;
    var 
Math.pow(10,n);
  return 
Math.round(ch*m)/m;
}


/* контур прямой прфильной или круглой трубы*/

var w_ 40;         //ширина рофиля
var h_ 25;         //толщина профиля
var tS 2.5;            //толщина стенки
var rTs okrugl(tS*0.2928933)
var 
Panel AddPanel(w_1000);
Panel.Thickness h_;  //            //Толщина гайки
Panel.Name 'Труба профильная';
Panel.MaterialName 'Труба ' h_ +"x"w_ +"x"+tS;
var 
point Panel.GabMin;

var 
Rect = [];
var 
ip 0;

var 
pr Panel.AddCut('профиль трубы 'w_ +"x"h_ +"x"+tS); //фрезеруем профиль
pr.Trajectory.AddLine(point.x+w_point.ypoint.x+w_point.y+1000); // траектория паза)
var fr pr.Contour;        //fr - это контур паза
var stik NewContour();    //контур вычитаемого стыка
Rect[++ip] = fr.AddRoundRect(0.0250.025w_-0.025h_0.025tS);
Rect[++ip] = fr.AddRectangle(-0.5,-0.005w_+0.005h_+0.005);
Rect[++ip] = fr.AddRectangle(tStSw_-tSh_-tS);
Rect[++ip] = stik.AddRectangle(tS,h_+0.03w_ tSh_-0.03);
fr.Subtraction(stik)
Rect[++ip] = stik.AddRectangle(w_/2,-0.005w_/2+0.005tS+1);
fr.Addition(stik)
Rect[++ip] = fr.AddLine(w_ tSh_-0.025w_-tSh_+0.005); 
[свернуть]
__________________
С уважением Кузнецов Александр
АлКузнецов вне форума   Ответить с цитированием Вверх
6 пользователя(ей) сказали cпасибо:
Старый 20.06.2020, 12:36   #68
Максим Геннадьевич
Местный
 
Регистрация: 11.04.2018
Адрес: г.Маркс
Сообщений: 162
Сказал(а) спасибо: 57
Поблагодарили 242 раз(а) в 45 сообщениях
Вес репутации: 137
Максим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личностьМаксим Геннадьевич - весьма и весьма положительная личность
По умолчанию Просмотр свойств объекта

Работает в версии 8.
В переменную "о" вносим нужные нам свойства и получаем значения. В примере укажите евровинт и узнаете много нового о нем). Писал для себя, чтоб найти примерно где и что. Хотелось бы в него внести, что то , но сам не знаю что).
Код HTML:
var obj =  GetObject("Укажите объект");
//Вносим нужные функции
var o = obj.Holes.List[1];
var st = 'Список значений';
for(var k in o){
st = st + '\n' + ( "Ключ: " + k + " значение: " + o[k] ) ;
}
alert('Oбъект ' + o + '\n' + st);
Максим Геннадьевич вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
kostiaarh (20.06.2020), sergio1982 (14.10.2020), vi_za_vi (02.03.2023)
Старый 14.10.2020, 10:04   #69
Анатолий.ru
Пользователь
 
Регистрация: 22.07.2014
Адрес: Sochi
Сообщений: 83
Сказал(а) спасибо: 143
Поблагодарили 134 раз(а) в 36 сообщениях
Вес репутации: 153
Анатолий.ru скоро придёт к известностиАнатолий.ru скоро придёт к известности
По умолчанию Выделение по маске.

Параметры выделения:
1) Кромка.
2) Паз.
3) Имя панели.
4) Имя панели содержит.
5) Контур не прямоугольный.
6) Контур с дугами или окружностями.

Версии:
10
11
Вложения
Тип файла: zip Выделение по маске.zip (1.2 Кб, 254 просмотров)
Анатолий.ru вне форума   Ответить с цитированием Вверх
11 пользователя(ей) сказали cпасибо:
Старый 14.10.2020, 13:01   #70
donik
Местный
 
Аватар для donik
 
Регистрация: 12.01.2008
Адрес: Украина
Сообщений: 345
Сказал(а) спасибо: 8,120
Поблагодарили 1,244 раз(а) в 242 сообщениях
Вес репутации: 481
donik за этого человека можно гордитсяdonik за этого человека можно гордитсяdonik за этого человека можно гордитсяdonik за этого человека можно гордитсяdonik за этого человека можно гордитсяdonik за этого человека можно гордитсяdonik за этого человека можно гордитсяdonik за этого человека можно гордитсяdonik за этого человека можно гордится
По умолчанию

Выделение по маске,Dmitry Silaev выложил в телеграмм канале BazissofT, больше функционала для выделения.
Миниатюры
впм свойства.jpg  
Вложения
Тип файла: rar Выделение по маске.rar (2.9 Кб, 399 просмотров)
donik вне форума   Ответить с цитированием Вверх
22 пользователя(ей) сказали cпасибо:
Ответ

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

Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БАЗИС 11-2023 - Скрипты AlexBolton Базис-мебельщик. Скрипты 968 23.03.2024 13:39
БАЗИС 9 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1441 27.02.2024 10:48
Скрипты в чертежах sergio1982 Базис-мебельщик. Скрипты 35 10.02.2024 15:45
БАЗИС 8 - Скрипты Igor_482 Базис-мебельщик. Скрипты 1524 07.12.2022 19:53
Заявки на скрипты dr_john Система БАЗИС 37 01.03.2016 10:36


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


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

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