Ищу программу(надстройку) под AutoCAD, которая облегчает создание разрывов |
|
|
|
19.6.2007, 16:24
|
Инженер ОВК
Группа: Участники Форума2
Сообщений: 987
Регистрация: 2.6.2005
Из: Санкт-Петербург
Пользователь №: 835

|
Ищу программу, которая позволяет делать следующее: - Нажимаешь на линию относительно которой делаешь разрыв.
- Нажимаешь на линию, которая будет разрываться.
- Получаешь результат.
Длина разрыва задается в настройках. P.S. Соответственно должна быть бесплатной.
Сообщение отредактировал -BuTeK- - 19.6.2007, 16:25
|
|
|
|
|
19.6.2007, 17:26
|
проектировщик ТМ (фриланс)
Группа: Участники форума
Сообщений: 4032
Регистрация: 13.3.2005
Из: Череповец - СПБ - Воронеж - Геленджик
Пользователь №: 543

|
по количеству кликов стандартная команда разрыв по двум точкам... зачем программа?
|
|
|
|
Гость_OVKT_*
|
19.6.2007, 21:10
|
Guest Forum

|
А я делаю совсем просто, причём качественно, быстро, удобно как на автомате: Допустим, есть куча пересечений линий и на них нужно сделать "разрывы", условно показать, что это один трубопровод над/под другим трубопроводом. Очень просто: команда "круг и радиус", ставим 1 в точку пересечения, а следующие повторяют предыдущий радиус. Так наклепать во всех точках. Затем команда "разрыв" типа TRIM: обводим все кружочки как резаки (просто обводим окошком), соглашаемся, и щёлк-щёлк по местам внутри кружочков, быстренько все разрывы готовы. Причём все под одну гребёнку равного диаметра, чётко по центру. Резаки кружочки стираем.
Примерно также ставятся разрывы с подписями типа Т1, Т2. Внутри заготовленного кружочка ставим текст Т1, текст с ручкой MIDDLE выставляем строго по центру кружка. И так же: наставили по нужным местам, внутри круга вырезали, лишнее стёрли.
Попробуйте! Мульт снять???
|
|
|
|
|
19.6.2007, 21:58
|
выпускник ТГВ г.Саратов, теперь в Москве
Группа: Участники форума
Сообщений: 2645
Регистрация: 5.5.2006
Из: Саратов-Москва
Пользователь №: 2819

|
если BuTeK говорит что такая прога есть то нафига вот эта вся суета нужна . Просто прогу найти надо . Линии Т1 , Т2 и тд любые линии с текстом надо сделать именно линиями такими, ну как есть линия зигзагообразная также и это . Правда это никто не делает  И смежникам придётся потом эти типы линий пересылать .
|
|
|
|
Гость_OVKT_*
|
19.6.2007, 22:14
|
Guest Forum

|
А я ужо мульт снял, всё показано как по-писанному, быстро и красиво!
Прикрепленные файлы
REZAK.rar ( 308,6 килобайт )
Кол-во скачиваний: 217
|
|
|
|
|
19.6.2007, 22:52
|
Инженер ОВК
Группа: Участники Форума2
Сообщений: 987
Регистрация: 2.6.2005
Из: Санкт-Петербург
Пользователь №: 835

|
Цитата по количеству кликов стандартная команда разрыв по двум точкам... зачем программа? Не ровно получается и иногда прязка "пересечение" срабатывает и линия обрывается на месте перечечения и приходится вручную отодвигать. Цитата Очень просто: команда "круг и радиус", ставим 1 в точку пересечения, а следующие повторяют предыдущий радиус. Так наклепать во всех точках. Затем команда "разрыв" типа TRIM: обводим все кружочки как резаки (просто обводим окошком), соглашаемся, и щёлк-щёлк по местам внутри кружочков, быстренько все разрывы готовы. Причём все под одну гребёнку равного диаметра, чётко по центру. Резаки кружочки стираем. Слишком долго по-моему. Я то хочу все за два клика. Потом надо кружки стирать, их конечно можно в defpoints положить... Цитата если BuTeK говорит что такая прога есть то нафига вот эта вся суета нужна . Просто прогу найти надо . Кто сказал, что она есть  ? Я просто сказал, что ищу. Цитата А я ужо мульт снял, всё показано как по-писанному, быстро и красиво! Лучше б программу по-быстренькому написал.
|
|
|
|
|
19.6.2007, 23:43
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ээээ... А зачем программу, если все решается стандартным блоком? Создается wieout (команда _wipeout) по прямоугольнику, например, от (-1 -1) до (1, 1). Добавляется отрезок (к примеру, вертикально от 0,-1 до 0,1). wipeout'у и отрезку назначаются слой "0", тип, вес и цвет линии - ПоБлоку. Отключаются границы у wipeout'a. Соединяется в блок. Вставлять куда хочется с любыми масштабами по любым осям. Годится?
|
|
|
|
|
20.6.2007, 0:56
|
Инженер ОВК
Группа: Участники Форума2
Сообщений: 987
Регистрация: 2.6.2005
Из: Санкт-Петербург
Пользователь №: 835

