На заметку программистам - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > На заметку программистам

На заметку программистам

Ответ
Поиск в этой теме
Непрочитано 05.06.2007, 07:28
На заметку программистам
ShaggyDoc
 
Thượng Tá Quân Đội Nhân Dân Việt Nam
 
44d32'44"С, 33d26'51"В
Регистрация: 14.03.2005
Сообщений: 13,372

Сначала присказка.

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

Значительная часть блоков используется для рисования масштабируемых символов - условных обозначений, таблиц и т.п.

Такие исходные блоки созданы, как правило, с единицей рисунка миллиметр, а размеры их такие, какие должны быть в миллиметрах на бумаге. Например, если блок, изображающий колодец, должен изображаться на бумаге в виде кружка (с какой-то внутренней начинкой) диаметром 2 мм, то он имеет размер 2 единицы.

Вставка блоков производится специальными программами с выбором из иллюстрированного дерева меню. Пользователь, собственно, и не знает о том, что вставляется блок. Ко вставке часто добавляется и дополнительное рисование. Блоки автоматически масштабируются и, при необходимости, поворачиваются.

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

Выбор масштаба и единиц осуществляется в специальном диалоговом окне и эти параметры сохраняются в собственном словаре рисунка. При выборе масштаба и единиц автоматически производится установка всех системных переменных в требуемые значения.

При работе с блоками (или другими масштабируемыми символами) происходит автоматическое масштабирование по следующему алгоритму:

1. Если блок вставляется в модель на вкладке Model, он масштабируется в соответствии с установленным масштабом печати модели
2. Если блок вставляется в модель на любом Layout через Vport, он масштабируется в соответствии с масштабом Vport
3. Если блок вставляется в пространство листа, он масштабируется с учетом собственного размера и единиц рисунка. Здесь учитывается, что в модели единицы могут быть миллиметры или метры, а в листе единицы всегда миллиметры.
4. Одни и те же блоки могут использоваться и в чертежах, сделанных в миллиметрах, и в чертежах, сделанных в метрах. Дюймы и прочие "попугаи" мы не используем из прынцыпа ("а че они негров линчуют"), хотя сделать это несложно.

Вот так работа выполнялась много лет, в версиях AutoCAD от 10 до 2007, созданы десятки тысяч чертежей как зданий, так и топографии, и все было нормально.

Теперь "сказка".

Вдруг, при работе с наружными сетями (единица рисунка "метр") обнаруживается, что блоки вставляются в неправильном масштабе - в 1000 раз меньше, чем нужно. Ни одна программа не менялась, но значительная часть стала работать неправильно. Вставка блоков, как правило, производится объектными методами, и лишь изредка, при интерактивной работе, используется (vl-cmdf "_.INSERT" ...)

Не столь давно пришлось возвращаться к "командной" технологии по двум причинам:
1. Необходимость работы в 3D, где, в хитрых ПСК, с объектами практически невозможно правильно работать.
2. Перспективное портирование в BricsCAD.

Расследование показало, что ошибка происходит при работе команды INSERT. Значение масштаба блока в нее передается правильное, а вот сама команда масштабирует блок по своему усмотрению. Но ранее этого никогда не было, или я этого не замечал.

Допрос 3-й степени выявил, что теперь команда INSERT работает с учетом системной переменной INSUNITS. AutoCAD сам пытается масштабировать блок, но делает это не всегда правильно. Такое поведение понятно и логично, когда блок перетаскивается вручную из DesignCenter или из палитры. Это действительно значительно облегчает ручную работу, но при автоматическом масштабировании происходят ошибки. Этот нюанс не документирован, или документирован намеком. Для режима "командной строки" правильнее было бы, чтобы переданные масштабы принимались безо всякой корректировки, а "вычисленные", в лучшем случае предлагались бы в качестве значения по умолчанию. Но это мое мнение, на которое Аутодеск наплевать.

