Перейти к содержанию
  • записей
    6
  • комментариев
    7
  • просмотров
    200

О блоге

Всем доброго времени суток :)
Хочу поделится своим опытом работы в Cad программах и дать несколько советов по ускорению работы в них, а так же поделится некоторыми хитростями, которые, возможно, новые пользователи не знают. Идея это сделать живёт у меня давно, но руки дошли написать только сейчас. Думаю я не первый, кто этим делится, но возможно для вас буду именно тем самым первым :D

Записи в этом блоге

dromandon

Небольшая статейка о том, как сделать, чтобы при отзеркаливание параметрического объекта СПДС не зеркалился текст прописаный в геометрии объекта (UText)
Ответ прост - никак :D

Даже если вы создадите для объекта вид сзади, который будет зеркален виду спереди, текст в геометрии себя будет вести неадекватно

Спойлер

MTEvOQA2R8.gif.68f408b1dec328edf836e0ec9e5b7957.gif.a4092fee4615478628e2fdad6887cc4f.gif

 

Тогда что же делать?
Во-первых, мы не будем создавать вид сзади. Мы заставим объект отзеркалиться обратно!
Что нам для этого надо:
1. Заставить объект понимать, что он отзеркален.
2. Заставить объект, если он отзеркален, зеркалить себя обратно.

3. Заставить объект переместить себя на нужное место.
 

Решаем первую задачу

Мой объект -  Пример для отзеркаливания текста (пустышка).mcd

Вводим две переменные в объект:
rAngleX (назовём её "Угол X") и rAngleY (назовём её "Угол Y")

для переменной "Угол X" вычисляем угол между глобальной осью oY и вектором нашего объекта vecDirection

rAngleX = angleTwoPi(oY,vecDirection);

Для "Угол Y" вычисляем угол между осью oY и вектором нашего объекта vecPlane

rAngleY = angleTwoPi(oY,vecPlane);

 

Создаём функцию MirrorObject вначале нашего кода и прописываем там наши формулы

 

function MirrorObject
{
	rAngleX = angleTwoPi(oY,vecDirection);
	rAngleY = angleTwoPi(oY,vecPlane);
}

 

Прописываем нашу функцию в функциях OnInitialization, чтобы инициализировать  при вставке объекта наши переменные, и в OnMakeParameters, что при обновление объекта с помощью команды SPREGENSTD наши параметры обновились (на видео я запускаю эту команду через кнопку)
 

Спойлер

 

Из видео видно, что если мы зеркалим объект по оси Y то
Угол X = 90

Угол Y = 0

 

А если по X, то

Угол X = 270

Угол Y = 180

 

С первой задачей мы справились, наш объект понимает, что он отзеркален. Переходим ко второму пункту.

 

Тут всё просто, на самом деле)

Прописываем iff'ы, которые при определённых значения rAngleX и rAngleY будут разворачивать наш объект

И загоняем их в нашу функцию  MirrorObject

Рассмотрим момент, когда мы зеркалим по оси Y.

Что происходит в этот  момент с объектом?
У него меняется направления вектора vecDirection. Значит, чтобы отзеркалить объект обратно, нам надо для начала поменять направления вектора vecDirection!
пишем:

if(rAngleX==90 && rAngleY==0)
{
	vecDirection = -vecDirection;
}

А при зеркале по оси X меняется направление vecPlane, как следствие:

 

if(rAngleX==270 && rAngleY==180)
{
	vecPlane= -vecPlane;
}

 

Загоняем это в нашу функцию

function MirrorObject
{
	rAngleX = angleTwoPi(oY,vecDirection);
	rAngleY = angleTwoPi(oY,vecPlane);
	if(rAngleX==90 && rAngleY==0)
	{
		vecDirection = -vecDirection;
	}
	if(rAngleX==270 && rAngleY==180)
	{
		vecPlane= -vecPlane;
	}
}

Сохраняем объект и обновляем его на чертеже
 

Спойлер

 

О чудо, всё заработало!)

