Страница 1 из 1
Inkscape точное рисование контуров для инженеров
Добавлено: 28 сен 2012, 19:28
Nick
Решил сделать маленькое расширение для точного рисования контуров в Inkscape.
Используется "консольный" метод. Т.е. в расширении есть строка, куда пишем требуемые параметры кривой. И inkscape все точно отрисовывает.
Основная идея сделать ручную отрисовку чертежей удобной, быстрой и точной.
Главная фишка - нарисовать отрезок нужной длинны в заданном направлении.
Примерный синтаксис:
[примитив][параметры];[примитив][параметры];
Примитивы:
l = линия
a = дуга
m = переместить маркер
Параметры:
x = смещение по x
y = смещение по y
a = угол
l = длинна
Для X и Y, если их писать большими буквами - будут использоваться абсолютные координаты.
Пример:
lx10y0;la60l10;la120l10;la180l10;la240l10
Новая кривая будет дорисована к концу выбранной кривой, или если ничего не выбрано, то появится новая.
Пока работают только линии.
Параметр Silent нужен для режима "Предпросмотра", так можно видеть результат действия в реальном времени.
Также пока запихал в репозиторий к Gcodetools, т.е. берем тут:
http://bazaar.launchpad.net/~gcodetools ... lope/files
нужны
csp.py
points.py
biarc.py
bezier-console.inx
bezier-console.py
Нужны тесты, замечания и предложения

Re: Inkscape точное рисование контуров для инженеров
Добавлено: 28 сен 2012, 22:56
sherr
Ну, первые глюки - при работе в абсолютных координатах по Х все нормально, а по Y - добавляется 297 мм,
причем при разных размерах листа одинаково, кроме того, если рисовать с нуля, то начальная точка появля-
ется где хочет, так про стандартном размере листа (210*297) - примерно в центре (X - 105.833;Y-144.659),
а при других размерах - в другом месте, хотелось бы 0,0 . С углами вроде бы работает корректно, включая и такие сочетания, как a60x10, причем если указать нереальные a60x-10, то к углу просто добавляется 180 градусов, но работает ! Проверил и другие сочетания - axy - угол игнорируется, xl и yl - дают ошибку скрипта ...
Еще хотелось бы чтобы можно было строить прямую от любой выделенной точки, и
выбирать,снимается выделение после отработки плагина или нет(неудобно каждый раз заново выделять).
В общем, здорово, жду продолжения !
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 28 сен 2012, 23:55
Nick
sherr писал(а):то начальная точка появля-ется где хочет, так про стандартном размере листа (210*297) - примерно в центре (X - 105.833;Y-144.659)
Все правильно, именно в центре экрана (вида).
sherr писал(а):указать нереальные a60x-10
Почему же не реальные, так все и должно быть.
sherr писал(а):Проверил и другие сочетания - axy - угол игнорируется, xl и yl - дают ошибку скрипта ...
Да, варианты с избыточностью пока не проработаны.
sherr писал(а):Еще хотелось бы чтобы можно было строить прямую от любой выделенной точки, ивыбирать,снимается выделение после отработки плагина или нет(неудобно каждый раз заново выделять).
Это к сожалению никак нельзя. Нельзя задавать выделение после выполнения расширения

. Тоже с точками - только контур, разве что как в Gcodetools отдельный маркер задавать. Но тут проще, можно любой отрезок рисовать и плагин будет начинать с него.
Кстати, пробовал делать предпросмотр?
По Y - все так, т.к. inkscape отсчитывает координаты от верхнего угла страницы. попробую исправить.
Кстати, сразу вопрос, сейчас, если не указан примитив (l,a линия или дуга) то используется предыдущий примитив и можно например писать lx10y10;x5;
Но как быть с a и l - это и примитив и параметр... Надо как-то разделить arc и angle и length и line. Как это сделать, чтобы было удобнее?
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 29 сен 2012, 17:29
Nick
Добавил относительны углы.
+ Начал делать дуги, на данный момент готово построение дуги в указанную точку с касательной в начальной точке. Т.е. плавно выходящая дуга

.
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 29 сен 2012, 17:38
sherr
Наверное, так - А -дуга, L-линия , а - угол, l - длина, ну или другие буквы выбрать, если неохота shift жать всю дорогу. Сокращённую форму
записи попробовал - работает, предпросмотр - тоже ,,,
Кстати где посмотреть, к чему есть доступ у плагинов Inkscape, а к чему - нет , ну и шаблон простейшего плагина не помешал бы,
просто так осваивать Python - неохота ...
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 29 сен 2012, 17:49
Nick
Доступ есть к svg, фактически плагину передается файл svg и параметры с формы плагина. А на выходе inkscape забирает готовый переработанный svg.
Шаблон... даже не знаю, я обычно смотрел на простые плагины и переделывал их. Плюс есть вспомогательные питоновские скрипты для работы с кривыми, стилями. трансформациями и прочим, все лежит в /usr/share/inkscape/extensions. Но последнее время мне не нравятся эти скрипты и я активно переписываю их функции. в том числе csp.py это клон cubicsuperpath с использованием классов. Что не переделываю - так это парсинг самого svg - муторный он

Re: Inkscape точное рисование контуров для инженеров
Добавлено: 29 сен 2012, 22:10
sherr
Попробовал дугу, работает, но чтобы получилось желаемое надо много думать и чуть-чуть считать