|
Цитата(kpblc @ 20.6.2007, 0:43)  Ээээ... А зачем программу, если все решается стандартным блоком? Создается wieout (команда _wipeout) по прямоугольнику, например, от (-1 -1) до (1, 1). Добавляется отрезок (к примеру, вертикально от 0,-1 до 0,1). wipeout'у и отрезку назначаются слой "0", тип, вес и цвет линии - ПоБлоку. Отключаются границы у wipeout'a. Соединяется в блок. Вставлять куда хочется с любыми масштабами по любым осям. Годится? Нет не подходит. Линии могут проходить под разными углами друг от друга. Линии, могут быть разной толщины. Для этого надо создать кучу блоков. Скажите, можно ли самому написать такой макрос или приложение под AutoCAD или может есть такое уже в составе других приложений?
|
|
|
|
|
20.6.2007, 1:14
|
Инженер ОВК
Группа: Участники Форума2
Сообщений: 987
Регистрация: 2.6.2005
Из: Санкт-Петербург
Пользователь №: 835

|
Единственная программа, которую нашел на просторах интерента - Break Den. Но она ничего не автоматизирует, а просто вставляет на указанные места обозначения разрывов и стирает линию, между ними.
|
|
|
|
Гость_OVKT_*
|
20.6.2007, 6:40
|
Guest Forum

|
Нужна именно программа? Этож совсем просто: автоматизируйте запрограммируйте мой способ, чтобы кружочки сами стирались бы.
|
|
|
|
|
20.6.2007, 9:10
|
Инженер ОВК
Группа: Участники Форума2
Сообщений: 987
Регистрация: 2.6.2005
Из: Санкт-Петербург
Пользователь №: 835

|
Цитата(OVKT @ 20.6.2007, 7:40)  Нужна именно программа? Этож совсем просто: автоматизируйте запрограммируйте мой способ, чтобы кружочки сами стирались бы. Мне не принципиально как это будет организовано. Главное, чтоб эту функцию можно было повесить на кнопку и дать ей горячую клавишу. Может подскажите как это организовать?
|
|
|
|
Гость_OVKT_*
|
20.6.2007, 10:43
|
Guest Forum