Но ещё рано радоваться, проверяем разные случаи и получаем:

Спойлер

 

Логика та же, что и раньше, дописываем iff'ы исходя из угла)

 

function MirrorObject
{
	rAngleY = angleTwoPi(oY,vecPlane);
	rAngleX = angleTwoPi(oY,vecDirection);
	if(rAngleX==90 && rAngleY==0)
	{
		vecDirection=-vecDirection;
	}
	if(rAngleX==270 && rAngleY==180)
	{
		vecPlane=-vecPlane;
	}
	if(rAngleX==0 && rAngleY==270)
	{
		vecDirection=-vecDirection;
	}
	if(rAngleX==180 && rAngleY==90)
	{
		vecPlane=-vecPlane;
	}
}

Запись специально не упрощал, но вы можете, если хотите,  объединить через "или" (||) часть кода)

Проверяем результат:

Спойлер


Текст не зеркалится, но крутится.

Чтобы решить эту проблему, надо ввести переменную, отвечающую за поворот текста.

В ActHeader в Public дописываем переменную 

sTextAngle, "hidden" 

я её скрыл, потому что вручную менять не планирую, если хотите, можете оставить открытой.

А коде исполнения UText дополняем переменной нашего угла:
 

UText(mp, DegToRad(sTextAngle), 2.5*rSymScl/rScl, 0, 0.0000, T, 1,1);

Я буду работать с углом в градусах

 

Далее мы определяем в каких значения Угла X и Угла Y у нас текст повёрнут и выставляем для этого случая нужное нам значение sTextAngle, тем самым формирую итоговый вид нашей функции:
 

function MirrorObject
{
	rAngleY = angleTwoPi(oY,vecPlane);
	rAngleX = angleTwoPi(oY,vecDirection);
	if(rAngleX==90 && rAngleY==0)
	{
		vecDirection=-vecDirection;
	}
	if(rAngleX==270 && rAngleY==180)
	{
		vecPlane=-vecPlane;
	}
	if(rAngleX==0 && rAngleY==270)
	{
		vecDirection=-vecDirection;
	}
	if(rAngleX==180 && rAngleY==90)
	{
		vecPlane=-vecPlane;
	}
	
	if(rAngleY==180 || rAngleY==270)
	{
		sTextAngle=180;
	}
	else
	{
		sTextAngle=0;
	}
}

Сохраняем и обновляем наши объекты:

Спойлер

 

Собственно на  этом и всё) 
Третий пункт нашей задачи нам не понадобился, так как точка вставки объекта находится по его центру.
Если же точка вставки объекта находилась у края объекта, то нам пришлось бы кроме отзеркаливания объекта обратно в коде, прописывать дополнительно смещения объекта.
Проведу часть такого кода из своего другого объекта, чтобы было понятна логика действия:
 

anY = angleTwoPi(oY,vecPlane);
anX = angleTwoPi(oY,vecDirection);
pnt1x = pntOrigin:x;
pnt1y = pntOrigin:y;
if (anX==180 && anY==90)
{
	pntOrigin:x = pnt1x - L;
	vecPlane=-vecPlane;
}
if (anX==90 && anY==0)
{
	pntOrigin:x = pnt1x - B;
	vecDirection=-vecDirection;
}

Примеры моих объектов, с применение данной логики для отзеркаливания:

Спойлер
Спойлер

 

dromandon