Системную переменную INSUNITS ruCAD устанавливает при выборе единиц. Сделано это для того, чтобы чертеж, попавший в чужие руки (или в другую программу) был сделан "как надо". Если единицы рисунка - метр, то INSUNITS=6, а если единицы миллиметр, то INSUNITS=4. Это пригодится и на тот случай, если этот чертеж будет вставляться вручную.

В результате пришлось откорректировать несколько библиотечных функций вставки блоков - перед вызовом (vl-cmdf "_.INSERT" ...) устанавливать INSUNITS=4 (метр), а после завершения команды - восстанавливать прежнее значение. Так сделано потому, что все блоки созданы с единицами - миллиметр. Разумеется, после этого все программы заработали правильно.

"Вот такой гутен-морген, значить, получился с этим нюансом", как говаривал бессмертный капитан Фома Фомич Фомичев.

Надеюсь, эта заметка позволит программистам избежать таких "нюансов" в своих программах.
Просмотров: 17943
 
Автор темы   Непрочитано 06.06.2007, 13:13
#21
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Alaspher
Цитата:
Сообщение от ShaggyDoc
2. После указания точки вставки, если block_angle не NIL выдается приглашение msg_angle для указания угла поворота вставленного блока (визуального или с клавиатуры, или любым стандартным методом) относительно точки вставки с углом 0 по умолчанию.
Если мне не изменяет мой склероз, то как раз, когда NIL, тогда и должен быть интерактивный запрос поворота.
Точно! Исправляю!
ShaggyDoc вне форума  
 
Непрочитано 06.06.2007, 13:47
#22
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


ShaggyDoc
Надо полагать, что лучше вас с Alaspher'ом все равно никто не напишет, поэтому, раз проблемы только с ПСК, то может имеет смысл сформулировать их поконкретнее. Тогда есть вероятность, что кто-нибудь подкинет решение или идею.

Цитата:
Но вот при переходе в 3D появилось еще больше сложностей. А работать надо, причем в любой ПСК. Пока пришлось вернуться к INSERT. Причем, очень примитивно - вместо цикла вставки с визуальным "висением" смасштабированного изображения блока на курсоре, сделал тупой запрос о повторении вставки.
Мне, например, не понятно почему пришлось вернуться к insert, и почему нет "висения", и зачем запрос о повторении? Собственно это не проблемы, а их решения. А надо проблемы :)
AY вне форума  
 
Непрочитано 06.06.2007, 16:31
#23
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Цитата:
...команда INSERT в нем не использовалась. Ее пришлось применить из-за перехода к 3D.
Правильно ли я понял, Сергей Александрович, что в Вашем арсенале отсутствует функция, умеющая объектным методом (или же через entmake) вставлять имеющийся блок в нужную точку текущей (произвольной) ПСК с нужным углом поворота (опять же относительно оси Х ПСК)?
Pastor вне форума  
 
Непрочитано 06.06.2007, 17:23
#24
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от ShaggyDoc
Все "очень просто", пока не столкнетесь со сложным.
Выложите пожалуйста пример блока (файл) и параметры файла, в который необходимо его вставить со всеми необходимыми формальностями, например, заполнение атрибута, масштабы, система координат...

Я несколько раз перечитал ваш первый пост, но так и не понял, что именно заставило вас использовать командную строку!
Если вы столкнулись с тем, что автокад изменяет блок, во время его добавления к чертежу (не вставки), то здесь очень удобно использовать entmakex - автокад ничего не меняет.
Если у вас сложности с системами координат (не верю) - поможем!
Но скорее всего, я опять ничего не понял...
Елпанов Евгений вне форума  
 
Непрочитано 06.06.2007, 17:30
#25
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Pastor
"Это не серьезно..."
AY вне форума  
 
Непрочитано 06.06.2007, 17:35
#26
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


проблема по моему с визуализацией - пересчет координат устает - вот и пришлось воспользоваться insert?
Zouss вне форума  
 
Непрочитано 06.06.2007, 17:47
#27
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


У меня еще один вопрос, в этой теме, несколько раз упоминался BricsCAD...
Вопрос ко всем, насколько актуально ориентироваться на него, при написании программ? Может уже давно пора тестировать свои программы, не только на всех версиях акада, но и на Брискаде?

