Страница 6 из 7

Re: Идея небольшой утилитки

Добавлено: 24 фев 2014, 10:49
aaleksander
Nick писал(а):А в чем проблема с дугами? Там вроде не так сложно все...
Изначально так исторически сложилось.
Трудность начинается, когда перемычка на дугу попадает.

А по спирали - это даже не наклонное врезание, а вообще: по всему контуру с постепенным заглублением?

Re: Идея небольшой утилитки

Добавлено: 24 фев 2014, 10:54
Nick
Да, с добавлением траектории (чтобы замкнуть контур или возвращением назад - если контур не замкнут.

Для замкнутого я даже сделал на Gкоде, но вот на разомкнутом застопорился.... уж слишком это Gкод разворачивать на Gкоде :).

А в чем проблема с перемычкой на дуге? Надо просто сделать функцию разбиения дуги на две. Там пара строчек.
Кстати, в Gcodetools есть много всяких функций для работы с дугами и кривыми - там несколько классов - arc, line и общий - biarc.

Re: Идея небольшой утилитки

Добавлено: 24 фев 2014, 13:41
aaleksander
Проблемы с дугами и перемычками нет. Надо сесть и сделать. Но ведь все работает... зачем трогать :beer_blow: К тому же там не просто на две дуги разбить: перемычка может "занять" часть дуги (тогда бьем на две части), может оказаться в серединке дуги (уже на три участка: дуга-перемычка-дуга), плюс всякие граничные значения. Короче, я еще могу двадцать причин найти, чтобы не делать :lol:
И еще: изначально просто хотел писать УП на работе, за виндой. И затевал все это ради визуализатора, чтобы обходиться без EMC. А визуализатор все равно дугу на отрезки разбивает.
Так что вот.
Хотел еще сказать, что штука полезна для параметрических программ.
Вчера писал программу для ящичка с шиповыми соединяниями. Из ламината.
Ввел в начале параметры: радиус фрезы, толщина ламината (размер шипа от него зависит), величину подрезки углов.
Если окажется, что шипы не влазят, я просто поменяю одну переменную и можно заново запускать.

У меня уже есть программы для вырезания коробочек, заглушки для труб, сейчас вот ящички дописываю. Вставляешь заготовку, вводишь параметры - и готово. Главное - не забыть заготовку на стол положить.

Re: Идея небольшой утилитки

Добавлено: 26 фев 2014, 17:56
aaleksander
Сделал примитивный оффсет (есть глюки, неточности, но нетерпелось похвастаться).
Ща пойду в гараж испытывать :tongue:

Код: Выделить всё

# -*- coding: utf-8 -*-

from py2gcode import *

str = ' тут строка из InkScape'
t = SvgTrajectory(str)

#создаем траектории-оффсеты
o = Offset(t, 1.5) #оффсет наружу
o2 = Offset(t, -1.5) #оффсет внутрь

preview2D([t, o, o2], 5, options={'hideRef': True}) #смотрим траектории в 2Д

def f():
    G0(0, 200, 5)
    c = Strategy()
    c.mill(o, x=0, y=0, options={'z': -10})
    G0(Z=5)
    c.mill(o2, x=0, y=0, options={'z': -10})
    G0(Z=5)
    c.mill(t, x=0, y=0, options={'z': -10})

preview(f)

Re: Идея небольшой утилитки

Добавлено: 26 фев 2014, 20:35
aaleksander
Вернулся из гаража. Все работает, почти как надо! Есть небольшой глюк в генерации траектории, но на внешний вид это не влияет. Завтра подправлю.
Итак. Фреза 3мм, кукуруза. Ламинат.
Первый блин. Честные оффсеты: +1.5мм, -1.5мм. Есть небольшой зазар.
IMG_20140226_195954.jpg (3102 просмотра) <a class='original' href='./download/file.php?id=25285&mode=view' target=_blank>Загрузить оригинал (466.74 КБ)</a>
Вторая попытка: дырка таже, капелька с оффсетом +1.42мм.

Re: Идея небольшой утилитки

Добавлено: 26 фев 2014, 21:12
tooshka
aaleksander писал(а):Все работает, почти как надо!
А пересечение двух дуг углом вовнутрь? Как получится?

Re: Идея небольшой утилитки

Добавлено: 26 фев 2014, 22:00
aaleksander
Если фреза пролезет - то получится. Но лучше спроектировать траекторию так, чтобы фрезе было "просторно".
Для острых углов обычно стыкуют три и более детали.

Re: Идея небольшой утилитки

Добавлено: 27 фев 2014, 10:48
Nick
А что будет если контур станет двухсвязным из односвязного?
Т.е. скажем такие оффсеты получатся?

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

Re: Идея небольшой утилитки

Добавлено: 27 фев 2014, 11:52
aaleksander
Nick писал(а):А что будет если контур станет двухсвязным из односвязного?
Т.е. скажем такие оффсеты получатся?
Пока не получаются. Буду думать, как бы похитрее это реализовать.

