|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,246
|
Я - не пользуюсь.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,317
|
Зачем блок-схемы? Это для первоклассников - чтоб на доске рисовать. Места много, толку мало. И не все выразишь. Алексей правильно делает - заготовка пустой функции, план в комментариях, потом реализация.
Цитата:
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,246
|
Позволю себе высказаться о последовательности разработки "сложения значений из 2 или более однострочных текстов или атрибутов":
1. Разработать или спереть функцию отлова ошибок (_ru-error-catch, _dwgru-error-catch) 2. Разработать или спереть функцию безошибочного указания примитива, возможно, с контролем возвращаемого типа. Сделать универсальной (т.е. дать возможность использовать и nentsel, при необходимости). 3. Решить раз и навсегда - функция будет обрабатывать 2 примитива? Или их надо указывать набором? В зависимости от этого будет немного меняться решение. 4. После п.3 написать часть получения текстовой строки (однострочного текста / атрибута) и перевода его в числовое значение. Ну и сложить. Сделать результат вычисления возвращаемым значением. 5. Написать общую функцию, которая загрузит все служебные функции и покажет результат. 5.1. Если результат надо выводить в однострочный текст, то потребуется функция создания однострочного текста. Подробности - самостоятельно (слишком много нюансов). 5.2. Если результат выводить в ком.строку или в alert - то все просто, но и это надо учитывать ![]() --- 6. Решить вопрос с предоставлением функции сторонним пользователям. Да и про себя, любимого, тоже забывать не след ![]() === "Зачем так сложно!?" Затем, что функция безошибочного указания примитива, скорее всего, понадобится еще не одну сотню раз. И функция отлова ошибок. Короче, "САПР на базе" в руки и вперед ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
ShaggyDoc,
Цитата:
![]() Пока мне хотелось бы понять как задачку от VVA дописать в самом простом виде. Полистал я хелп и лиспики разные тоже, но пока не понял какие функции надо использовать, чтобы построить полилинию по координатам относительно центра вставки. Shoorup, Цитата:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,246
|
Red Nova, а ты как собираешься эту полилинию строить? Командой? entmake? vla?
Сильно подозреваю, что командой ![]() Переменные перевести в локальные обязательно! Потом можешь посмотреть на *error* и почти универсальный обработчик ошибок. --- Не, это точно чат! ![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Олег К.,
Мне VVA пока запретил vla-функции ![]() Про команду _.PLINE не очень понял, разве в программу аутолисп можно вписать обычную команду? Остается функция entmake. Почитаю про нее.
__________________
Блог |
||||
![]() |
|
||||
Кулик Алексей aka kpblc,
Цитата:
![]()
__________________
Блог Последний раз редактировалось Red Nova, 23.07.2008 в 10:08. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,246
|
getpoint, getdist (для указания ширины и высоты), getvar, setvar, command
Для вычисления точек пока используй напрямую setq и результат подставляй в command. Как вариант, без учета поворота: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Кулик Алексей aka kpblc, Если честно, ты мне обломал урок,
![]() Цитата:
__________________
Блог |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,246
|
Код сделал прежде всего для анализа
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Red Nova, Продолжим. Сейчас мы имеем такой код
Код:
1. Мы не знаем vla-* функций (не можем обработать ESC) 2. Мы даже пока не знаем, что такое dxf коды ![]() Цитата:
Остается пока Цитата:
Пару критических замечаний по существующему коду: 1. Мы ф-цией (initget 7) запрещаем пустой ввод. Поэтому здесь "Введите ширину колонны <Выход>: " - <выход> не уместен. А вот в getpointe мы пустой ввод не запрещаем, запрещать не будем, а выход заменим на 0,0. Т.е. задача такая: В случае нажатия ENTER на запрос getpoint присвоить переменной base точку с координатами 0,0
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 31.07.2008 в 10:41. |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,317
|
Анализ показал, что колонна всегда будет смотреть в одну сторону.
![]() Цитата:
Попробуйте-ка что-нибудь нарисовать на другом языке высокого уровня, и даже на LISP, но вне Автокада. |
|||
![]() |
|
||||
VVA,
Ты хороший педагог. Цитата:
Цитата:
Из справки Цитата:
Думаю надо так Код:
Код:
__________________
Блог |
||||
![]() |
|
||||
А в чем смысл сдвоенной скобки?
И зачем тут Цитата:
__________________
Блог Последний раз редактировалось Red Nova, 23.07.2008 в 14:38. |
||||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Функция cond обрабатывает аргументы, как списки. Если список, возвращает nil, переходит к следующему спску, если возвращено не nil, то полученное значение возвращается без обработки следующий списков. Список обрабатывается следующим образом - вычисляется первый элемент списка, если он не nil, то вычисляются все последующие элементы списка, последний вычисленный элемент возвращается. В случае:
Код:
Код:
|
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,317
|
Все-таки советую больше внимания уделить продумыванию алгоритма. Например, само рисование колонны. Вроде бы прямоугольник. Но из чего? Можно из отрезков, а можно полилинией. Можно и залитый, а можно и прозрачный. У колонны могут еще и свои "осики" быть. Двухветвевой она может быть или сплошной.
Приведу пример, как колонны в ruCAD рисуются в 2D. Сначала выбор из иллюстрированного меню (прилагаю скриншот). Там сразу выбирается типоразмер и вид колонны. Не обязательно самому именно такое меню делать, можно и просто в AutoCAD-овское встроить. А вот протокол работы после выбора типа: AutoCAD спрашивает: Пролет=6000, Количество=1. Точка начала ряда [Пролет/Количество]<Выход>:К То есть можем нарисовать и одну, и целый ряд с заданным пролетом. Можем сразу указать точку, а можем выбрать опции Пролет или Количество или просто нажать Enter и закончить работу. Допустим, ввели опцию К (можно из автоматически сформированного контекстного меню, можно с клавиатуры). Тогда спросит: Количество [Указать]<1>:5 После ввода количества возобновляется допрос: Пролет=6000, Количество=5. Точка начала ряда [Пролет/Количество]<Выход>: Укажем точку. Тогда вопрос: Направление ряда: Здесь надо указать точку. После того рисуется целый ряд колонн (см. рис), и снова вопросы: Пролет=6000, Количество=5. Точка начала ряда [Пролет/Количество]<Выход>: То есть можно и еще несколько рядов указать. Или сделать пустой ввод и закончить программу. Вот это как бы постановка задачи - что надо получить и как должно работать. Разумеется, могут быть и другие варианты. А вот и программирование: Всего одна строчка, вписываемая в меню. Код:
Такой вызов легко модернизирует любая "тетка". Меняй 500 и 1000 на другие значения и будешь иметь кучу "команд". Если же надо сплошную колонну 600х600, вызов немного другой: Код:
И вообще это совсем не обязательно для колонн, а для чего угодно подходит, где надо любое изображение с заданными габаритными размерами нарисовать сколько-то раз с заданным шагом. Картошку, например, рассадить. Само же кодирование дело более техническое. Конечно, там нужны и знания и мастерство, но это всё-таки труд для "Microservs". Хорошую постановку задачи потом легче и реализовать в коде. Последний раз редактировалось Кулик Алексей aka kpblc, 14.08.2008 в 16:08. |
|||
![]() |
|
||||
ShaggyDoc,
Цитата:
__________________
Блог |
||||
![]() |
|
||||
VVA
Почитал немного про command Из хелпа Цитата:
Х pt1 =Х base – (dimensionX/2) Y pt1 =Y base – (dimensionY/2) И так далее для всех точек. Теперь попробую это представить как лисп выражение Код:
Затем Код:
__________________
Блог |
||||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |