|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 62
|
Доброго времени суток!
Вот написал программку, суть которой скопировать объект на рассчитанное предварительно расстояние и после скопированному объекту надо сделать stretch с каждой стороны. делаю выделение, а он его (этот объект не видит). Код:
Видимо "свежескопированный" объект не видим для stretch. помогите, как сделать чтобы заработала прога |
|||
|
||||
КИП, АСУ ТП, слаботочка Регистрация: 02.09.2010
Москва-Тюмень
Сообщений: 422
|
Кулик Алексей aka kpblc,
Алексей, БРАВО :-) Сразу видно мастера ЛИСПа. А то я тут через Камчатку в Москву всю видимо пытаюсь ехать А можешь код модифицировать так, чтобы после указания количества столбцов пользователь уже выбрал точку вставки? Только объясни мне, пожалуйста, какой кусок кода отвечает за прорисовку временной линии от первой точки до точки вставки перечня кабелей? Кстати, я не увидел в коде локальной переменной gr... Добавлено: Я понял, Алексей, как теперь сделать Благодарю за просвещение :-) А то я что-то плохо очень знал возможности getpoint. Зато полез в дебри grread В общем вывод - изучать возможности основных функций АвтоЛиспа. Последний раз редактировалось Frigate, 19.11.2010 в 06:27. |
|||
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Наверное объект тоже создан командными методами (с помощью функций command или vl-cmdf). Предыдущая команда выполнена, а новый примитив не добавлен в БД чертежа (на подходе). Autolisp не проверяет завершение процесса и приступает к следующей команде stretch. Чтобы задуманная последовательность действий сохранялась, командные программисты между командами обычно вставляют "костыль" - запрос, который должен надолго озадачить пользователя, например (getstring "\nТы абсолютно уверен, что хочешь обрезать объект? ") В этом - минус командных методов. Полноценное решение задачи - с помощью технологии ActiveX.
Последний раз редактировалось Li6-D, 19.11.2010 в 19:00. |
|||
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 62
|
to Li6-D
да. да. именно так и происходит. я получаю этот объект посредством копирования пред идущего. Подскажи, а как это реализовать через ActiveX ? задача в общем-то такая: нужно выбранный объект скопировать, перетащить в другой слой и сделать уже перетащенному stretch с двух сторон на заданное расстояние. А потом тоже самое сделать с полученным после трима объектом. Спасибо! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846
|
Frigate, просто можно повторно запросить точку в случае выбора "Количество столбцов", это не сложно. Я-то полной задачи не знаю, потому такой код и нарисовал.
Michael!, я не очень понял. Есть исходный объект: (setq ent (car (entsel))) Потом он копируется: (command "_.copy" ent "" pause pause) А потом к нему выполняется _.stretch: (command "_.stretch" (entlast) <...>) Так? Можно вариант переделать (пишу без проверок): Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 62
|
to Кулик Алексей aka kpblc
А поясните пожалуйста строки вашего кода. entsel, я не пользовал ни разу. задумка у меня такая: Код:
|
|||
|
||||
Регистрация: 03.05.2009
Сообщений: 112
|
Michael!,
Много буков, а леса не видно. Опять фрактальные построения что ли? Наведу критику: 1) Не объявлены локальные переменные (хотя сойдет для отладки). Создана команда, а не функция. Если она не вызывается юзером, а используется другой функцией, то незачем ее делать командой. 2) Почитай про функцию setvar. 3) Зачем строковое представление точек? Точки-списки нормально воспринимаются в command-функции. 4) Если нужно получить точку, смещенную на определенный вектор относительно исходной можно написать: (setq Pt1 (mapcar '+ Pt0 '(-2 2 0))), где '(-2 2 0) - вектор смещения. Если есть две точки Pt0, Pt и надо найти точку Pt1 на отрезке их соединяющем и делящую этот отрезок в заданной пропорции. Варианты решения: (setq Pt1 (polar Pt0 (angle Pt0 Pt) (/ (distance Pt0 Pt) 3))) (setq Pt1 (mapcar '(lambda (x y) (/ (+ x x y) 3)) Pt0 Pt)) 5) Ни одного примитива код не создает, какого рода объекты копируются? Если примитивы простые, то может их проще создавать entmake, а не копировать. 6) Пиши так: (command "_.stretch" "_Crossing"... ) - у многих стоит локализованная версия. |
|||
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 62
|
согласен.
1. они будут объявлены позже. пока она вызывается именно так. поэтому я и написал что С: 2. почитаю 3. так понятнее для меня было - исправлю. 4. не знал что так можно/нужно делать 5. копируются полилинии замкнутые 6. тут я для себя пишу. на моем компе и так работает. так всетаки, как сделать смену слоя и stretch для полученного объекта? |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846
|
Michael!, я так и не понял конечного смысла использования _.stretch (кстати, код не будет работать в русской версии). Что, надо переместить объект вправо-влево? Приложи dwg-файл, с которым работаешь. Точнее, интересны объекты, над которыми выполняются настолько непонятные операции.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 62
|
to Кулик Алексей aka kpblc
вот приложил файлик-пример. Объекты - это полилинии. Невсегда симметричные, разных размеров. Это контуры объектов. Работаю я в 2004 autocad английской версии. Поэтому работоспособность для русских версий я не рассматриваю. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846
|
В качестве первого прикидочного варианта:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 62
|
to Кулик Алексей aka kpblc
спасибо огромное! А можно с пояснениями чуть чуть. Хочу разобраться всетаки что к чему. Не понял как она делает уменьшение. Уменьшение происходит только с одной стороны. хотелось бы уменьшать на одинаковое расстояние с двух сторон. причем stretch делать с 1/3 длины объекта Последний раз редактировалось Michael!, 21.11.2010 в 00:00. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846
|
А "треть длины" - это по какому направлению считать?
Offtop: Код сделан был только для того случая, который был представлен.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,846
|
А как изменять верхнюю часть?
Вообще-то я бы, наверное, сделал просто блок и его вставлял с разными масштабами по разным осям. Может, неэтично, зато дешево, надежно и практично --- Добавлено:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 21.11.2010 в 23:18. |
|||
|
||||
инженер Регистрация: 29.01.2009
Тамбов
Сообщений: 62
|
круто! спасибо за разъяснения.
на счет вставки блока с разными масштабами по осям - интересная мысль. а как копировать и вставлять блок. ведь после вставки вновь появившийся объект опять не будет виден программе. потом, не хотелось бы трогать 2/3 середины, а уменьшать только по 1/3 с краев фигур. (кстати, формы бывают абсолютно разные. Не обязательно это многоугольник. это может быть совокупность дуг и отрезков. пробовал свой код с "костылем" по методу Li6-D - не помогает. Всеравно после него объект не виден. |
|||
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381
|
Цитата:
Надо делать простейшую функцию рисования трапеции полилинией по заданным аргументам, которая еще тысячу раз пригодится. Вот примеры: Код:
Код:
|
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |