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

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

Меню

Маркет


Ответ
 
Опции темы Опции просмотра
Старый 06.06.2017, 08:56  
БАЗИС 10 - Скрипты
systland
VIP
Регистрация: 30.10.2007
Адрес: Москва
Сообщений: 565

Сказал(а) спасибо: 303
Поблагодарили 451 раз(а) в 189 сообщениях
Версия для печати Отправить по электронной почте
systland systland вне форума 06.06.2017, 08:56
Рейтинг: ()

Обмениваемся , задаем вопросы, отвечаем... Все, что касается скриптов в БМ 10 в этой теме.
__________________


Последний раз редактировалось systland; 26.12.2017 в 11:52..
Просмотров: 421799
Ответить с цитированием Вверх
Старый 14.06.2019, 16:16   #431
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от TProject Посмотреть сообщение
Уважаемые мебельщики, помогите коллеге. Возникла потребность расстановки позиций с помощью скрипта на выделенные детали. Если у кого то есть подобный скрипт, поделитесь пожалуйста.
В скриптах расстановка позиций доступна только на всю модель. Пилить собственную расстановку вряд ли кому приходило в голову, потому что сравнение объектов - задача трудоёмкая. В результате остаётся один вариант:
Цитата:
Сообщение от Ovsyanicov Посмотреть сообщение
Выделяете детали и нажимаете кнопку "Расставить позиции заново".
Letos вне форума   Ответить с цитированием Вверх
Пользователь сказал cпасибо:
TProject (14.06.2019)
Старый 14.06.2019, 16:26   #432
TProject
Новичок
 
Регистрация: 18.11.2018
Сообщений: 25
Сказал(а) спасибо: 24
Поблагодарили 28 раз(а) в 6 сообщениях
Вес репутации: 0
TProject на пути к лучшему
По умолчанию

Цитата:
Сообщение от Letos Посмотреть сообщение
В скриптах расстановка позиций доступна только на всю модель. Пилить собственную расстановку вряд ли кому приходило в голову, потому что сравнение объектов - задача трудоёмкая. В результате остаётся один вариант:
Да, представления имел... что переменные, сравнения и т.д. Код возможно даже тяжелый был бы, (не изучал программирования, только поверхностные знания имею) но вдруг, все же кто то делал. В этом и вопрос.
TProject вне форума   Ответить с цитированием Вверх
Старый 24.06.2019, 10:03   #433
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 241
Поблагодарили 1,090 раз(а) в 210 сообщениях
Вес репутации: 384
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Как удалить после Action.Commit() ?

p = Model.Selections[0]
pCopy = AddCopy(p);
Action.Commit()

DeleteObject(pCopy); //Здесь не работает.


Или сразу главный вопрос:
Как определить какие именно отверстия из фурнитуры цепляют конкретную панель?
Если, например, в фурнитурине 6 отверстий и больше.
v22884 вне форума   Ответить с цитированием Вверх
Старый 24.06.2019, 14:44   #434
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Как определить какие именно отверстия из фурнитуры цепляют конкретную панель?
можно получить список фурнитуры, скрепляющей панель через panel.FindConnectedFasteners(). Встроенной функции, определяющей, что отверстие находится в конкретной панели, нет. Здесь есть самописный скрипт для выделения панелей с торцевыми отверстиями. В случае вашей задачи, вам не нужна функция CheckWithPanel() (она проверяет соответсвие направления отверстия с направлениями Х и У в ЛСК панели). Основная нужная функция - CheckHole(hole, fast, panel) вернёт true, если отверстие (hole), принадлежащее фурнитуре (fast) находится в панели (panel).
Цитата:
Сообщение от v22884 Посмотреть сообщение
Как удалить после Action.Commit() ?

p = Model.Selections[0]
pCopy = AddCopy(p);
Action.Commit()

DeleteObject(pCopy); //Здесь не работает.
После Action.Commit() объекты копируются из временной области модели в саму модель, соответственно объекта pCopy после коммита не существует. Если вы точно знаете, что будет делать ваш код, то можно попробовать следующий трюк:

