Страница 30 из 38
LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 22 май 2013, 18:07
Nick
Как некоторые уже заметили я пропал на недельку. И пропадал я не зря. Наконец-то решил сделать достойную замену ngcgui.
LinuxCNC Features это тулкит для создания "мастеров". Точнее это тулкит самих "мастеров". В общем и целом LinuxCNC Features работает схоже с ngcgui, но с некоторыми отличиями. Честно говоря, с ngcgui я до конца так и не разобрался, поэтому это я считаю, что он работает схоже

. (Название Features взято от кнопки в ngcgui - add feature.)
Текущий статус разработки
- Дописать обработки.
- Отловить баги
.
Возможности (для просмотра содержимого нажмите на ссылку)Что может LinuxCNC Features:
- Добавлять features - простые обработки
- Менять их порядок
- Группировать обработки
- Делать линейные и круговые массивы
- Встраиваться в axis LinuxCNC или работать как отдельной приложение
- Просматривать резултьтат в axis в редиме реального времени
- Сохранять шаблоны обработок
Это только пока

.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 13 мар 2015, 18:11
Mihaill
nkp писал(а):теперь нужно внести изменения в файл hal_python.xml , который может лежать /usr/share/glade3/catalogs или /usr/share/glade2/catalogs для этого пишем в терминале:sudo gedit /usr/share/glade3/catalogs/hal_python.xmlнаходим по тексту вот этот код:Код:
Выделить всё • Развернуть
<glade-widget-class name="Calculator" generic-name="calc" title="calculator"> <properties> <property id="size" query="False" default="1" visible="False"/> <property id="spacing" query="False" default="0" visible="False"/> <property id="homogeneous" query="False" default="0" visible="False"/> </properties> </glade-widget-class>
Здравствуйте, пытаюсь установить Features по инструкции от "nkp", застрял на первом шаге в файле hal_python.xml , который
лежит /usr/share/glade3/catalogs не нахожу не одного упоминания Calculator и судя по скринам "nkp" там еще много чего не хватает.
Версия установленного Linux 10.04, изначально редактор Glde был не установлен сегодня установил, так же установил все обновления какие только менеджер обновлений смог найти, но в файле hal_python.xml не чего и неизменилось.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 13 мар 2015, 21:06
verser
Mihaill писал(а):застрял на первом шаге в файле hal_python.xml
Окончательную последовательность установки см. в файле
README.md, должно получится.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2015, 01:43
Mihaill
Обидно да!
Всё сделал по инструкции даже то что делал(практически всё) повторил, а его нет как нет гальгулятора этого
Код: Выделить всё
<glade-catalog name="gladevcp" library="gladepython" supports="libglade,gtkbuilder"
domain="glade-3" depends="gtk+">
<init-function>glade_python_init</init-function>
<glade-widget-classes>
<glade-widget-class name="HAL_HBox" generic-name="hal_hbox" title="HAL_HBox"/>
<glade-widget-class name="HAL_Table" generic-name="hal_table" title="HAL_table"/>
<glade-widget-class name="HAL_ComboBox" generic-name="hal_combobox" title="HAL_ComboBox"/>
<glade-widget-class name="HAL_Button" generic-name="hal_button" title="HAL_Button"/>
<glade-widget-class name="HAL_CheckButton" generic-name="hal_checkbutton" title="HAL_CheckButton"/>
<glade-widget-class name="HAL_SpinButton" generic-name="hal_spinbutton" title="HAL_SpinButton"/>
<glade-widget-class name="HAL_ToggleButton" generic-name="hal_togglebutton" title="HAL_ToggleButton"/>
<glade-widget-class name="HAL_RadioButton" generic-name="hal_radiobutton" title="HAL_RadioButton"/>
<glade-widget-class name="HAL_HScale" generic-name="hal_hscale" title="HAL_HScale"/>
<glade-widget-class name="HAL_VScale" generic-name="hal_vscale" title="HAL_VScale"/>
<glade-widget-class name="HAL_ProgressBar" generic-name="hal_progressbar" title="HAL_ProgressBar"/>
<glade-widget-class name="HAL_LED" generic-name="hal_led" title="HAL LED">
<properties>
<property id="led_blink_rate" optional="True" save-always='True'/>
<property id="pick_color_on" optional="True"/>
<property id="pick_color_off" optional="True"/>
</properties>
</glade-widget-class>
<glade-widget-class name="HAL_Label" generic-name="hal_label" title="HAL Label"/>
<glade-widget-class name="HAL_HBar" generic-name="hal_hbar" title="HAL HBar"/>
<glade-widget-class name="HAL_VBar" generic-name="hal_vbar" title="HAL VBar"/>
<glade-widget-class name="HAL_Gremlin" generic-name="hal_gremlin" title="HAL Gremlin"/>
<glade-widget-class name="HAL_Meter" generic-name="hal_meter" title="HAL Meter"/>
<glade-widget-class name="HAL_Graph" generic-name="hal_graph" title="HAL Graph"/>
<!-- Actions -->
<glade-widget-class name="EMC_Action_ESTOP" generic-name="hal_action_estop" title="EMC Action ESTOP" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_Action_ESTOP_RESET" generic-name="hal_action_estop_reset" title="EMC Action ESTOP RESET" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_Action_ON" generic-name="hal_action_on" title="EMC Action ON" icon-name='gtk-connect'/>
<glade-widget-class name="EMC_Action_OFF" generic-name="hal_action_off" title="EMC Action OFF" icon-name='gtk-disconnect'/>
<glade-widget-class name="EMC_Action_Run" generic-name="hal_action_run" title="EMC Action Run" icon-name='gtk-media-play-ltr'/>
<glade-widget-class name="EMC_Action_Step" generic-name="hal_action_run" title="EMC Action Step" icon-name='gtk-media-next-ltr'/>
<glade-widget-class name="EMC_Action_Pause" generic-name="hal_action_run" title="EMC Action Pause" icon-name='gtk-media-pause'/>
<glade-widget-class name="EMC_Action_Resume" generic-name="hal_action_run" title="EMC Action Resume" icon-name='gtk-media-pause'/>
<glade-widget-class name="EMC_Action_Stop" generic-name="hal_action_stop" title="EMC Action Stop" icon-name='gtk-media-stop'/>
<glade-widget-class name="EMC_Action_MDI" generic-name="hal_action_mdi" title="EMC Action MDI" icon-name='gtk-execute'/>
<glade-widget-class name="EMC_Action_Home" generic-name="hal_action_home" title="EMC Action Home" icon-name='gtk-home'/>
<glade-widget-class name="EMC_Action_Unhome" generic-name="hal_action_unhome" title="EMC Action Unhome" icon-name='gtk-home'/>
<glade-widget-class name="EMC_ToggleAction_ESTOP" generic-name="hal_toggleaction_estop" title="EMC ToggleAction ESTOP" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_ToggleAction_Power" generic-name="hal_toggleaction_power" title="EMC ToggleAction Power" icon-name='gtk-disconnect'/>
<glade-widget-class name="EMC_ToggleAction_Run" generic-name="hal_toggleaction_run" title="EMC ToggleAction Run" icon-name='gtk-media-play-ltr'/>
<glade-widget-class name="EMC_ToggleAction_Stop" generic-name="hal_toggleaction_stop" title="EMC ToggleAction Stop" icon-name='gtk-media-stop'/>
<glade-widget-class name="EMC_ToggleAction_Pause" generic-name="hal_toggleaction_pause" title="EMC ToggleAction Pause" icon-name='gtk-media-pause'/>
<glade-widget-class name="EMC_ToggleAction_MDI" generic-name="hal_toggleaction_mdi" title="EMC ToggleAction MDI" icon-name='gtk-execute'/>
<glade-widget-class name="EMC_RadioAction_ESTOP" generic-name="hal_radioaction_estop" title="EMC RadioAction ESTOP" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_RadioAction_ESTOP_RESET" generic-name="hal_radioaction_estop_reset" title="EMC RadioAction ESTOP RESET" icon-name='gtk-stop'/>
<glade-widget-class name="EMC_RadioAction_ON" generic-name="hal_radioaction_on" title="EMC RadioAction ON" icon-name='gtk-connect'/>
<glade-widget-class name="EMC_RadioAction_OFF" generic-name="hal_radioaction_off" title="EMC RadioAction OFF" icon-name='gtk-disconnect'/>
<glade-widget-class name="EMC_Stat" generic-name="hal_stat" title="EMC Stat" icon-name='gtk-properties' toplevel='yes'/>
<glade-widget-class name="EMC_FileChooserDialog" generic-name="hal_filechooserdialog" title="EMC FileChooserDialog"/>
<glade-widget-class name="EMC_FileChooserButton" generic-name="hal_filechooserbutton" title="EMC FileChooserButton"/>
<glade-widget-class name="EMC_Action_Open" generic-name="hal_action_open" title="EMC Action Open" icon-name='gtk-open'/>
<glade-widget-class name="EMC_Action_Reload" generic-name="hal_action_reload" title="EMC Action Reload" icon-name='gtk-refresh'/>
<glade-widget-class name="EMC_Action_Save" generic-name="hal_action_save" title="EMC Action Save" icon-name='gtk-save'/>
<glade-widget-class name="EMC_Action_SaveAs" generic-name="hal_action_saveas" title="EMC Action Save As" icon-name='gtk-save-as'/>
<glade-widget-class name="EMC_SourceView" generic-name="hal_sourceview" title="EMC SourceView"/>
<glade-widget-class name="EMC_MDIHistory" generic-name="hal_mdihistory" title="EMC MDIHistory"/>
</glade-widget-classes>
<glade-widget-group name="python" title="HAL Python">
<glade-widget-class-ref name="HAL_HBox"/>
<glade-widget-class-ref name="HAL_Table"/>
<glade-widget-class-ref name="HAL_LED"/>
<glade-widget-class-ref name="HAL_ComboBox"/>
<glade-widget-class-ref name="HAL_Button"/>
<glade-widget-class-ref name="HAL_SpinButton"/>
<glade-widget-class-ref name="HAL_CheckButton"/>
<glade-widget-class-ref name="HAL_ToggleButton"/>
<glade-widget-class-ref name="HAL_RadioButton"/>
<glade-widget-class-ref name="HAL_HScale"/>
<glade-widget-class-ref name="HAL_VScale"/>
<glade-widget-class-ref name="HAL_ProgressBar"/>
<glade-widget-class-ref name="HAL_Label"/>
<glade-widget-class-ref name="HAL_HBar"/>
<glade-widget-class-ref name="HAL_VBar"/>
<glade-widget-class-ref name="HAL_Gremlin"/>
<glade-widget-class-ref name="HAL_Meter"/>
<glade-widget-class-ref name="HAL_Graph"/>
<glade-widget-class-ref name="EMC_Stat"/>
<glade-widget-class-ref name="EMC_FileChooserDialog"/>
<glade-widget-class-ref name="EMC_FileChooserButton"/>
<glade-widget-class-ref name="EMC_SourceView"/>
<glade-widget-class-ref name="EMC_MDIHistory"/>
</glade-widget-group>
<glade-widget-group name="python" title="EMC Actions">
<glade-widget-class-ref name="EMC_Action_ESTOP"/>
<glade-widget-class-ref name="EMC_Action_ESTOP_RESET"/>
<glade-widget-class-ref name="EMC_Action_ON"/>
<glade-widget-class-ref name="EMC_Action_OFF"/>
<glade-widget-class-ref name="EMC_Action_Run"/>
<glade-widget-class-ref name="EMC_Action_Step"/>
<glade-widget-class-ref name="EMC_Action_Pause"/>
<glade-widget-class-ref name="EMC_Action_Resume"/>
<glade-widget-class-ref name="EMC_Action_Stop"/>
<glade-widget-class-ref name="EMC_Action_MDI"/>
<glade-widget-class-ref name="EMC_Action_Home"/>
<glade-widget-class-ref name="EMC_Action_Unhome"/>
<glade-widget-class-ref name="EMC_ToggleAction_ESTOP"/>
<glade-widget-class-ref name="EMC_ToggleAction_Power"/>
<glade-widget-class-ref name="EMC_ToggleAction_Run"/>
<glade-widget-class-ref name="EMC_ToggleAction_Stop"/>
<glade-widget-class-ref name="EMC_ToggleAction_Pause"/>
<glade-widget-class-ref name="EMC_ToggleAction_MDI"/>
<glade-widget-class-ref name="EMC_RadioAction_ESTOP"/>
<glade-widget-class-ref name="EMC_RadioAction_ESTOP_RESET"/>
<glade-widget-class-ref name="EMC_RadioAction_ON"/>
<glade-widget-class-ref name="EMC_RadioAction_OFF"/>
<glade-widget-class-ref name="EMC_Action_Open"/>
<glade-widget-class-ref name="EMC_Action_Reload"/>
<glade-widget-class-ref name="EMC_Action_Save"/>
<glade-widget-class-ref name="EMC_Action_SaveAs"/>
</glade-widget-group>
</glade-catalog>
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2015, 02:02
Mihaill
Пункт 4. И здесь его нет.
4. Change hal_pythonplugin.py in /usr/share/pyshared/gladevcp/hal_pythonplugin.py Add (find calculator add after

):
Код: Выделить всё
from hal_widgets import HAL_HBox
from hal_widgets import HAL_Table
from hal_widgets import HAL_ComboBox
from hal_widgets import HAL_Button
from hal_widgets import HAL_RadioButton
from hal_widgets import HAL_ToggleButton
from hal_widgets import HAL_ProgressBar
from hal_widgets import HAL_CheckButton
from hal_widgets import HAL_VScale
from hal_widgets import HAL_HScale
from hal_widgets import HAL_SpinButton
from hal_widgets import HAL_Label
from led import HAL_LED
from hal_bar import HAL_HBar, HAL_VBar
from hal_meter import HAL_Meter
from hal_gremlin import HAL_Gremlin
from hal_graph import HAL_Graph
from hal_actions import *
from hal_filechooser import *
from hal_sourceview import *
from hal_mdihistory import *
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2015, 09:55
verser
Mihaill писал(а):так же установил все обновления какие только менеджер обновлений смог найти
настораживает..
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2015, 10:24
Mihaill
Может снести всю систему и по новой поставить? Подскажите какую версию.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 14 мар 2015, 10:32
verser
Mihaill писал(а):Может снести всю систему и по новой поставить? Подскажите какую версию.
Debian Wheezy LinuxCNC 2.6
отсюда.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 16 мар 2015, 12:51
Mihaill
Не пошла у меня Debian Wheezy LinuxCNC 2.6 очень странно вел себя комп через 15 минут работы начинал дико тормозить аж курсор еле шевелился, пришлось вернутся к предыдушей версии и к той же проблеме.
Новая попытка и тот же результат калькулятора нет, во вложении последовательность действий в терминале.
Код: Выделить всё
mihail@mihail-desktop:~$ cd /usr/share/pyshared/gladevcp/
mihail@mihail-desktop:/usr/share/pyshared/gladevcp$ sudo ln /full-path-to-git-repository/features.py -s
[sudo] password for mihail:
Sorry, try again.
[sudo] password for mihail:
mihail@mihail-desktop:/usr/share/pyshared/gladevcp$ sudo ln /full-path-to-git-repository/features.glade -s
mihail@mihail-desktop:/usr/share/pyshared/gladevcp$ sudo ln /full-path-to-git-repository/subroutines -s
mihail@mihail-desktop:/usr/share/pyshared/gladevcp$ sudo apt-get install python-lxml
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
user-setup localechooser-data
Для их удаления используйте 'apt-get autoremove'.
Предлагаемые пакеты:
python-lxml-dbg
НОВЫЕ пакеты, которые будут установлены:
python-lxml
обновлено 0, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 255 пакетов не обновлено.
Необходимо скачать 530kБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 1 753kB.
Получено:1 http://ru.archive.ubuntu.com/ubuntu/ lucid/main python-lxml 2.2.4-1 [530kB]
Получено 530kБ за 0с (1 963kБ/c)
Выбор ранее не выбранного пакета python-lxml.
(Чтение базы данных ... на данный момент установлено 135339 файлов и каталогов.)
Распаковывается пакет python-lxml (из файла .../python-lxml_2.2.4-1_i386.deb)...
Настраивается пакет python-lxml (2.2.4-1) ...
Обрабатываются триггеры для python-central ...
mihail@mihail-desktop:/usr/share/pyshared/gladevcp$ cd /usr/lib/pymodules/python2.6/gladevcp
mihail@mihail-desktop:/usr/lib/pymodules/python2.6/gladevcp$ sudo ln /usr/share/pyshared/gladevcp/features.py -s
mihail@mihail-desktop:/usr/lib/pymodules/python2.6/gladevcp$ sudo ln /usr/share/pyshared/gladevcp/features.glade -s
mihail@mihail-desktop:/usr/lib/pymodules/python2.6/gladevcp$ sudo ln /usr/share/pyshared/gladevcp/features.glade -s
ln: создание символьной ссылки «./features.glade»: Файл существует
mihail@mihail-desktop:/usr/lib/pymodules/python2.6/gladevcp$ sudo nautilus
Initializing nautilus-gdu extension
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 16 мар 2015, 14:24
verser
А Вы Ubuntu 10.04 точно
отсюда брали? Установите её и не обновляйте ничего.
Каким то непонятным образом у Вас вместо
правильного файла какой-то
другой.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 16 мар 2015, 14:44
Mihaill
Да конечно.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 16 мар 2015, 14:51
Mihaill
И не обновлял, переустановил с Debian Wheezy LinuxCNC 2.6 на 2.5 только сегодня, первым делом начал установку Features.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 17 мар 2015, 21:08
verser
Обновил мастер Circular pocket.
Теперь цилиндры и вариации (внутренние, внешние, их комбинация, под конус, по-или-против часовой, направление проходов от-или-к центру, с-или-без компенсации диаметра инстр.) можно резать без SolidCam
Маленький ликбез с картинками, как правильно "заряжать" мастер circular pocket и ему подобные
на картинке не просматривается, но в этом примере на самом деле двойной цилиндр (черновой и чистовой с 0.1 мм отступом), параметр begin задает внешний или внутренний цилиндр фрезеруется первым. Параметр side step задает боковое смещение проходов.
Перед основным "мастером" добавляем "мастера" инициализации :
►
tool changeвыбирает инструмент из таблицы и автоматически ставит табличные отступы, выполняется вот такой g-code
►
set cutting paramsмножество параметров заглубления, в основном по названию понятны, кроме
-surface и depth задаются как конкретные значения Z , а не как отступы,
-penetration angle и paranoid не используются
-final cut предусмотрен один чистовой проход, здесь его толщина
-test, если = 1, то шпиндель не включится
►
set tool paramsнастройки для выбранного инструмента, обратите внимание, диаметр берётся автоматом для текущего инструмента [#5410], если здесь диаметр не обнулить, то будет работать компенсация диаметра инструмента, выбранного в первом "мастере"
tool change.
►
circular pocket основной рабочий "мастер", задаёт внутренний и внешний диаметры фигуры обработки в плоскости XY и ряд других полезных параметров
Образец файла настроек circular pocket для Features
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 01 апр 2015, 22:45
verser
Добавил мастер
Drill .
Основан на команде G83, принцип работы которой недавно
выяснил для себя на примере g-codе.
Предварительно "заряжать" мастер Drill аналогично
выше описанному Circular pocket.
Особое внимание мастеру инициализации
Set cutting params.
Начинается сверление с позиции
Surface на скоростях
F=Penetration feed,
S=Spindle, подводка к Surface будет с высоты
Rappid .
Далее циклически сверлится с шагом
Depth step c выводом сверла из отверстия до высоты
Surface после каждого шага, и так до глубины
Depth.
Для простого сверления (без циклов) ставим Depth step = 0.
Параметры feed, penetration angle, final cut feed, paranoid - не задействованы.
Сам основной мастер Drill задается всего тремя параметрами - координаты центра отверстия
cX,
cY и параметр
Kern (если Kern=1, то будет предварительно выполнено типа кернения - циклическое рассверливание кончиком сверла отверстия на малую глубину 0.2мм с шагом 0.025мм)
Прямоугольные и круговые массивы отверстий можно создавать с помощью групповых мастеров
Array и
Circular array
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 06 апр 2015, 10:35
yell
Как добавлять items в Circular Array? Там написано drag and drop, но что-то ничего не получается.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 06 апр 2015, 11:48
verser
yell писал(а):Как добавлять items в Circular Array? Там написано drag and drop, но что-то ничего не получается.
Разместить добавляемый мастер
выше мастера Circular Array и использовать для добавления-удаления в item эти кнопки
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 23 апр 2015, 22:57
Alex-Shamilich
А можно ли как-то управлять направлением резки для прямоугольников и полигонов (шестиугольника и N-угольника). Видел такую возможность у круглых карманов - очень удобно!
Параметр CW - он только для специфичного мастера?
Можно ли его в CuttingParams пристроить - чтобы задавать направление обхода контура глобально?
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 23 апр 2015, 23:56
verser
Alex-Shamilich писал(а):Можно ли его в CuttingParams пристроить - чтобы задавать направление обхода контура глобально?
Можно. Правда, работы огого, во все мастера вставить анализ этого CW. Мысль хорошая, возьму на заметку(если кто раньше не сделает

).
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 08 май 2015, 18:01
yell
Похоже последний вопрос был про то же, что и я зашел сюда предложить. Или просто недоглядел и оно уже реализовано. Подскажите куда смотреть.
Например, диаметр круга предполагает, что вырезаться будет остров, т.е. фреза будет снаружи этого круга обходить (с учетом диаметра фрезы).
Но если нужен, например, круглый карман, то приходится в уме пересчитать диаметр для настроек. А если поменять диаметр фрезы, то опять нужно не забыть пересчитать и диаметр "траектории".
Ну, и соответственно тоже самое актуально и для других фигур (овал и т.д.).
Так же часто возникает необходимость изменить подачу: встречная или попутная. Как это сделать тоже не вижу.
Такие вот пожелания.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 08 май 2015, 18:32
verser
Мастера Circular pocket и Сircle имеют встроенную компенсацию диаметра фрезы. Для того, чтобы заработало, нужно правильно "заряжать" мастера (см.
пост #593).
Сторону, с которой будет компенсироваться, можно поменять, добавив "минус" в параметр Diameter мастера Set tool params:
Diameter = [-#5410]
здесь #5410 заполняется автоматом, его лучше не менять на конкретную цифру, этот параметр получает диаметр текущей фрезы из таблицы при смене инструмента.
Re: LinuxCNC Features - набор мастеров для LinuxCNC
Добавлено: 28 май 2015, 17:25
verser
Надо подправить Features, чтобы при нескольких подряд одинаковых мастерах не выскакивала ошибка "..already defined in line ... : 'O<line-xy-if> IF...' "
Помнится, забыл только где, Nick показывал, как можно именовать по-хитрому эти все IF, чтобы имена не повторялись. Может кто напомнит?