|
Программировать под Акад я не умею, умею тока мульты снимать, а в Worde пишу самодельные макросы, но это не по теме... В Акаде кажется есть возможность писать "скрипты", последовательность команд как бы они вводились вручную. Обратитесь к kpblc, думаю, если он автоматизирует мой способ, это будет достаточный прогресс... Кроме того, поищите на форуме www.autocad.ru там есть "готовые программы", правда я там ничего для ОВВКЭМ не нашёл... Вобщем, автоматизируйте мой способ! Только диаметры режущих кружочков придётся вводить хотя бы 1 раз. Я брал диаметр 100, а иногда нужно 80, 150, программа должна в начале спрашивать диаметр. Разрывы с текстом внутри также можно будет сделать как в мульте. Тогда и я стану применять программу если kpblc напишет...
|
|
|
|
|
21.6.2007, 22:58
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Вот вам сырая программа для разрывки примитивов по вашему алгоритму. Правда длина разрыва не сохраняется, а каждый раз запрашивается. Команда SCTRIM Выбрать обект который не будет обрываться Далее в цикле выбирать пересекающие объекты и указывать длину равную диаметру воображаемой окружности с центом в точке пересечения. объект будет обрезаться по кромке воображаемой окружности. Примечания: Объекты могут быть любыми (не проверял на блоках и внешних ссылках) Извилистые полилинии сплайны итп, которые пересекают сами себя, нельзя указывать два раза, как относительный и обрезаемый и возможно нельзя указывать их вообще. Любой примитив должен пересекать другой только в одной точке. Иепересекающиеся объекты будут выдавать ошибку. Если обрезаемый объект не пересекает воображаемую окружность будет ошибка, он также должен пересекать окружность хотябы в одной точке. Количество точек пересечения обрезаемого объекта с воображаемой окружностью неограничено, будет все удалено внутри окружности. Команда UNDO превратит воображаемые окружности в реальные, поэтому будьте внимательны, следитечтобы не осталось чего лишнего. В дальнейшем программа будет усовершенствована, будут сняты ограничения на количество точек пересечения, обрываться объект будет визуально, и возможно будет можно обрывать примитивы пересекающие сами себя.
Прикрепленные файлы
rvat.rar ( 1,3 килобайт )
Кол-во скачиваний: 105
|
|
|
|
|
21.6.2007, 23:06
|
выпускник ТГВ г.Саратов, теперь в Москве
Группа: Участники форума
Сообщений: 2645
Регистрация: 5.5.2006
Из: Саратов-Москва
Пользователь №: 2819

|
для чайников - как загрузить это в АКАД ? поподробнее по слогам пожалуйста
|
|
|
|
|
21.6.2007, 23:50
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
dwg.ru/art/8
|
|
|
|
|
22.6.2007, 0:02
|
Инженер ГС
Группа: Участники форума
Сообщений: 164
Регистрация: 1.3.2006
Из: СПб
Пользователь №: 2257

|
Цитата(AAANTOXA @ 22.6.2007, 0:06)  для чайников - как загрузить это в АКАД ? поподробнее по слогам пожалуйста  1) скопировал, разархивировал (у тебя получится файл rvat.fas) далее, если хочешь просто попробывать запустить/потестить то открыть автокад, выбрать Tools/Load Application ... появится диалоговое окно в нем выберешь файл rvat.fas и нажмешь кнопку Load, затем кнопку Close. Так файл загрузится в ACAD. После этого в командной строке автокада набери sctrim и будет тебе счастье. to mmax жаль что выложил откомпелированный уже файл, хотелось бы посмотреть код. Можно создать функцию, которая будет запрашивать у пользователя диаметр режущей окружности и сохранять его в глобальной переменной. А в основной функции сделать проверку, что если переменная диаметра nil => запуск этой функции Setup.
|
|
|
|
|
22.6.2007, 0:55
|
выпускник ТГВ г.Саратов, теперь в Москве
Группа: Участники форума
Сообщений: 2645
Регистрация: 5.5.2006
Из: Саратов-Москва
Пользователь №: 2819

|
спасибо за разъяснения что сразу хочется дополнить: чтобы запоминался размер обрезки чтобы можно было выбрать несколько обьектов сразу которые обрежутся и один который останется целым - удобно в плане когда одна "труба" идёт выше многих других
|
|
|
|
|
22.6.2007, 7:20
|
Группа: Участники форума
Сообщений: 305
Регистрация: 6.12.2005
Из: Тюмень
Пользователь №: 1647

|
Цитата(OVKT @ 20.6.2007, 10:43)  Программировать под Акад я не умею, умею тока мульты снимать, Разрывы с текстом внутри также можно будет сделать как в мульте. Как минимум вам нужно разобраться с функцией "Быстрый выбор", вместо прощелкивания по каждому кружочку кружочки можено выделить одним путем. Ну и с линими тоже нужно создавать тип линии. А я вот мультики снимать не умею так бы все бы вам показал как ваши операции сделать быстрее
|
|
|
|
|
22.6.2007, 7:57
|
Группа: Участники форума
Сообщений: 234
Регистрация: 22.3.2007
Из: Губернский Город N
Пользователь №: 6722

