| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
16.02.2010, 15:18 | #1 | |
LISP для offset
Регистрация: 25.06.2009
Сообщений: 147
|
||
Просмотров: 9523
|
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Слушай, твой макрос не дает никакого выигрыша по сравнению со стандартной командой "_offset" ("подобие"). Как и в команде, тебе надо указать расстояние, выбрать объект и указать направление, куда делать подобие. Может, ты думал, что сможешь сделать подобие сразу для нескольких объектов? Фигу.
|
|||
|
||||
Регистрация: 25.12.2005
Москва
Сообщений: 13,627
|
Команда: _select
Выберите объекты: найдено: 1 Выберите объекты: найдено: 1, всего: 2 Выберите объекты: Команда: Команда: Команда: _offset Величина смещения или [Точка] <13.1047>: Выберите объект для создания подобных или <выход>: _P *Неверный выбор* Требуется один объект. Выберите объект для создания подобных или <выход>: |
|||
|
||||
Регистрация: 25.06.2009
Сообщений: 147
|
на данный момент достиг сего (экспериментально), в 2-х макросах, но работает:
^C^C(setq sel1 (ssget))(setq we1 (getdist))(setq poi1 (getpoint)) ^C^C(command "_offset" we1 sel1 poi1);^C(command "_offset" (+ 1 we1) sel1 poi1) Хочу зделать так, чтобы в итоге лисп запоминал N количество длин и 1ой кнопкой (лисп или макрос) отбивал контуры разных объектов с этим N длинами... например: я в ручную указал длину (мишкой) 2 и 5, потом указал круг и оно отбило круг с +2 и +5 потом указал прямоугольник, квадрат и т.п. тоисть штоб лисп: 1. Запоминал "набор" (определённое количество длинн, указаных мишкой) 2. Запоминал сторону если ето возможно, если нет, тогда штоб 1-н раз указывать сторону, для каждого объекта при использовании готового "набора" длин. 3. Автоматически отбивал весь "набор" длин для указанного объекта. Прозьба к програмистам LISP, помоч в создании сего лиспа. я язык лисп по книжке щас пробую, но опыта у меня 0... Последний раз редактировалось Positron, 16.02.2010 в 18:24. Причина: Внёс конструктивность в цель лиспа, после слов "тоисть штоб лисп:" и прозьбу к програмистам 17:24 |
|||
|
||||
Регистрация: 25.06.2009
Сообщений: 147
|
Пример(во вложении) -
У нас есть: "начальная" линия,от неё отходят линии с отступами 3, 8, 9 1. Надо мишкой отбить растояние (например мы незнаем што они отступают 3, 8, 9), лисп запоминает каждую длинну "набор" длин. 2. Указываем стонорону (например + и - ставить, - лево, +право от линии) 3. Выбераем контур (Красной линиией обозначен) 4. Лисп спрашывает сторону (типа + или -), выбераем например -, дальше лисп отбивает готовый "набор" длин. |
|||
|
||||
Регистрация: 25.06.2009
Сообщений: 147
|
Цитата:
А возможно ли, чтобы "набор" длин можно было записывать в базу, типа название - "набор длин" Напимер в такой последовательности: 1. Лисп спрашует - Добавить в базу контуры или извлеч а)добавить - тоисть "Тут выбирем линию офсета потом её офсеты", после лисп спрашивает "Введите имя", вводим имя.(по умолчанию стоит "извлеч") (если имя существует, лисп об етом уведомляет и просит поменять имя т.как ...) б)извлеч - лисп выдаёт меню с названиями "наборами" длин, выбераем длину из списка. (но по умолчанию после выбора извлеч уже выбрано предедущее название, если в етом чертеже небыло выбрано тогда спрашивает название из имеющегося списка, если таковой есть) 2.Либа извлечённый, либо только что добавленный "набор" длин используем как и ранёе - "потом полилинию которую офсетим и точку куда офсетим." И конечно чтоб база сохранялась при открытии в новом чертеже. Последний раз редактировалось Positron, 17.02.2010 в 12:47. Причина: Разукрасил текст(11:38), добавил по умолчанию после "извлеч"(11:47) |
|||
|
||||
Регистрация: 25.06.2009
Сообщений: 147
|
Частокол зделал, потому что иначе неполучалось, лисп отступы неправильно давал... он, берёт растаяние крайних точок, как я понял.
Это отступы для направления(траетория) движения фрез ЧПУ... их много изза фрезы, так как криволинейный профиль невозможно зделать идеально на обычном фрейзерном станке. (Это профиль штапика из дуба) В старину делали резчики, а щас ЧПУ существенно помогает. Штапики бывают разных форм, поетому универсальный лисп очень бы помог, просто бывают и намного больше этих линий, в ручную это отнимает уйму времени... Проверил лисп, работает супер, спасибо! Последний раз редактировалось Positron, 19.02.2010 в 12:15. Причина: Спасибо |
|||
|
||||
Регистрация: 14.06.2009
Бат-Ям
Сообщений: 295
|
Первый раз делаю такое, гарантий никаких. Тут (W)rite/(S)how/(O)ffset/(E)nd: W-записать, выбираем первую линию и офсеты, и даём название варианту. S - показать какие варианты есть в рисунке, надеюсь названия разные. O - выбираем линию, точку и пишем название варианта. Если нет варианта-Variant not faund! E - выход. Вариант присоединяется к линии от которой делаем офсет . Стираем линию - нет варианта. Копируем в другой файл - появляется вариант. Запуск mof
Код:
Последний раз редактировалось Victor, 19.02.2010 в 18:29. |
|||
|
||||
всё что связано с упорядоченным движением заряженных частиц Регистрация: 27.07.2007
М.О.
Сообщений: 1,693
|
Цитата:
Цитата:
|
|||
|
||||
Dynamic Offset
Эта программа позволяет выполнять динамическое подобие нескольких объектов одновременно, с произвольным числом подобий и дополнительным коэффициентом расстояния подобия. После выбора объектов, пользователь может ввести расстояние подобия в командную строку, или указать на экране мышкой, а так же воспользоваться следующими опциями: • Число подобий: число подобий может быть увеличено/уменьшено, используя клавиши +/-, или альтернативно пользователь может ввести количество подобий, нажав 'N'. • Коэффициент подобия: коэффициент расстояния между последовательными подобиями может быть изменен, нажав 'F'. • Настройки подобия: Значение Слой/Тип линии/Вес линии и Цвет могут быть изменено, нажав 'S'. • Способ подобия: Может быть изменен, нажатием 'Tab', пользователь может выбрать подобие в одну сторону или обе стороны одновременно. • Удаление Объекта: пользователь может сохранить/удалить исходный объекты, для выбора нажимаем 'D'. • Подобие к центру: пользователь может выполнить подобие к центру двух объектов, нажимая 'C'. • Подсветка подобия: нажатием Shift, пользователь может подсветить объекты подобия(необходим Express Tools). (перевёл как мог, сильно не бейте) Copyright © Lee McDonnell, October 2009. All Rights Reserved.
__________________
Почему все вдруг становятся умными, когда уже не надо? Последний раз редактировалось Disney, 21.02.2010 в 20:13. |
||||
|
||||
Регистрация: 25.06.2009
Сообщений: 147
|
Цитата:
Эсть просьбы по улучшению лиспа: 1. Возможно ли зделать отдельный файлик, куда будут кидатся все записанные ("первую линию и офсеты") названия офсетов (их линии из файлов при создании) по типу команды -_wblock или иначе... Например эсли -_wblock то можно так: а) на каждый "оффсет" создаётся свой dwg файл и именуется такимже названием или б) создаётся 1 файлик и в него записуются линии, с отступом. __________________________________________________________ Адрес папки куда записывать файлы dwg указать в самом лиспе чтоб незбивалось, или как иначе, единственное чтоб 1-н раз, а потом об этом невспоминать до переноса на другой ПК напимер. __________________________________________________________ к примеру делал Krieger в этой теме http://forum.dwg.ru/showthread.php?t=44503 а вот код : (defun Kr_Wblock (/ ss n key pr filename) (vl-load-com) (setq ss (ssget) n 0 key t cmd (getvar "cmdecho")) (while (and (ssname ss n) key (setq pr (entget (ssname ss n))) ) (if (and (eq (cdr (assoc 0 pr)) "TEXT") (eq (strcase (cdr (assoc 8 pr))) "NAME_FRAGMENT")) (setq key nil filename (strcat (vla-get-path (vla-get-activedocument (vlax-get-acad-object))) "\\" (cdr (assoc 1 pr)))) ) (setq n (1+ n)) );while (if filename (progn (setq lstpt (apply 'append (mapcar '(lambda (obj / minpt maxpt) (vla-getboundingbox obj 'minpt 'maxpt) (mapcar 'vlax-safearray->list (list minpt maxpt)) );end of lambda (mapcar 'vlax-ename->vla-object (vl-remove-if '(lambda (a) (wcmatch (cdr (assoc 0 (entget a))) "MTEXT,DIMENSION,*TABLE")) (sstolist ss))) )) );end of setq (vl-file-delete (strcat filename ".dwg")) (vla-StartUndoMark (vla-get-activedocument (vlax-get-acad-object))) (setvar "cmdecho" 0) (vl-cmdf "_ucs" "_m" (list (apply 'min (mapcar 'car lstpt)) (apply 'min (mapcar 'cadr lstpt)))) (vl-cmdf "_-wblock" filename "" "0,0,0" ss "") (vl-cmdf "_oops") (vl-cmdf "_ucs" "_p") (setvar "cmdecho" cmd) (vla-EndUndoMark (vla-get-activedocument (vlax-get-acad-object))) );progn (princ "\nНе найдена метка") );if (princ) );defun ;--------------------------------------- (defun sstolist (ss / i lst); конвертирует набор в список (setq i 0) (if ss (repeat (sslength ss) (setq lst (append lst (list (ssname ss i))) i (1+ i)) ));end of repeat & if lst );end of sstolist 2. Возможно ли зделать чтоб список вылетал как при нажатии на правую кнопку мыши, чтоб не вводить каждый раз на клавиатуре? |
|||
|
||||
Регистрация: 02.01.2020
Сообщений: 5
|
Добрый день.
Задача следующая: Есть замкнутая полилиния. Необходимо сделать OFFSET наружу на заданную величину. На данный момент написал такой код, но он не правильно работает если исходная полилиния нарисована против часовой стрелки (при этом оффсет происходит внутрь). Прошу вашей помощи, уважаемые форумчане. Код:
|
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Бетоны для гидротехнических сооружений | Egor_II | Железобетонные конструкции | 9 | 03.02.2016 11:06 |
бетонирование в зимних условиях | тен | Технология и организация строительства | 107 | 21.12.2013 13:59 |
LISP для поиска групп (наборов) одинаковых примитивов и замена их блоком | ElectroBOG | LISP | 20 | 23.07.2010 16:00 |
Юмор 2007 | Огурец | Разное | 1172 | 29.12.2007 11:16 |