Re: LISP. Подобие в обе стороны

> Кулик Алексей aka kpblc
(vl-load-com)
не помогло хотя другим лиспа помогало

Re: LISP. Подобие в обе стороны

А у вас заработало, дело в том что когда не хватает (vl-load-com) лисп вообще не работает,
а тут работает и выдает такую ошибку,...

Re: LISP. Подобие в обе стороны

MOFF оказался не Multi-OFFset ((

Re: LISP. Подобие в обе стороны

> Yuriy
что ты имеешь ввиду?

Re: LISP. Подобие в обе стороны

> Dextron3
Очень бы хотелсь функцию, которая офсетила объекты не по разовому выбору пользователя, а обрабатывала набор со множеством выбранных объектов.

Re: LISP. Подобие в обе стороны

> Yuriy
а MOFF что делает не так как ты хотел?
выделяет все и офсетит все сразу

Re: LISP. Подобие в обе стороны

> Dextron3
По поиску "MOFF" на DWG.RU найдено две позиции
1 - Программа суммирования числовой текстовой информации на чертеже
http://dwg.ru/dnl/30
2 - Расчет суммарной длины элементов и дистанций по точкам
http://dwg.ru/dnl/486
Если не затруднит разместите ссылочку на желаемый MOFF.

Re: LISP. Подобие в обе стороны

> 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")

Re: LISP. Подобие в обе стороны

> VVA
Попробовал.
Это просто супер!
Большое спасибо!!!

Re: LISP. Подобие в обе стороны

> Yuriy
ты не в разделе довн лоад ищи,
а зарегестрируйся на форуме там очень интересно,
и самые лучшие лиспы, я еще в себя до сих пор
прийти не могу =), даже такие о которых  обычный
пользователь и догадаться не мог...

Re: LISP. Подобие в обе стороны

> VVA
я присоединяюсь к Yuriy,
этот еще универсальней чем был,
пришлось положить в дальний ящик лисп OFF2,
и обновить старый MOOF
Ипользуется:
ВК, ОВ для прорисовки труб
КМ для балок вид сверху
АР для стен у кого нет СПДС
СПАСИБО

Re: LISP. Подобие в обе стороны

Супер! Спасиба!!!

Re: LISP. Подобие в обе стороны

VVA,
Мультиофсет работает некорректно в случае самопересекающейся незамкнутой полилинии, если дуговой сегмент пересекает линейный.
Стандартная функция офсет ведёт себя при этом верно.
Когда полилиния кроме самопересечения ещё и замкнута, тогда и стандартный офсет тоже ерундит.
Где может быть это полезно? При создании контура рисунка на фасаде или кроватной спинке (а рисунки встречаются всякие).
К сожалению, познания мои в LISP очень слабые, не могу понять как исправить.
Для непересекающихся линий просто супер!

Re: LISP. Подобие в обе стороны

> Андрей1983
Я не знаю пока как и чем помочь. Дело в том, что в первых версиях использовалась команда Offset, а сейчас стандартный метод каждого примитива (vla-offset ent *OFF2*). Т.е. я хочу сказать, что геометрия не просчитывается, а вызываются стандартные команды или методы.

Re: LISP. Подобие в обе стороны

Yuriy пишет:

По поиску "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

Re: LISP. Подобие в обе стороны

> VVA
Большое спасибо!
Вечером опробую...

Re: LISP. Подобие в обе стороны

Извените я возможно непонятно обьяснил что нужно получить.Есть 2 контура один находится внутри второго.
Соответственно один внешний другой внутренний.Нужно чтобы при выделении обоих программа распознала какой внутренний ,а какой вннешний и отофсетила  внешний только внутрь- а внутренний только наружу+.