Мы с вами уже настроили горячие клавиши, научились пользоваться пробелом и быстро выбирать то, что нам нужно
Но есть рутинные задачи, в которых нас не спасают ни быстрый выбор, ни быстрый ввод команды. Потому что приходится раз за разом выполнять одно и то же действие над разными объектами.
Допустим, получили вы чертёж Фасада. Хорошо оформленный чертёж, 1 к 100, все отметки стоят, всё отлично. Только вот незадача, он на А1 не помещается. Надо бы изменить масштаб чертежа. А это надо все отметки в 2 раза увеличить, ведь они сделаны из линий и текста, увы.
И поехали - выделили одну отметку -> SCALE -> Указали базовую точку -> Указали нужный масштаб (2).
И повторили.
И так раз 100.
Удручающая задача, которую надо сделать и особо никак не вывернешься.
Тут приходят на помощь макросы. 
Самое понятное определения макроса - это последовательность команд, которые вы привязываете к кнопке.
Тем самым вы можете сократить эти действия:
Выделили одну отметку -> SCALE -> Указали базовую точку -> Указали нужный масштаб (2) ->Выделили одну отметку -> SCALE -> Указали базовую точку -> Указали нужный масштаб (2).

До данных:

Команда -> Выделили одну отметку -> Указали базовую точку -> Выделили одну отметку -> Указали базовую точку .

Уйдёт ввод с клавиатуры "2", уйдёт повтор команды (потому что макрос будет зациклен)

Спойлер
Спойлер

Да, по-прежнему придётся выделить все отметки по отдельности, но вместо условных 32 секунд на 10 отметок , у нас ушло 18.
(32-18)х(100/10)=140 секунд, т.е. мы сократили время работы в идеальных условиях чуть более, чем на 2 минуты.
В принципе, со знанием, как писать макросы, этого времени достаточно, чтобы написать такой макрос.
Стоит ли игра свеч решать вам, по итогу все макросы, которые я писал для себя, мне понадобились не единожды ;)

 

Делюсь парочкой простых макросов, которыми пользовался в своё время

Уменьшить в 2 раза = *^C^C_Scale;\\;\0.5

Увеличить в 2 раза = *^C^C_Scale;\\;\2

Подобие с удаление оригинала - *^C^C_offset;_e;_y; (из-за этой команды макрос обычного подобия переделал в  - ^C^C_offset;_e;_n; )

Отражение с удаление оригинала - *^C^C_mirror;\\;\\_y;

Очистка чертежа (от неиспользуемых блоков, слоёв и т.п.) - ^C^C_-Purge;_all;;_no;

Масштаб с опорной линией - ^С^C_scale;\\;\_r;@;\\

Включить границы отображения раста - ^C^C_imageframe;1;

Выключить границы отображения раста - ^C^C_imageframe;0;

Включить границы отображения границ маскировки - ^C^C_wipeout;_f;_on;

Выключить границы отображения границ маскировки - ^C^C_wipeout;_f;_off;

Повернуть с базовым углом - ^C_rotate;\\;\_r;@;\\

 

Где прописывать макрос?
Показываю на примере АК 2013 года (в моей версии наны нет макросов, в новых должно быть похоже)

Спойлер

 

Как именно писать макросы и что обозначают все эти слеши и точки с запятыми я не буду, да и, к сожалению, давно не писал их (работаю в Нанокад СПДС 6.0, он, к сожалению моему великому, макросы не поддерживает), но в интернете прилично материала на эту тему, думаю, первая же ссылка в гугле по запросу "макросы в автокаде" вам сразу же поможет ;)

На мой взгляд, создание макроса, является самым простым "продвинутым" инструментом для освоения, который стоит изучить для максимально эффективного использования CAD программ.

Значки для кнопок.zip

dromandon

Хочу поделится несколькими способами быстро выбрать нужные вам объекты, по-мимо стандартного "Быстрого выбора"
 

1. Выбрать похожие объекты (SELECTSIMILAR)

Эта команда позволит вам выбрать все объекты на чертеже со свойствами, соответствующим выбранным объектам.
Какие свойства брать за основные выбирать вам, для этого после ввода команды выбираем "настройки" и выставляем требуемые параметры

 

2. Изолировать слой (LAYISO)

Это команда позволит оставить на чертеже все объекты в том слое, в котором находятся указанные объекты.

 

3. Сохранить шаблон

Данная функция доступна при быстром выборе объектов. Полезна, когда по большому количеству фильтров приходится выбирать объекты на чертеже по несколько раз.

Спойлер

 