Т.к. добавление объектов в модель идёт последовательно, то при добавлении 5 объектов скриптом в модель, последние 5 объектов - добавленные скриптом (небольшая оговорочка - если добавлен блок, содержащий 4 объекта, то в модели последним объектом будет блок, а остальные 4 будут внутри блока, согласно иерархии).
Вот небольшой пример по добавлению объекта, применению изменений и удалению объекта:
PHP код:
// Добавление панели
AddPanel(1001000).Owner;
// Применение действий скрипта с записью в историю
Action.Commit();
// Удаление последнего объекта в модели (панели, добавленной скриптом)
DeleteObject(Model.Objects[Model.Count 1]); 
Letos вне форума   Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
LeoAN (07.07.2019), Ovsyanicov (08.05.2021), v22884 (26.06.2019), zorro (24.06.2019)
Старый 27.06.2019, 12:55   #435
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 241
Поблагодарили 1,090 раз(а) в 210 сообщениях
Вес репутации: 384
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Как получить контур панели с подрезкой канта?
v22884 вне форума   Ответить с цитированием Вверх
Старый 27.06.2019, 16:38   #436
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Как получить контур панели с подрезкой канта?
Я так понимаю, подрезка канта берётся из параметров кромки? Раньше уже был такой вопрос:
Цитата:
Сообщение от wizardpnz Посмотреть сообщение
есть способ получить размер заготовки с учётом минуса под подрезку кромки, или только вычислять ?
Написал для этого простой скрипт (простота заключается в том, что он обрабатывает только прямоугольные панели и только линии):
PHP код:
const SHIFT = {
    
unknown 0,
    
left 1,
    
right 2,
    
top 3,
    
bottom 4
}

function 
MakeShift(sTypesValue) {
    return {
        
typesType// тип сдвига
        
valuesValue// значение сдвига
    
}
}
/**
 * Получить положение линии относительно контура
 * @param {Contour2D} cont Контур
 * @param {Line2D} line Линия
 */
function GetLinePos(contline) {
    
/**
     * Центр линии
     */
    
var lineC = {
        
x: (line.Pos1.line.Pos2.x) / 2,
        
y: (line.Pos1.line.Pos2.y) / 2
    
}
    var 
result SHIFT.unknown;
    
// Если точка, сдивнутая в сторону, находится внутри контура, 
    // значит контур надо сдвигать в обратную сторону
    
if (cont.IsPointInside(lineC.xlineC.1))
        
result SHIFT.bottom;
    else if (
cont.IsPointInside(lineC.xlineC.1))
        
result SHIFT.top;
    else if (
cont.IsPointInside(lineC.1lineC.y))
        
result SHIFT.left;
    else if (
cont.IsPointInside(lineC.1lineC.y))
        
result SHIFT.right;
    return 
result;
}

/**
 * Применить сдвиги к контуру
 * @param {Contour2D} cont 
 * @param {*} shifts 
 */
function applyShifts(contshifts) {
    var 
min cont.Min;
    var 
max cont.Max;
    for (var 
0shifts.lengthi++) {
        var 
shift shifts[i];
        switch (
shift.type) {
            case 
SHIFT.left:
                
min.+= shift.value;
                break;
            case 
SHIFT.right:
                
max.-= shift.value;
                break;
            case 
SHIFT.top:
                
max.-= shift.value;
                break;
            case 
SHIFT.bottom:
                
min.+= shift.value;
                break;
        }
    }
    
cont.Fit(min.xmin.ymax.xmax.y);
}
/**
 * Подрезать контур на толщину кромок с подрезкой
 * @param {Contour2D} cont 
 * @param {PanelButts} butts 
 */
function ClipContour(contbutts){
    var 
shifts = [];
    if (
cont.IsContourRectangle()) { // Только прямоугольный контур
        
for (var 0butts.Counti++) {
            var 
butt butts.Butts[i];
            if (
butt.ClipPanel){
                var 
line cont.Objects[butt.ElemIndex];
                if (!
line.IsLine()) // Если элемент не линия - ничего не делаем
                    
continue;
                
shifts.push(MakeShift(GetLinePos(contline), butt.Thickness));
            }
        }
        
applyShifts(contshifts);
    }
}

