|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
16.02.2009, 08:40 | #1 | |
LISP. Отрисовка произвольной трассы из отрезков и дуг.
Москва
Регистрация: 25.12.2005
Сообщений: 13,627
|
||
Просмотров: 16663
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848
|
Критику примешь?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Критику приму. Только отмечу, что программа написана по просьбе специалистов-слаботочников и в таком виде вполне их устраивает. Привязки специально не отключены, пользователи могут отключать и включать их вручную в процессе отрисовки. Модуль обработки ошибок сознательно не делал, возможные ошибки здесь мало чем отличаются от возможных ошибок при выполнении команды "_Line". Возможно, в программах появятся некоторые усовершенствования, связанные с с печатью на экране длин сегментов. Интересно, что неправильное задание радиуса сопряжения не приводит к аварийному завершению программы.
|
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Привязки должны работать в момент ввода данных, но обязательно должны отключаться каждый раз в момент рисования. А потом восстанавливаться. Типа
Код:
|
|||
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
|
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Именно эти замечания я и ожидал увидеть. Можно оставить CMDECHO равной 1. Если количество командных строк не более 3, то фактически все промежуточные сообщения проскакивают незаметно. С OSMODE вообще связываться не хочу. Не думаем же мы об этой переменной, когда рисуем отрезки, просто устанавливаем заранее нужные нам объектные привязки. Да и F3 работает ведь. Честно скажу - совсем неохота расчитывать на дремучих пользователей.
|
|||
|
||||
Инженер-строитель Регистрация: 15.08.2007
Киров
Сообщений: 2,204
|
Так быстрее и без эха в ком. строке.
А насчет добавленного позже кода, я (и не только) считаю, что после окончания работы программы сама система Автокада должна оставаться в таком же виде, что и непосредственно перед запуском лиспа. Вот запустит потом юзер просто _FILLET, а там уже какой-то непонятный радиус появился. А может у юзера вообще привычка делать _FILLET с радиусом 0? Короче, вспомни увлекательные приключения некоторых пользователей на тему FILEDIA. |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Да какой, блин, геморрой с привязками? Пользователь рисовал подобную трассу отрезками с нужными ему привязками или с отключенными привязками и никакого геморроя у него не образовалось. Точно так же, и с теми же привязками или без оных он будет тащить свою трассу с помощью программы. Суть-то программы в том, что теперь пользователю не надо прощелкивать трассу, отрисованную последовательными отрезками, командой "_FILLET" ("СОПРЯЖЕНИЕ"). Вот это главное.
Makswell, FILEDIA скрыта от пользователя, а при выполнении команды "_FILLET" на экран выводится текущее значение радиуса сопряжения, причем, независимо от значения переменной CMDECHO. И вообще, знаете, чем слаботочник обосновал необходимость такой программы? Думаете, он кабель или короб гнет по радиусу, скажем, 150 мм? Да нет, это не трубопровод. Просто ему нужно, чтобы его трассы на чертеже имели закругления в углах. В отличие от стен, которые закруглений в углах не имеют. Вот такая подоплёка. Еще добавлю. На форуме caduser.ru один пользователь предложил дополнить программу возможностью по ходу построения отменять сегменты. Что-то я сомневаюсь в необходимости этого для случая простых отрезков с дугами. Тем не менее, был бы рад подсказке, как это сделать. Во второй программе идет накопление объектов в наборе, из которого потом формируется полилиния. Если я отменю сегмент, этот объект из набора тоже исчезнет? Последний раз редактировалось Profan, 17.02.2009 в 18:43. |
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Profan, Отменять сегменты последовательно?
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Цитата:
Код:
Код:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Дима_, да я в принципе не спорю с тем фактом, что неправильно установленные привязки могут сыграть плохую роль при отрисовке объектов. Но в данном случае отрисовка производится вообще при выключенных привязках, а эту операцию мои заказчики выполняют нажатием клавиши F3. Вообще, отрисовку сетей они производят фактически на глазок, вдоль стен помещений и изредка могут временно включить привязку при подводке к какому-нибудь распределителю. В большинстве случаев отрисовка производится в режиме ОРТО, но иногда и при выключенным режиме ОРТО, что выполняется нажатием клавиши Shift. И вот тут есть своя проблема: клавиша Shift является клавишей временной замены (переключателем режима ОРТО). Но в то же время при нажатой клавише Shift радиус сопряжения временно сбрасывается в 0 - вот проблема, с которой я еще не разобрался. Или вот отмена последнего отрисованного сегмена в случае циклического выполнения команд с переназначением координат точек. А то - какие-то привязки. Задача специализированная. Конечно, если к ней подходить, как к некой абстрактной задаче отрисовки с неопределенными условиями - тогда можно и поизгаляться с предвосхищениям всех мыслимых условий. Но, может, к этому я еще вернусь, пока надо решить несколько принципиальных вопросов, возможно у заказчиков (пользователей) появятся дополнительные пожелания.
|
|||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Profan, Вот вариант с отменой. Добавил коментарии, должно быть понятно.
Остановлюсь на основном моменте. При отмене с помощью UNDO восстанавливается и состояние системных переменных, в том числе и USER* Поэтому 1. С помощью UNDOMARKS контролируем счетчик отмен, чтобы не отменить лишнего 2. Запоминаем X последней точки в USERR1, Y в USERR2. В случае отмены последнюю точку восстанавливает из этих переменных 3. Для сопряжения запоминаем метку (5 код dxf) последнего отрезка в переменной USERS2, в переменную USERS1 запоминаем предыдущее значение USERS2. Это позволит начать сопрягать начиная с 2 отрезков. 4. Для вызова сопряжения используем vl-cmdf. В случае невозможности сопрячь отрезки заданным радиусом не произойдет аварийного завершения команды. Вот как-то так Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
VVA, прими мою благодарность и благодарность моих друзей, все довольны и счастливы. В некоторый момент показалось, что твоя программа конфликтует с СПДС, но потом вяснилось, что все дело в настройках СПДС (там текущий масштаб типа линий все время сбрасывался в 1, в результате чего наши отрезки и дуги отрисовывались не так, как предполагалось).
|
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нужен LISP для суммы длин отрезков линни | ilka_t | LISP | 219 | 10.09.2019 10:22 |
Lisp (отрисовка колонны) не работает | dextron3 | LISP | 5 | 26.07.2008 20:14 |