4. ФИЛЬТР
Данную функцию обнаружил в Автокад ЛТ 2011. Точно есть в 13 версии продукта. Думаю перекочевала и в новые версии. Есть ли в Нанокадах новых не знаю, в моей версии точно нет.
Суть примерно та же, как и у быстрого выбора в Нанокаде. Тоже можно сохранять шаблоны. Последний настройки сохраняются. Хорошая альтернатива быстрому выбора в АК.

Данную команду я вынес на кнопку, значок для неё рисовал сам. Возможно в более поздних версиях она есть на какой-то панели инструментов

Спойлер

 

5. Предыдущий выбор (SELECT13)

Данную функцию как отдельную команду встретил впервые в своей версии нанокада. До этого в Брикскаде 13-го года и Автокаде 13 этой команды не находил. Для автокада пришлось писать макрос, который отдалённо воспроизводил эту функцию, но с рядом ограничений.
Команда, собственно, повторяет последний выбор объектов ^_^

dromandon

Слои

Кратко в общих чертах:

Работайте в слоях!
Если что-то можно выделить в отдельный слой - выделяйте!
Называйте как хотите эти слои, вам работать с ними дальше, но лично я бы советовал называть все слои таким образом, будто кто-то другой будет работать с вашим чертежом, тогда и вам самим будет всегда понятно, что вы имели ввиду, называя слой данным образом.

Меняйте толщины линии с "по слою" на любую другую величину только по острой необходимости.
Работайте таким образом, чтобы в будущем сделанную вами работу вы смогли сами изменить в пару кликов.


А теперь подробнее :)

Я расскажу несколько моментов в работе со слоями, которые используют не все.

Слои 2

Вытащите эту панельку себе, пускай всегда будет под рукой.
Из полезных функций на ней, к которым я обращаюсь довольно часто, это:
 - Отключить слой - отключает слой в котором находится выбранный элемент

 - Заморозить слой - замораживает слой в котором находится выбранный элемент

 - Включить все слои
 - Разморозить все слои

 - Конфигурации (см. дальше)
 

Чем отличается "отключение слоя" от "заморозки". Если я верно понял эти операции, то "отключение" просто скрывает объекты - они продолжают существовать на чертеже, просто мы их не видим. Заморозка же убирает элементы с чертежа.

Как это? 

Отключите какой-то слой. Нажмите сочетание клавиш ctrl+A - вы выделите все объекты, даже те, которые находятся на отключённых слоях.

Теперь попробуйте вместо отключения заморозить слой. При нажатие ctrl+A данный слой не выделится.

Спойлер

Как это использовать решайте сами. Я в основном удаляю таким образом ненужные мне объекты с чертежа :ph34r:

Ещё пример.

Допустим вы создали блок, внутри которого три отрезка, каждый в своём слое. Сам же блок в каком-то четвёртом слое.
При отключение одного из трёх  первых слоёв мы будем наблюдать, что отрезки, находящиеся в этих слоя будут пропадать с чертежа. То же самое происходит и при заморозке.
Но теперь давайте заморозим слой, в котором находится сам блок - все объекты, которые были внутри блока пропали с чертежа, но при этом слои, в которых находятся объекты внутри блока не отключены и не заморожены.
 

Спойлер

 

Но это всё мелочи, подходим к сладкому. Почему-то я не знаю пока никого у себя в городе, кто бы этим пользовался. Может город маленький просто, а может я людей знаю мало :unsure:

 

Конфигурации слоёв

Если вы работаете в модели, вы обязаны пользоваться этой функцией.
Я работаю в модели. Я понимаю все преимущества использование листов по сравнению с оформлением чертежей в модели, но задержку в несколько секунд при переключение между листами считаю критичной.

Поэтому ещё раз - конфигурации слоёв.

Делаете кладочные и отделочные планы на одном и том же плане этажа? Вы просто обязаны иметь как минимум две конфигурации - Кладка и Отделка.
Как настроить?
Очень просто - настраиваете требуемое отображение слоёв - СЛОИ - Добавить конфигурацию. Всё, осталось лишь назвать конфигурацию должным образом.