var 
panel Model.Selected.AsPanel;
var 
cont NewContour();
cont.Addition(panel.Contour);
var 
butts panel.Butts;
ClipContour(contbutts);
var 
size = {
    
xcont.Max.cont.Min.x,
    
ycont.Max.cont.Min.y
}
alert(`Размеры: ${size.x}x${size.y}`); 
В примере нужно выделить панель, запустить скрипт и алертом выведутся размеры подрезанной заготовки. Для вашей задачи (получить подрезанный контур), нужно использовать функцию ClipContour(cont, butts), которая подрезает контур (cont) на основе данных о кромках (butts). Лучше в эту функцию передавать копию контура панели, иначе после выполнения скрипта, контур панели изменится.
Letos вне форума   Ответить с цитированием Вверх
3 пользователя(ей) сказали cпасибо:
Eng_Serg (30.11.2022), v22884 (28.06.2019), wizardpnz (10.09.2019)
Старый 03.07.2019, 08:58   #437
Batya452
Пользователь
 
Регистрация: 25.11.2016
Адрес: г. Уфа
Сообщений: 38
Сказал(а) спасибо: 39
Поблагодарили 4 раз(а) в 3 сообщениях
Вес репутации: 0
Batya452 пока не определено
По умолчанию

Хорошего дня всем! А сеть скрипт для восстановления пароля от Базы материалов? Найти не могу. Поможете? Спасибо заранее
Batya452 вне форума   Ответить с цитированием Вверх
Старый 04.07.2019, 07:15   #438
wizardpnz
Местный
 
Регистрация: 02.07.2011
Сообщений: 190
Сказал(а) спасибо: 93
Поблагодарили 105 раз(а) в 44 сообщениях
Вес репутации: 195
wizardpnz скоро придёт к известностиwizardpnz скоро придёт к известности
По умолчанию

нужно открыть файл базы данных в стороннем редакторе и там есть таблица типа user или accaunt и удалить там записи с паролями

Последний раз редактировалось wizardpnz; 04.07.2019 в 07:56.
wizardpnz вне форума   Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
anb (07.07.2019), LeoAN (05.07.2019), v22884 (06.07.2019), volunka (04.07.2019)
Старый 06.07.2019, 06:21   #439
v22884
Местный
 
Регистрация: 17.04.2014
Адрес: д.Сибирцево, ателье-уют.рф
Сообщений: 454
Сказал(а) спасибо: 241
Поблагодарили 1,090 раз(а) в 210 сообщениях
Вес репутации: 384
v22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордитсяv22884 за этого человека можно гордится
По умолчанию

Главная задача: DXF с отверстиями по слоям с именами, например o7, o8h10, и т.п.

На этом пути промежуточный результат дырки в панелях:
(спасибо Letos)

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



Model.forEachPanel(function(p) {
fs = krepej(p)
//alert(fs[0])
// fs = fs.split(",")
Dyriavim(fs,p)

}
)





function krepej(p)
{
if(!p.AsPanel) {return}
ar = p.FindConnectedFasteners(p)


return ar
}

function Dyriavim(fs,p)
{
// alert(fs[0])
for(iif=0;iif<fs.length;iif++)
{

f=fs[iif]
// alert(f)
c = f.Holes;


var i = 0;

сk = f.Holes.Count;


HoleCon = NewContour();

while (i < сk) {

if(!CheckHole(c[i],f, p)&&!CheckHole2(c[i],f, p))
{
i++
continue
}

if (CheckWithPanel(f.NToGlobal(c[i].Direction), p))
{
i++
continue
}
if (c[i].Radius<1.9/2)
{
i++
continue
}


HolePosG = f.ToGlobal(c[i].Position);


p.Selected = false

HolePosG = p.ToObject(HolePosG)


if (c[i].Contour==null)
{
HoleCon.AddCircle(HolePosG.x, HolePosG.y, c[i].Radius)
}
else
{
HoleCon.AddList(c[i].Contour.MakeCopy());
HoleCon.Move(HolePosG.x, HolePosG.y)
}
i++
}
MoykaPos = c.Position;

StartEditing(p)
Undo.Changing(p)

//StartEditing(p)
p.Contour.Subtraction(HoleCon);
system.log(p.ArtPos+ " -- "+p.Name)
p.Build()

}




}


// Чуть доработан скрипт Letos'a (длинные отверстия не дырявил)
function CheckHole2(hole,fast, panel){
for(id=1;id<20;id++)
{
if(CheckHole(hole,fast, panel,id/20))
{
return true
}
}
return false
}