PS. Я никого не хочу провоцировать на полемику, но мне интересно ваше мнение.
Елпанов Евгений вне форума  
 
Непрочитано 06.06.2007, 22:30
#28
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Цитата:
Сообщение от Елпанов Евгений
Может уже давно пора тестировать свои программы, не только на всех версиях акада, но и на Брискаде?
Влезу со своими пятью копейками. Думаю, что безусловно стоит. Стал в нем копаться недавно, считаю вполне адекватным за эти деньги.
Александр Бауск вне форума  
 
Непрочитано 06.06.2007, 22:41
#29
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


В лиспе, который внутри брикса, отсутствуют как класс (по крайней мере в 7-ке) activex и vl-расширения. А также некоторые сильно привычные функции (я, например, тихо бился головой о клаву, узнав, что там нет function). Так, например, нет обработчика ошибок (и нажатие Esc при выборе точки выбьет софт в аут). Приличные проблемы при загрузке меню (по крайней мере пока) - сужу по методике установки BricsCAD BonusTools от Евгения на сабитовском форуме. Ну и так далее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.06.2007, 07:09
#30
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Раз создал такую провокацию, отвечаю на накопившиеся вопросы:

Цитата:
Сообщение от Кулик Алексей aka kpblc
Еще раз прочитал тему, в связи с этим вопрос: так проблема во вставке имеющегося описания блока или во вставке описания блока из другого файла, с, возможно, "нестандартными" insunits?
Вставка блока, с имеющимся описанием. При вставке из файла AutoCAD сначала внедряет описание блока, а потом уже происходит его вставка. Проблемы, связанные с различностью INSUNIT, происходят в момент вставки с помощью команды.

Цитата:
Сообщение от AY
Мне, например, не понятно почему пришлось вернуться к insert, и почему нет "висения", и зачем запрос о повторении? Собственно это не проблемы, а их решения. А надо проблемы
Так попробуйте реализовать описанное в [14] для любой ПСК в 3D. Визуальность и многократность вставки - самые основные условия.

Цитата:
Сообщение от AY
Правильно ли я понял, Сергей Александрович, что в Вашем арсенале отсутствует функция, умеющая объектным методом (или же через entmake) вставлять имеющийся блок в нужную точку текущей (произвольной) ПСК с нужным углом поворота (опять же относительно оси Х ПСК)?
Да функции есть на все случаи жизни. И объектные, и ent-xx, и все манипуляции с ПСК и координатами в 3D. Но интерактивную визуальность дают только command. Причем, для визуализаци-то использовалась CHANGE (имитация INSERT).
Это видно в коде Кулик Алексей aka kpblc [9].

Цитата:
Сообщение от Елпанов Евгений
Я несколько раз перечитал ваш первый пост, но так и не понял, что именно заставило вас использовать командную строку!
Если вы столкнулись с тем, что автокад изменяет блок, во время его добавления к чертежу (не вставки), то здесь очень удобно использовать entmakex - автокад ничего не меняет.
То же самое - обязательная интерактивная визуальность до указания точки вставки.

Цитата:
Сообщение от Елпанов Евгений
Выложите пожалуйста пример блока (файл) и параметры файла, в который необходимо его вставить со всеми необходимыми формальностями, например, заполнение атрибута, масштабы, система координат...
А я и не сомневаюсь, что разовую работу хороший мастер сделает в любом случае. А надо, чтобы массово, на потоке, и не сам "кутюрье", а "швея-мотористка после ПТУ".

Цитата:
Сообщение от Елпанов Евгений
У меня еще один вопрос, в этой теме, несколько раз упоминался BricsCAD...
Вопрос ко всем, насколько актуально ориентироваться на него, при написании программ? Может уже давно пора тестировать свои программы, не только на всех версиях акада, но и на Брискаде?
На мой взгляд - нужно ориентироваться. Мне, во всяком случае, придется независимо от желания. BricsCAD уже достаточно "подрос" и является реальным конкурентом с учетом соотношения цена-качество-возможности. А вот прикладные программы к нему достаточно дорогие.