|
Если закрываешь окно с Акадом (версия 2007 рус.-лицензионная), то данная команда "слетает". Необходимо каждый раз при запуске Акада по новой подгружать файл rvat.fas для того, чтобы активировать команду??? Как бы так сделать, чтобы он "остался в памяти" проги???
|
|
|
|
|
22.6.2007, 8:10
|
Инженер ГС
Группа: Участники форума
Сообщений: 164
Регистрация: 1.3.2006
Из: СПб
Пользователь №: 2257

|
Цитата(putnik82 @ 22.6.2007, 8:57)  Если закрываешь окно с Акадом (версия 2007 рус.-лицензионная), то данная команда "слетает". Необходимо каждый раз при запуске Акада по новой подгружать файл rvat.fas для того, чтобы активировать команду??? Как бы так сделать, чтобы он "остался в памяти" проги??? один из вариантов: создай кнопку в ней пропиши действие типа Цитата(код) ^C^C(if (eq c:sctrim nil) (load "rvat.fas"));sctrim правда файл rvat.fas должен находится по прописанным путям в ACADE P.S. или можно в Tools/Load Application ... откроется диалог. окно Load/Upload Aplication там справа нажать кнопку Contents ... откроется другое окно, там выбрать файл rvat.fas
Сообщение отредактировал vic153 - 22.6.2007, 8:15
|
|
|
|
|
22.6.2007, 8:13
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Еще один вариант: С ком.строки _appload В окне жамкнуть на потрфеле, там кнопку [добавить] ([Add]), указать этот fas. Теперь он будет автоматически загружаться во все профили, во все сессии и во все документы этого autocad'a
|
|
|
|
|
22.6.2007, 8:21
|
Группа: Участники форума
Сообщений: 234
Регистрация: 22.3.2007
Из: Губернский Город N
Пользователь №: 6722

|
Благодарствую!!! Все заработало!
|
|
|
|
|
22.6.2007, 11:23
|
Инженер ОВК
Группа: Участники Форума2
Сообщений: 987
Регистрация: 2.6.2005
Из: Санкт-Петербург
Пользователь №: 835