function CheckHole(hole,fast, panel,delim){
var holeCenter = fast.ToGlobal({
x: hole.Position.x + hole.Direction.x * (hole.Depth * delim),
y: hole.Position.y + hole.Direction.y * (hole.Depth * delim),
z: hole.Position.z + hole.Direction.z * (hole.Depth * delim),
})
holeCenter = panel.ToObject(holeCenter);
return (holeCenter.x > panel.GMin.x) && (holeCenter.x < panel.GMax.x) &&
(holeCenter.y > panel.GMin.y) && (holeCenter.y < panel.GMax.y) &&
(holeCenter.z > panel.GMin.z) && (holeCenter.z < panel.GMax.z);
}


function Equals(n1, n2){
return Math.abs(n1 - n2) < 0.001;
}

function EqualsV(v1, v2) {
return Equals(v1.x, v2.x) &&
Equals(v1.y, v2.y) &&
Equals(v1.z, v2.z);
}

function CheckWithPanel(gDir, panel){
return (EqualsV(gDir, panel.NToGlobal(AxisX)) ||
EqualsV(gDir, panel.NToGlobal(Axis_X)) ||
EqualsV(gDir, panel.NToGlobal(AxisY)) ||
EqualsV(gDir, panel.NToGlobal(Axis_Y)))
}

[свернуть]



Как узнать глубину отверстия в пласти панели? (при допущении что отверстие в пласть входит перпендикулярно, хотя ... может кто знает как найти и угол вхождения в пласть(некоторые станки могут сверлить под углом)??)
v22884 вне форума   Ответить с цитированием Вверх
Старый 06.07.2019, 21:33   #440
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,029 раз(а) в 366 сообщениях
Вес репутации: 343
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от v22884 Посмотреть сообщение
Как узнать глубину отверстия в пласти панели? (при допущении что отверстие в пласть входит перпендикулярно, хотя ... может кто знает как найти и угол вхождения в пласть(некоторые станки могут сверлить под углом)??)
При допущении, что отверстие входит в пласть перпендикулярно, можно так (функция для использования в скрипте):
PHP код:
/**
 * Глубина отверстия в пласти панели
 * @param {*} hole Отверстие
 * @param {Object3} fast Фурнитура, которой принадлежит отверстие
 * @param {Panel} panel Панель
 */
function HoleFaceDepth(holefastpanel){
    
// минимум и максимум панели
    
var pMin panel.GMin.zpMax panel.GMax.z;
    
// начальная точка отверстия в ЛСК панели по оси Z (ось пласти панели)
    
var holeStart panel.ToObject(fast.ToGlobal(hole.Position)).z;
    
// конечная точка отверстия в ЛСК панели по оси Z (ось пласти панели)
    
var holeEnd panel.ToObject(fast.ToGlobal({
        
xhole.Position.hole.Direction.hole.Depth,
        
yhole.Position.hole.Direction.hole.Depth,
        
zhole.Position.hole.Direction.hole.Depth
    
})).z;
    
// Если начальная координата больше конечной - меняем их местами
    
if (holeStart holeEnd){
        var 
swap holeStart;
        
holeStart holeEnd;
        
holeEnd swap;
    }
    var 
result Math.min(holeEndpMax) -  Math.max(holeStartpMin);
    return 
result

Угол между вектором направления отверстия и вектором пласти панели (последняя функция, остальные вспомогательные):
PHP код:
function VectorDot(v1v2) { 
    return 
v1.v2.v1.v2.v1.v2.z

function 
VectorLength(v) { 
    return 
Math.sqrt(v.v.v.v.v.v.z


function 
VectorsAngle(v1v2){
    return 
Math.acos(VectorDot(v1v2) / (VectorLength(v1) * VectorLength(v2))) * 180 Math.PI
}
function 
AngleBetweenHoleDirAndPanelFace(holefastpanel){
    var 
pDir panel.NToGlobal(AxisZ);
    var 
hDir fast.NToGlobal(hole.Direction);
    return 
VectorsAngle(pDirhDir);

Letos вне форума   Ответить с цитированием Вверх
4 пользователя(ей) сказали cпасибо:
LeoAN (07.07.2019), Ovsyanicov (31.05.2021), v22884 (14.07.2019), wizardpnz (01.10.2019)
Ответ

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

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Базис-Мебельщик 10 systland Базис-мебельщик 10 1264 13.03.2024 22:48
БАЗИС-Мебельщик 7.0 Shadow Базис-мебельщик 7 2230 29.11.2019 10:37
Базис-мебельщик JavaScript ran Ищу работу 0 09.05.2014 10:08


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


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

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