Re: Идея небольшой утилитки

Добавлено: 27 фев 2014, 12:06
Nick
Надо поискать готовые библиотеки... должно же что-то такое уже быть реализовано, хотябы для полигонов (без дуг).

Re: Идея небольшой утилитки

Добавлено: 27 фев 2014, 13:43
aaleksander
Nick писал(а):Надо поискать готовые библиотеки... должно же что-то такое уже быть реализовано, хотябы для полигонов (без дуг).
Да там делов на сотню строк. Надо просто сесть и подумать (или подождать, пока припрет :-) )
У меня этот-то оффсет на 85 строк получился.

Re: Идея небольшой утилитки

Добавлено: 27 фев 2014, 13:45
Nick
Это потому, что у тебя клиппинга нет ;). А с клиппингом все гораздо сложнее, плюс куча особых ситуаций, когда пересекается по линии или схлопывается в ноль...

Re: Идея небольшой утилитки

Добавлено: 27 фев 2014, 16:14
aaleksander
Для всего остального есть АртКам ;-)
Цель разработки не забываем: быстро, просто и гибко.

Re: Идея небольшой утилитки

Добавлено: 18 мар 2014, 21:09
aaleksander
Nick писал(а):Это потому, что у тебя клиппинга нет . А с клиппингом все гораздо сложнее, плюс куча особых ситуаций, когда пересекается по линии или схлопывается в ноль...
Нашел библиотеку. Clipper называется. Портирована на все языки.
Буду прикручивать.

Re: Идея небольшой утилитки

Добавлено: 19 мар 2014, 17:37
aaleksander
aaleksander писал(а):Буду прикручивать.
Прикрутил :sick:
Оффсеты - что надо :hehehe:

Re: Идея небольшой утилитки

Добавлено: 19 мар 2014, 20:54
tooshka
aaleksander писал(а):Оффсеты - что надо
Какие то артефакты))) на дугах?

Re: Идея небольшой утилитки

Добавлено: 19 мар 2014, 21:51
aaleksander
tooshka писал(а):Какие то артефакты))) на дугах?
Ага. И посмотри, где стрелки: разбегаются куда хотят. А это - начало контура. Туда пойдет фреза после очередного круга-офсета.
Короче, надо свой делат. Мой на данный момент выглядит покруче. Проблемы начинаются, когда контур как-бы "вырождается".
Вот победю, будем всем оффсетам-оффсет :geek:

Re: Идея небольшой утилитки

Добавлено: 20 мар 2014, 21:02
aaleksander
Очередная демонстрация библиотеки.
Приятель попросил нарезать ему мотовильца для продольников на налима.
Вместе написали программу, глядя в EMC. Причем размеры задаются реальные, конечного изделия.
Когда форма его устроила, создал оффсет +3мм и размножил по столу, сколько места хватило.
Мотовильце.py (для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

# -*- coding: utf-8 -*-

from py2gcode import *

def up():
    G0(Z=20)

def mot(xx, yy):
    m = Meta() #мета-траектория. Размеры - конечного изделия
    m.point(0, 0)
    m.point(0, 90)
    m.point(7.5, 90, rounding=7.5)
    m.point(7.5, 150, rounding=7.5)
    m.point(0, 150)

    m.point(0, 240)
    m.point(9, 240)
    m.point(27.5, 240, radius=17.5)
    m.point(55-9, 240)

    m.point(55, 240)
    m.point(55, 150)
    m.point(55-7.5, 150, rounding=7.5)
    m.point(55-7.5, 90, rounding=7.5)
    m.point(55, 90)

    m.point(55, 0)
    m.point(55-9, 0)
    m.point(27.5, 0, radius=17.5)
    m.point(9, 0)

    c = Strategy() #Эта штука умеет резать траектории
    
    o = Offset(m, 3) #создаем новую траекторию-смещение на основе мета-траектории + 3мм
    z = -3
    #Погружаемся по 3мм за проход
    while z > -9:
        c.mill(o, x=xx, y=yy, options={'z': z, 'safeZ': 20}) #режем траекторию-смещение
        z -= 3    

    up() #поднимаем фрезу, чтобы переходить дальше
    
def f():
    for x in xrange(0, 450, 75): #размножаем по столу с шагом 75мм
        mot(x, 0)

export(f)

Re: Идея небольшой утилитки

Добавлено: 21 мар 2014, 13:35
Nick
Ды видешь, оффсет просто сделать, а вот решить вырождение контура - сложно... А что там в этом клиппере с клиппингом, не смотрел?

Re: Идея небольшой утилитки

Добавлено: 21 мар 2014, 15:31
aaleksander
Nick писал(а):А что там в этом клиппере с клиппингом, не смотрел?
Нет пока. Но судя по тому, как он вырождает полигоны, будем терять начало контура как минимум.
Да и не могу пока представить, где это может пригодиться.