. Вот чего наваял за 10 минут
- test1.svg
- небольшой тест
- (2.68 КБ) 756 скачиваний
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 30 сен 2012, 12:49
Nick
Скоро доделаю по радиусу, углу и длинне, будет проще.
вот, что придумал по командам, пусть все буквы без цифр - это команды, все остальные (буква и цифра за ней) - параметры
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 30 сен 2012, 17:50
sherr
Можно ли сделать окошко скрипта побольше, нарисовать (редактируемые) окошки для координат опорной точки и несколько кнопок (5-6)
для запоминания - проигрывания скриптов (например, сохраняемых в файле)?
И (для общего развития) - кто-нибудь пытался обойти ограничения Inkscape, например, поправив что-то в пресловутом парсере SVG -
ведь сам Inkscape как-то получает те же координаты точек ...
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 30 сен 2012, 20:44
Nick
sherr писал(а):Можно ли сделать окошко скрипта побольше, нарисовать (редактируемые) окошки для координат опорной точки и несколько кнопок (5-6)
Не, так нельзя...
Можно написать свой интерфейс для расширения, но тогда исчезнет интерактивность. Т.е. не будет предпромсотра. А писать свой предпросмотр геморно...
И нельзя будет держать окно постоянно открытым.
sherr писал(а):И (для общего развития) - кто-нибудь пытался обойти ограничения Inkscape, например, поправив что-то в пресловутом парсере SVG -ведь сам Inkscape как-то получает те же координаты точек ...
В каком смысле? Ты по поводу работы с точками через расширения?
Кстати, на днях в inkscape смерджили какую то ветку и там говорили про fillet - т.е. скругление углов, что полезно для всяческих инженерных нужд.
http://wiki.inkscape.org/wiki/index.php ... letChamfer
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 30 сен 2012, 20:53
Nick
Да, забыл добавить, дописал в арки построение по углу, длине дуги. радиусу и центру. Все для плавно выходящих дуг.
Вот сижу, думаю, что делать с дугами не плавно выходящими...
Просто там комбинаций всяких, по которым все это можно рассчитать просто немерено..
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 02 окт 2012, 19:07
sherr
А синтаксис для дуг - построение по углу, длине дуги. радиусу и центру - не подскажете ? А то чего-то странное выходит ...
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 02 окт 2012, 19:58
Nick
ну по идее
a x10;
ax10y10;
ar10l10
aa10r5;
a a40 l20;
Дуга будет плавно выходить из предыдущего сегмента (если его нет - то в сторону (1,0))
Надо доделать дугу по трем точкам....
ЗЫ со мной можно "на ты", надеюсь взаимно

Re: Inkscape точное рисование контуров для инженеров
Добавлено: 02 окт 2012, 22:09
sherr
ar10l10 дает ошибку
('a', 'r10l10')
Traceback (most recent call last):
File "/usr/share/inkscape/extensions/bezier-console.py", line 254, in <module>
bezier_console.affect()
File "/usr/share/inkscape/extensions/inkex.py", line 207, in affect
self.effect()
File "/usr/share/inkscape/extensions/bezier-console.py", line 222, in effect
self.run()
File "/usr/share/inkscape/extensions/bezier-console.py", line 243, in run
self.parse_command(a)
File "/usr/share/inkscape/extensions/bezier-console.py", line 211, in parse_command
if t in ("a","A") : self.draw_arc(x,y,a,r,i,j,l)
File "/usr/share/inkscape/extensions/bezier-console.py", line 167, in draw_arc
arc = self.get_arc_param(x,y,a,r,i,j,l)
File "/usr/share/inkscape/extensions/bezier-console.py", line 160, in get_arc_param
return get_arc_param(None, None, a, r, None, None, None)
NameError: global name 'get_arc_param' is not defined
Остальное работает, но -
большой пользы от aa40l20 для себя не увидел (может кому сгодится ?),
чуть полезнее aa90r20, но зависимость результата от угла весьма неочевидна,
а вот такая вещь, как ar20x25 или ar25x20y20 - работает, но не реагирует
на радиус, видимо из-за требования плавности ...
PS - на ты конечно можно
Ps - купил учебник по Питону, накачал с сети все что нашел по созданию расширений
для Inkscape. Хочу для начала понимать как оно работает - уже знаю волшебное
слово inkex

Re: Inkscape точное рисование контуров для инженеров
Добавлено: 02 окт 2012, 22:36
Nick
sherr писал(а):ar10l10 дает ошибку
Спасибо, исправил. Надо было self. добавить.
sherr писал(а):большой пользы от aa40l20
Он очень просто получается через aa--r-- - буквально одно деление, потому и сделал
sherr писал(а):уже знаю волшебное слово inkex
А знаешь где оно лежит?

Re: Inkscape точное рисование контуров для инженеров
Добавлено: 03 окт 2012, 10:39
sherr
Лежит наверное в inkscape/extensions ...
У меня тут вообще веселуха - дома Debian Squeeze + Inkscape 0.47.2 а на работе XP + 0.48.3 ( + USBCNC контроллер) - так что кроссплатформенность и всё такое - пока полёт нормальный .
Ты лучше скажи, 0.49- devel на Линукс собирать стоит ?(может еще и с поддержкой чертежных инструментов,
если ума хватит)
ps ar40l100 - работает .
Re: Inkscape точное рисование контуров для инженеров
Добавлено: 03 окт 2012, 11:59
Nick
sherr писал(а):Ты лучше скажи, 0.49- devel на Линукс собирать стоит ?(может еще и с поддержкой чертежных инструментов,если ума хватит)
Есть где-то репозиторий daily builds, там валяются пакеты последнего dev. Можно ничего не собирать. Но вот где он точно не помню...