Размер имеет значение, без преувеличения
Если рассматривать процесс проектирования как процесс поиска оптимального решения из всего многообразия возможных решений, то становится очевидным, необходимость многократного редактирования параметров объектов SPDS в среде nanoCAD СПДС и СПДС GraphiCS (аналогичное приложение к AutoCAD). Редактирование параметрического объекта SPDS, размещенного на чертежи возможно тремя способами: либо с помощью «ручек», что реализуется функцией OnMoveGripPoint; либо путем изменения свойств объекта, что реализуется функцией OnChangeParameters; либо с помощью диалогового окна, что реализуется либо функцией OnDialog либо диалоговой формой. При активации в диалоговом окне или форме опции «выбор параметров динамически» редактирование заканчивается действиями определенными в функции OnSelectParam

 
Здесь нет особый рекомендаций по целесообразности того или иного способа редактирование объектов все зависит от обстоятельств, важно другое – если мы хотим измени «поведение» объектов в процессе их редактирования надо изменить соответствующие функции. 
Следует также отметить, что перед каждым усовершенствованием объекта всегда стоит задача о целесообразности добавления в объект дополнительных параметров - переменных. Все дело в том, что с развитием функциональных возможностей объектов неизбежно возрастает их количество и в конечном слете может случиться так, что управление объектом SPDS станет сложным как управление самолетом! С другой стороны, при наличии параметров связанных между собой, можно на уровне программного кода упростить процесс управления объектов, но это уже другая тема урока. 

Если пойти по кратчайшему пути, то можно решить проблему кратности длины линейных объектов с помощью внутренней сетки объектов, которая предусмотрена в средах nanoCAD СПДС и СПДС GraphiCS, но не используется... Параметры внутренней сетки объектов можно задать с помощью диалогового окна «Быстрые настройки» по комбинации горячих клавиш Ctrl+Shft+Q (по умолчанию) и при желании их можно поменять в настройках, как показано ниже. 

Теперь надо внести изменения соответствующие функции и заставить внутреннюю сетку объектов SPDS работать на нас, с помощью системной функции GridRound()
Если мы хотим, чтобы с помощью ручки изменялась длина объектов с заданным шагом сетки необходимо в тело функции OnMoveGripPoint заменить оператор (строку) 
L=max(vecLen(pntGrip0-pntGrip1),1);
или
L=vecLen(pntGrip0-pntGrip1); 
на оператор (строку) 
L=GridRound(vecLen(pntGrip0-pntGrip1))/rScl;

Следует отметить, что при замене «стандартного» оператора на альтернативный мы заодно исправили логическую ошибку программного кода, которая ранее проявлялась при работе с объектами в масштабе измерений. При работе с объектами в масштабе символов данная логическая ошибка не проявляется. Кроме того, мы решили снять ограничение по минимальной длине металлических конструкций (1мм), что определялось выражением  L=max(vecLen(pntGrip0-pntGrip1),1). Возможно в  ГОСТах есть ограничения на минимальную длину металлопроката  равной 1 мм,  но мы их не нашли. В этой связи считаем, что нет необходимости перегружать скрипт объектов лишней функцией (max(a,b)) и оставить за проектировщиком право определять минимальную длину элементов маталлопроката. 
Чтобы переопределить поведение объектов в процессе их редактирования с помощью свойств объекта, а также при редактировании объекта с помощью в диалогового окна необходимо внести изменения в тело функции OnChangeParameters и заменить оператор 
 L=new.L; 
на оператор 
L=abs(GridRound(L=new.L));
 

И наконец, чтобы переопределить поведение объектов в процессе их динамеческого редактирования (при активизированной опции «выбор параметров динамически») необходимо в тело функции OnSelectParam заменить оператор 
L=rXcoord;
или
L=max(abs(rXcoord),1); 
на оператор 
L=abs(GridRound(rXcoord)); 

Таким образом, после корректировки скриптов объектов «стандартной» библиотеки в соответствии с изложенными выше рекомендациями, вы избавитесь от необходимости следить за тем чтобы значение длины элементов строительных конструкций были всегда с заданной точностью (кратностью). При этом, если вы сочтете необходимым использовать в своей работе автоматизированное составление спецификаций (см урок 2), то у вас никогда не появятся в спецификациях позиции, длина элементов которых имеет нелепое значение с точностью до четвертого знака после запятой или с точностью до сотен нанометров (если чертеж выполнен в милиметрах)!!!
Следует также отметить, что с решением проблемы точности линейных размеров (без преувеличения) при проектировании металлоконструкций мы можем аналогично решить еще одну сопутствующую проблему связанной с точностью подсчета массы металла... Сегодня масса элементов в "стандартной" редакции определяется с точностью до сотых миллиграммов! Эту сверхточность мы будем устранять в следующий раз... Те кто не хочет ждать может это сделать самостоятельно.  
Хотя, кто знает, возможно мы своими инновациями вместе с водой выплеснули и ребенка. И теперь нет основания называть nаnoCad  нанокадом и возможно пора подумать о ребредниге (milliCad). Успокаивает одно - своими усовершенствованиями, как нам кажется, снесли свой вклад в развитие nanoSoftа и надеемся, что другой софт от nanoSoft будет продуман до наномелочей :)...

Возврат к списку