Re: LISP. Подобие в обе стороны
> Кулик Алексей aka kpblc
(vl-load-com)
не помогло хотя другим лиспа помогало
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
> Кулик Алексей aka kpblc
(vl-load-com)
не помогло хотя другим лиспа помогало
А у вас заработало, дело в том что когда не хватает (vl-load-com) лисп вообще не работает,
а тут работает и выдает такую ошибку,...
> Dextron3
Очень бы хотелсь функцию, которая офсетила объекты не по разовому выбору пользователя, а обрабатывала набор со множеством выбранных объектов.
> Yuriy
а MOFF что делает не так как ты хотел?
выделяет все и офсетит все сразу
> Dextron3
По поиску "MOFF" на DWG.RU найдено две позиции
1 - Программа суммирования числовой текстовой информации на чертеже
http://dwg.ru/dnl/30
2 - Расчет суммарной длины элементов и дистанций по точкам
http://dwg.ru/dnl/486
Если не затруднит разместите ссылочку на желаемый MOFF.
> Yuriy
Вариант подобия со множеством выбранных объектов, возможность переноса на текущий слой и удалением исходных
Команда MOFF2 - мультиоффсет в обе стороны
;;Multi OFFset to 2 side (defun C:MOFF2 (/ d obj ent adoc *error* DelObjList ss) (defun *error* (msg)(princ msg)(vla-endundomark adoc)) (vl-load-com)(setvar "CMDECHO" 0) (setq adoc (vla-get-activedocument (vlax-get-acad-object))) ;_ end of setq (if (null *OFF2*)(setq *OFF2* (abs (getvar "OFFSETDIST")))) ;_ end of if (if (zerop *OFF2*)(setq *OFF2* 1)) ;_ end of if (setq d (getvar "UNDOCTL")) (cond ((= d 0) (vl-cmdf "_.UNDO" "_All")) ((= d 3) (vl-cmdf "_.UNDO" "_Control" "_All")) (t nil) ) ;_ end of cond (setq d nil) (vla-startundomark adoc) (while (not (numberp d)) (princ (strcat "\n (Слой: " (if *OFFLAY* "Текущий)" "Объект)" ) ;_ end of if " Величина смещения или слой объектов [Объект/Текущий] <" ) ;_ end of strcat ) ;_ end of princ (princ *OFF2*)(princ ">: ") (initget 6 "Текущий Объект Current Object _Current Object Current Object") ;_ end of initget (if (null (setq d (getdist)))(setq d *OFF2*)) ;_ end of if (cond ((= d "Object") (setq *OFFLAY* nil)) ;_Слой объекта ((= d "Current") (setq *OFFLAY* t)) ;_Слой текущий (t nil) ) ;_ end of cond ) ;_ end of while (setq *OFF2* d) ;_ end of setq (while (setq ss nil ss (ssget "_:L") ) ;_ end of setq (setq d '-1) (while (setq obj (ssname ss (setq d (1+ d)))) (setq ent (vlax-ename->vla-object obj)) (cond ((and (vlax-write-enabled-p ent) (vlax-method-applicable-p ent 'Offset) ) ;_ end of and (setq obj (append (vlax-safearray->list (vlax-variant-value (vla-offset ent *OFF2*)) ) ;_ end of vlax-safearray->list (vlax-safearray->list (vlax-variant-value (vla-offset ent (- 0 *OFF2*))) ) ;_ end of vlax-safearray->list ) ;_ end of append ) ;_ end of setq (if *OFFLAY* (mapcar '(lambda (x) (vla-put-layer x (getvar "CLAYER"))) obj ) ;_ end of mapcar ) ;_ end of if (setq DelObjList (cons ent DelObjList)) ) (t (princ "\nНе удается создать объект, подобный данному: ") (princ (cdr(assoc 0(entget obj)))) ) ) ;_ end of cond ) ;_ end of while ) ;_ end of while (initget "Да Нет Yes No _Yes No Yes No") (if (= (getkword "\nУдалять исходные объекты? [Да/Нет] <Нет> : ") "Yes" ) ;_ end of = (mapcar '(lambda (x) (if (vlax-write-enabled-p x) (vla-erase x) ) ;_ end of if ) ;_ end of lambda DelObjList ) ;_ end of mapcar ) ;_ end of if (vla-endundomark adoc) (princ) ) ;_ end of defun (princ "\nНаберите в командной строке MOFF2")
> VVA
Попробовал.
Это просто супер!
Большое спасибо!!!
> Yuriy
ты не в разделе довн лоад ищи,
а зарегестрируйся на форуме там очень интересно,
и самые лучшие лиспы, я еще в себя до сих пор
прийти не могу =), даже такие о которых обычный
пользователь и догадаться не мог...
> VVA
я присоединяюсь к Yuriy,
этот еще универсальней чем был,
пришлось положить в дальний ящик лисп OFF2,
и обновить старый MOOF
Ипользуется:
ВК, ОВ для прорисовки труб
КМ для балок вид сверху
АР для стен у кого нет СПДС
СПАСИБО
VVA,
Мультиофсет работает некорректно в случае самопересекающейся незамкнутой полилинии, если дуговой сегмент пересекает линейный.
Стандартная функция офсет ведёт себя при этом верно.
Когда полилиния кроме самопересечения ещё и замкнута, тогда и стандартный офсет тоже ерундит.
Где может быть это полезно? При создании контура рисунка на фасаде или кроватной спинке (а рисунки встречаются всякие).
К сожалению, познания мои в LISP очень слабые, не могу понять как исправить.
Для непересекающихся линий просто супер!
> Андрей1983
Я не знаю пока как и чем помочь. Дело в том, что в первых версиях использовалась команда Offset, а сейчас стандартный метод каждого примитива (vla-offset ent *OFF2*). Т.е. я хочу сказать, что геометрия не просчитывается, а вызываются стандартные команды или методы.
По поиску "MOFF" на DWG.RU найдено две позиции
1 — Программа суммирования числовой текстовой информации на чертеже
http://dwg.ru/dnl/30
2 — Расчет суммарной длины элементов и дистанций по точкам
http://dwg.ru/dnl/486
Если не затруднит разместите ссылочку на желаемый MOFF.
Наверное имелся ввиду MOFF в #17
http://forum.dwg.ru/showthread.php?t=12377
> VVA
Большое спасибо!
Вечером опробую...
Извените я возможно непонятно обьяснил что нужно получить.Есть 2 контура один находится внутри второго.
Соответственно один внешний другой внутренний.Нужно чтобы при выделении обоих программа распознала какой внутренний ,а какой вннешний и отофсетила внешний только внутрь- а внутренний только наружу+.
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум работает на PunBB, при поддержке Informer Technologies, Inc