Однако программы писать пока достаточно сложно. Кулик Алексей aka kpblc в [29] верно отметил основные проблемы. И даже если появятся ActiveX и vl-расширения, то будут не такие, как в AutoCAD - имитация всегда хуже оригинала. И непременно будут "свои тараканы". Особенно при первоначальной реализации. Если ActiveX - то какая-же кроссплатформенность? Значит тоже какая-то имитация для Win-платформы. Или вообще самостоятельное направление.

ActiveX появился в AutoCAD-14.01, но толку от этого не было - фактически продемонстрировали концептуальное направление на будущее.

Простенькие программы с command для Brics писать вполне возможно, примерно на уровне сложности для AutoCAD-10. В AutoCAD ведь даже vl-cmdf сделала революцию - а всего-то стала возвращать значение, и это открыло большие возможности.
ShaggyDoc вне форума  
 
Непрочитано 07.06.2007, 09:30
#31
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


>ShaggyDoc
Верно ли я понял?
Необходима программа, которая будет интерактивно вставлять имеющийся в чертеже блок. При вставке необходимо отслеживать точку, угол, масштабы по осям. Программа должна работать в любой системе координат. Интерактивностью, вы называете динамическое изменение блока, на экране - при указании точки, угла, масштаба. Как пример, динамику необходимо реализовать на основе grread...
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 07.06.2007, 11:10
#32
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Елпанов Евгений
>ShaggyDoc
Верно ли я понял?
Необходима программа, которая будет интерактивно вставлять имеющийся в чертеже блок. При вставке необходимо отслеживать точку, угол, масштабы по осям. Программа должна работать в любой системе координат. Интерактивностью, вы называете динамическое изменение блока, на экране - при указании точки, угла, масштаба. Как пример, динамику необходимо реализовать на основе grread...
Все расписано в [14]. Не программа, а функция. Не отслеживать, а указывать. Масштабы по осям задаются в аргументах. Угол поворота тоже может быть аргументом.

Интерактивность - не динамическое изменение блока (изменять не надо), а

Цитата:
в цикле, до пустого ввода, вставлять блок block_name. Блок должен при этом визуально висеть на курсоре, предварительно отмасштабированный до x_scale и y_scale. Пользователь должен видеть изображение блока до указания точки вставки (включая первую вставку) и приглашение msg_insert. Указывать точку вставки можно любым стандартным методом (мышкой, с клавиатуры, с использованием объектной привязки и прозрачных команд).
Предложения, "как можно" - не нужны. Их много опробовано. Просто было предложено желающим попытаться реализовать свой, возможно уникальный, вариант. Предложения - в виде кода, а не в виде идей.
ShaggyDoc вне форума  
 
Непрочитано 07.06.2007, 14:45
#33
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,986


Господа глубокоуважаемые сэры, простите что не по существу въезжаю, но- редкий случай- так много и в одном месте...
Вот еще в 3 посте было:
==Кроме того - впереди Brics. Какие там особенности встретятся - еще не знаю. ==
А что-нибудь скажите, хоть ругнитесь, по поводу братьев китайцев и ZWCADа?
Аshаs-ка вне форума  
 
Непрочитано 07.06.2007, 14:54
#34
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Черт бы побрал китайцев, а заодно и эту всеобъемлющую автоматизацию.
Profan вне форума  
 
Непрочитано 07.06.2007, 14:59
#35
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


> ShaggyDoc: постараюсь сегодня выложить свой вариант, соединенный в один лисп. Если это надо, конечно.
> Аshаs-ка : лично я просто ZWCad не качал и соответственно не тестировал. Если получится, попробую чего-нить в нем наваять
> Profan : Ну зачем так-то уж??
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2007, 16:37
#36
Аshаs-ка

проектировсчик
 
Регистрация: 06.01.2006
Москва
Сообщений: 1,986