Спойлер

 

При этом в конфигурациях сохраняется не только включён или отключён ли слой, но его печатаемость, цвет, толщина и другие настройки

Спойлер

 

Спойлер

 

Группы слоёв

К сожалению эта функция в моей версии программы не работает должным образом, но в более поздних должна работать хорошо - позволяет выделить слои в группу и работать только с ними, т.е. выпадающий список слоёв сокращается до указанных вами. Полезно, когда имеется очень много слоёв (допустим, подложка на чертеже), а надо в данный момент работать только с 2-3 и постоянно между ними переключаться.

 

Бонус. Свойства слоя "0".

Хотел бы ещё рассказать вам про слой "0". У этого слоя есть особое свойство, отличающие его от других - если объект вычертить в нулевом слое и загнать его в блок, то он примет свойства слоя, в котором находится данный блок. Как это использовать - решайте сами;)

Спойлер

 

dromandon

Чтобы не уходить далеко от темы горячих клавиш расскажу про пробел.
Как вы, наверное, знаете, основная функция пробела аналогична нажатию клавиши Enter и служит для повтора последней команды и завершения текущей.
Но есть ещё несколько функций, о которых знают не все.
Все они выполняются, если выбрать базовую точку объекта и нажать на пробел определённое количество раз.

Спойлер
Спойлер
Спойлер
Спойлер


 Использование данной функции пробела было для меня первым звоночком к переходу к горячим клавишам.
Стоит ещё дополнительно к функции переноса при однократном нажатие пробела добавить функцию копирования. Она не доступна в моей версии нанокада, не уверен насчёт более новых версий. Поэтому показываю на примере Автокада лт 2013 (знаю, что в 2011 АК тоже так можно)
Выполняется это при однократном нажатие на пробел, после чего зажимаете ctrl и указываете место в прострастве.
Если продолжите удерживать ctrl, получите массив 

Спойлер

 

Можете, конечно, спросить меня - зачем мне этот пробел, когда у меня есть горячие клавиши?
Справедливо :o
Но, допустим, попробуйте перенести штриховку за базовую точку с помощью горячей клавиши? Собственно хотя бы для этого :D

dromandon

Это первый и один из самых важных советов при работе в любой программе, не только Cad - используйте горячие клавиши.
Да, вначале будет неудобно. Да, вы можете со мной до усрачки спорить и доказывать, что вам удобнее мышкой тыкать по иконкам. Да, вам может казаться, что прироста в скорости горячие клавиши вам не дадут. Я сам так думал. Но в один момент я заметил, что очень часто вижу упоминание горячих клавиш на разных форумах, в статьях и книжках. И заставил себя переучится.
Было сложно. Я выбрал самые используемые на мой взгляд команды в Cad и забил их на сочетание клавиш с Shift'ом. Придал этим сочетанием какую-то логику и начал работать... Но рука всё равно тянулась к иконкам. Раз за разом. Тогда я просто удалил иконки и не оставил себе выбора, кроме как вводить команды с помощью комбинаций клавиш.
На данный момент я не представляю, как я раньше работал без данного функционала. Это всё равно, что всеми известные "Ctrl+Z" или "Ctrl+С" нажимать через иконки. И в каждой новой программе, после некоторого использования её, я назначаю для самых повторяемых команд свои сочетания.

Я работаю сейчас в Nanocad СПДС 6.0, вот мои сочетания:
Shift +
Q - Копирование свойств 
W - Размеры 

E - Обрезать (Данная команда при выборе обрезаемого объекта с зажатым Shift работает как удленить)

R - Повернуть

A - Копирование

S - Зеркало
D - Перенести

F - Растянуть
G - Фаска
Z - Отрезок
X - Прямая
C - Полилиния
V - Прямоугольник.
 

Из этого списка, самой менее используемой мною командой оказалось "Повернуть" .

×
×
  • Создать...