|
Цитата(mmax @ 21.6.2007, 23:58)  Вот вам сырая программа для разрывки примитивов по вашему алгоритму. Правда длина разрыва не сохраняется, а каждый раз запрашивается.
Команда SCTRIM Выбрать обект который не будет обрываться Далее в цикле выбирать пересекающие объекты и указывать длину равную диаметру воображаемой окружности с центом в точке пересечения. объект будет обрезаться по кромке воображаемой окружности.
Примечания: Объекты могут быть любыми (не проверял на блоках и внешних ссылках) Извилистые полилинии сплайны итп, которые пересекают сами себя, нельзя указывать два раза, как относительный и обрезаемый и возможно нельзя указывать их вообще. Любой примитив должен пересекать другой только в одной точке. Иепересекающиеся объекты будут выдавать ошибку. Если обрезаемый объект не пересекает воображаемую окружность будет ошибка, он также должен пересекать окружность хотябы в одной точке. Количество точек пересечения обрезаемого объекта с воображаемой окружностью неограничено, будет все удалено внутри окружности. Команда UNDO превратит воображаемые окружности в реальные, поэтому будьте внимательны, следитечтобы не осталось чего лишнего.
В дальнейшем программа будет усовершенствована, будут сняты ограничения на количество точек пересечения, обрываться объект будет визуально, и возможно будет можно обрывать примитивы пересекающие сами себя. Это классно. Практически то, что искал. Предлагаю добавить следующее. 1. Запускаем команду. 2. В ней есть меню, которое позволяет изменять радиус окружности. Это значение не нужно каждый раз вводить, оно запоминается, и его даже не надо подтверждать. 3. Необходим выбор нескольких линий, а то с одной это долго. Или такое не часто бывает? Извиняюсь если где-то сказал и непонятно или сморозил глупость. Еще раз спасибо mmax. P.S. Да и еще идея. А нельзя, чтоб все линии, которые выбраны, но не доходят до центра окружности также обрезались?
Сообщение отредактировал -BuTeK- - 22.6.2007, 11:25
|
|
|
|
|
22.6.2007, 12:46
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Забыл напомнить тем у кого автокад 2005 и -. Вам надо ввести в командной строке (vl-load-com);со кобками или создать файл LSP в котором будет такая строчка. Тем у кого не получается подгрузить файл. Создайте текстовый файл acaddoc.lsp и напишите в нем для акад<2006 (vl-load-com) и для всех автокадов: (load "filePath\\file.fas") можно lsp и vlx. Если у вас есть коллекция файлов то написать такое для каждого файла. В имени и пути файла косых черточек должно быть по две например "C:\\folder1\\folder2\\file.lsp" Пришел я к выводу что случай сильно частный. Надо сделать более универсально. Напрмиер: Выбираем только один объект. А далее указываем точку на этом объекте, радиус окружности, и объект будет разорван внутри окружности. это будет намного прощще. Еще в таких случаях надо пририсовывать дугу. Надо? Теперь вопрос будет к kpblcу: Как сделать так чтобы у объекта НЕвключались ручки, а тольпо подсветка пунктиром. Функция просто (ssget) делает как надо но предпологает многократный выбор объектов и требует ENTER. Вданной ситуации надо выбрать только один объект. Если использовать  (блин опция для ssget является смайлом _:S) то объект неподсвечивается. И как запретить функции (ssget) использовать предварительно выбраные объекты до запуска команды.
Сообщение отредактировал mmax - 22.6.2007, 12:48
|
|
|
|
|
22.6.2007, 13:07
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
А как у тебя объект указан? Если он у тебя в vla-представлении, то можно сделать (vla-highlight ent :vlax-true), только потом поставить (vla-highlight ent :vlax-false) надо не забыть. Если объект - набор (ssget), то (sssetfirst ent nil) - по-моему, так. Насчет исключения предварительного выбора. Есть вариант предварительно послать (sssetfirst nil nil),- но я этого никогда не делал; есть вариант (если функция вызывается из меню) в макросе прописывать ^C^C; ну или придется идти через activex-selectionset. Пример можно посмотреть на http://dwg.ru/forum/viewtopic.php?t=14076 , мы там с Alaspher'ом как раз сегодня обсуждали это дело и некоторые тонкости, с ним связанные. Просто я не очень люблю activex-наборы, вечно с ними головняк. P.S. (vl-load-com) на 2005 надо загружать принудительно только если не установлен ServicePack (насчет 2004 не скажу, а вот в 2002 точно надо выполнять эту строку). Также эта строка необходима, если работа ведется в т.н. DeveloperEdition-версии. P.P.S. Можно использовать слеши "обратной ориентации": "/". Их не надо дублировать. Если надо сразу грузить много файлов, я бы рекомендовал пошерстить на autocad.ru в разделе Готовые программы. --- Блин, жалко, что у меня не получилась моя идея с wipeout (полностью программое создание) - было бы красиво. Наверное. Хотя... сейчас попробую, вдруг получится
|
|
|
|
|
22.6.2007, 19:54
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Мою предыдущую программу фтопку вот ее код Код (defun C:SCtrim ( / *error* oldecho notrim ss yestrim znachenie_samocad zaprosznachenie_samocad varsectpoint sectpoint ename-circle vla-circle) (setq oldecho (getvar "cmdecho"))
(defun *error* (msg) (setvar "cmdecho" oldecho) (setq ss nil) (command) (princ) )
(while (null (setq notrim (car (entsel "\nВыберите объект который не будет обрезаться : ")))))
(setq ss (ssadd notrim))
(while t (progn (sssetfirst nil ss)
(while (null (setq yestrim (car (entsel "\nВыберите объект который БУДЕТ обрезаться : ")))))
(ssadd yestrim ss) (sssetfirst nil ss)
(if (null(numberp znachenie_samocad)) (setq znachenie_samocad 1))
(setq zaprosznachenie_samocad (getdist (strcat "\nСкоко резать? <" (vl-prin1-to-string znachenie_samocad) "> : ")))
(if (null zaprosznachenie_samocad) (princ) (setq znachenie_samocad zaprosznachenie_samocad)) ;;;(setq znachenie_samocad nil)
(setq varsectpoint (vla-intersectwith (vlax-ename->vla-object notrim) (vlax-ename->vla-object yestrim) 0))
(setq sectpoint (vlax-safearray->list (vlax-variant-value varsectpoint)))
(setvar "cmdecho" 0) (command "_.circle" sectpoint znachenie_samocad) (setq ename-circle (entlast)) (setq vla-circle (vlax-ename->vla-object ename-circle))
(command "_.trim") (command ename-circle) (command "") (command (list yestrim sectpoint)) (command) (setvar "cmdecho" oldecho)
(vla-delete vla-circle) (vlax-release-object vla-circle) (ssdel yestrim ss) )) (command) (princ) ) Новая программа: ================================================================ Выбирается только 1 объект который надо порезать. базовую точку легко найти по привязкам. Команда sctrim там все просто и понятно объекты любые кроме составных и ссылок Точку можно указывать НЕ на объекте, несмотря на запрос команды. Чтоб все линии, которые выбраны, но не доходят до центра окружности также обрезались[-BuTeK-]. Если окружность в итоге не будет пересекать объект, то за результат не ручаюсь. по умолчанию предлагаемый радиус предлагается равным радиусу последней нарисованной окружности, зависит от системной переменной CIRCLERAD. Тоесть если вы гдето самостоятельно нарисовали Circle, то программа будет предлагать ее радиус. Следите за значениями в сообщениях заключенные в <x.x >Если радиус окружности в циклической обработке примитивов менять не надо, то просто жмите ентер. ================================================================= Команда qsctrim делаем командную строку пошире чтобы видеть подсказку. Радиус не запрашивает, он сохраняется в глобальной LISP-переменной SCTRIMCIRC-SAMOCAD(не путать с системными), значение которой можно поменять командой CIRCLESAMOCAD Также этой переменной присваивается последнее значение радиуса использованое в команде sctrim. ================================================================= К сожалению ничего не могу придумать для команды UNDO, будьте внимательны, при откатах рисуется воображаемая окружность. Мелкие можно не заметить и они пойдут в печать. Выполняйте команды порезки на слоях запрещенных к печати тк вспомогательные примитивы рисуются на текущих слоях. Не выполняйте программу на отключенных, заблокированых, замороженных слоях. ================================================================= (vl-load-com) не прописана ================================================================= Если при использовании программы вдруг пропали буквы в командной строке скопируйте в нее команду (setvar "nomutt" 0) и сообщите мне при каких обстоятельствах она пропадает. Те кто использует динамическую строку, и вдруг заметил, что она стала меньше болтать (setvar "dynprompt" 1).Также сообщайте о всех других глюках. Предполагаются глюки на несоответствие сохраненных значений радиусов. ================================================================= В архиве два файла. 2005 работает в любых версиях. 2006 в предыдущих работать не будет. При использовании 2005 в версииях 2006+ в динамической командной строке может выводиться неточная информация. при использовании 2006 в версиях 200 6 7 вывод сообщений в динамическую строку временно отключается. Про автокад 2008 ничего сказать не могу, но думаю что все будет нормально. ================================================================= планируется добавить отдельную команду для порезки примитивов пересекающих самих себя. >> kpblchighlight рулит. На ssget решил не заморачиваться. Если надо выбрать только 1 объект то помогает только Код (while (null (setq ent (car (entsel))))) но такой способ не дает выйти Ентером, а если НЕ зациклить то при промахе выдает nil получается, что нельзя промахиваться. Нет тут золотой середины как в get-функциях. sssetfirst включает ручки-прямоугольники, погано получается. Не помню как в предыдущих версиях, в 2007 линии становятся просто пунктирными без ручек. Еще вопрос остается открытым: Код (defun c:cmd () (lisp 1) (lisp 2) (lisp 3) ) В программе создаются временные опорные примитивы, которые удаляются после использования. И эти заразы восстанавливаются командой UNDO. причем независимо от того каким способом рисовались (command entmake vla-add). Как сделать так чтобы Undo отменяла действие всей пользовательской команды c:cmd? А то она их отменяет по отдельным выражениям внутри функции (с:cmd). Код (defun c:cmd () (while t (lisp 1) (lisp 2) (lisp 3) ) ) В такой ситуации будет отменять выполненные циклы, а иногда еще и поотдельности действия внутри циклов. vlax-release-object не помогает Получается ситуация: пользователь порезал примитивы и решил парочку последних отменить. Жмет стрелку "назад", а там бах, какаято окружность появилась, которую он даже мельком не видел, потом внутри окружности стало все зарастать порезанными лниями, и только при третьем нажатии окружность изчезла. попробую vlax-add-cmd помучать может поможет.
Сообщение отредактировал mmax - 22.6.2007, 19:55
|
|
|
|
|
22.6.2007, 23:34
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Значится так  Для замены (entget) можешь посмотреть на http://www.arcada.com.ua/forum/viewtopic.php?t=884 и на Код (defun loc:entsel (msg / ent) (if (or (not msg) (= msg "")) (setq msg "\nУкажите объект : ") (setq msg (strcat "\n" (vl-string-trim " :\n" msg) " : ")) );_ end of if (setvar "errno" 0) (while (and (not (setq ent (entsel msg))) (= (getvar "errno") 7) );_ end of and (setvar "errno" 0) (princ "\nПромашка вышла, однако. Хочется остановиться - жмем Esc") );_ end of while (list (car ent) (trans (cadr ent) 1 0)) );_ end of defun Выход только по Esc. Чтобы пользователи не мучались с системными переменными, посмотри http://www.arcada.com.ua/forum/viewtopic.php?t=445 - я там обработчик ошибок нарисовал, ну еще плюс обсуждение. Может, окажется небесполезным. P.S. Новый вариант я посмотреть не могу (дизассеблирование fas-файлов весьма неблагодарное занятие). P.P.S. Лично мне очень не нравится командный метод _trim или _break - если на обрабатываемом примитиве были записаны расширенные или словарные данные, то они на новый примитив не копируются. Кроме того, новый примитив тоже надо обрабатывать на предмет пересечения с объектом, который "наверху". В общем, головняка прилично.
Сообщение отредактировал kpblc - 23.6.2007, 0:34
|
|
|
|
|
23.6.2007, 23:53
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Ну и по многочисленным просьбам релиз программы с секущей линией. Команда TRUBOREZ Освоится легко. Режет все пересекающие секущую линию объекты. Если секущую линию пересекают примитивы типа полилиний и сплайнов сразу в нескольких точках, то при выборе обрезаемого объекта старайтесь выбирать объект в точке наиболее близкой к точке пересечения у которой нужно разорвать. Смотрите примеры во вложенном DWG. Если объект пересекает секущую в одной точке, то выбирать можно где угодно. Радиус обрезки сохраняется, его можно менять при очередном выборе обрезаемого объекта не выходя из программы. Загружать надо оба файла. Для любых версий. Жду отзывов и предложений. Архив обновлен 24.06.07 22:00 иправлена незначительная ошибка.
Сообщение отредактировал mmax - 24.6.2007, 20:51
Прикрепленные файлы
truba.rar ( 25,57 килобайт )
Кол-во скачиваний: 104
|
|
|
|
|
24.6.2007, 20:36
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
На рисунке красными кругами и зелеными линиями обозначены линии резки. По настоящему они не существуют это воображаемые линии. Команда TRUBOREZ режет объекты как показано на рисунке красными кругами. Неперпендикулярные линии режутся както неправильно. Может всетаки надо сделать так чтобы резалось зелеными? Так трубы «в три линии» будет легче резать. Вот только по какому принципу резать синюю линию тк она даже не касается второй режущей линии и будет усечена до наружной зеленой. Если прямолинейные еще можно както продлить, а с криволинейными будет не так просто. В данной ситуации ее просто негде резать.
Прикрепленные файлы
1.jpg ( 33,24 килобайт )
Кол-во скачиваний: 53
|
|
|
|
|
24.6.2007, 22:20
|
выпускник ТГВ г.Саратов, теперь в Москве
Группа: Участники форума
Сообщений: 2645
Регистрация: 5.5.2006
Из: Саратов-Москва
Пользователь №: 2819

|
вывод - изначальный принцип неверен может возможно создать прогу где вместо красных кружочков будут строиться зёлёные линии и они будут границами обрезки. линии строить командой "ПОДОБИЕ", также задавать величину подобия....
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
ООО "Русич" ИНН 9721068883 / ЕРИД 2VtzqvMjLF8
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqxXgvJi
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqwyM2dc
Последние сообщения Форума
|