Мне внешне ЗВ нравится своим оформлением и простотой, надо бы на него всех теток пересадить, как раз по ним велосипед. Интересно было бы узнать Ваше мнение про. Все, больше не в тему не лезу.
Аshаs-ка вне форума  
 
Непрочитано 07.06.2007, 16:44
#37
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Ну не гони волну на берег, дай до дому добраться и качнуть Судя по заявлениям на официальном сайте, оно будет как минимум так же интересно, как BricsCAD (правда, насчет Linux'a я не увидел инфы, ну да ладно).
P.S. Можно вообще отдельную тему создать по BricsCAD / ZWCad etc альтернативы и там потрепаться на отвлеченные темы
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2007, 18:38
#38
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Для Кулик Алексей aka kpblc.
Я в какой-то степени рад, что притормозился с программированием в AutoCAD'е несколько лет назад. А то был бы сейчас таким же саркастическим, как Лентяй. :wink:
Profan вне форума  
 
Автор темы   Непрочитано 08.06.2007, 06:47
#39
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Кулик Алексей aka kpblc
> ShaggyDoc: постараюсь сегодня выложить свой вариант, соединенный в один лисп. Если это надо, конечно.
Надо, конечно. Возможно, в результате получишь такую же награду, как сэр Alaspher 10 лет назад (года он еще не был Alaspher). Еще одна награда ищет Павла Цуприка, который где-то затерялся.

Ну, если у людей есть желание поболтать "за жисть", как автор ветки не буду возражать.

Мое мнение по поводу Brics, Zw и прочих отпрысков IntelliCAD.

Программы развиваются и становятся интересными. Но судьба неясна. Конечно, многие их будут использовать. Но это уровень - скачал - посмотрел - понравилось - работаю. А это любительский уровень. Профессиональный будет, когда программу официально использует вся проектная организация.

Для этого необходимо, чтобы программа официально распространялась и поддерживалась в России, чтобы ее можно было купить с соответствующим оформлением платежных документов. Желательно, чтобы она была в каком-нибудь списке сертифицированных или рекомендованных. Чтобы имела определенную рекламу и раскрутку.

Вот недавний пример, о котором уже писал. При наезде на институт по поводу нелегального софта, можно было бы:

а) Откатиться на легальный AutoCAD 14 на части машин и докупить на остальные BricsCAD.

б) "Реструктуризировать" долг за пиратские версии и постепенно перейти на современный AutoCAD.

в) Купиться на что-нибудь.

Один из институтов пошел по варианту в). Потому, что было агрессивное предложение, подкрепленное "кое-чем", был и видимый результат - коробки, тома с документацией, обучение специалистами фирмы. Правда, в результате организация выпала из струи (кому нужен таксист с ЗАЗ), да и денег ушло чуть поменьше, чем с б). Но это директора не волнует. Зато у него в бухгалтерии все чисто.

А как все это организовать с BricsCAD или ZwCAD - не представляю.

Кроме того, в бесплатных (или "почти бесплатных") продуктах есть и опасность - они мало исследованы. Например, OpenOffice внедряется очень агрессивно. Вроде бы почти все в нем хорошо (ну, пусть удовлетворительно). Однако более внимательное исследование показало, что там есть такие ужасные ошибки, которые делают отдельные программы просто опасными.

Бесплатность тоже оказывается фиктивной. Там, оказывается, и платные лицензии имеются. А стоимость потерь рабочего времени на переобучение и борьбу с глюками оказывается больше, чем затраты на приобретение MS Office (ползарплаты). Да и "открытые форматы" оказываются не такими уж открытыми.

В общем, надо учитывать особенности арабского бизнеса - "залезть на верблюда - бесплатно, а вот слезть....".
ShaggyDoc вне форума  
 
Непрочитано 08.06.2007, 10:39
1 | #40
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


> ShaggyDoc: вроде я ничего не упустил. Если чего лишнего понасовал в архив, прошу простить.
[ATTACH]1181284788.rar[/ATTACH]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > На заметку программистам