Тема: Как превратить сплайн в полилинию.

Неожиданно наткнулся на способ преобразования сплайна в полилинию. Это преобразование оказалось побочным эффектом команды "Flatten objects" из "Express Tools". Может пригодиться тем, кто желает сохранить чертеж, выполненный в CorelDRAW, в формате DWG для дальнейшей работы в AutoCAD'е. При таком сохранении кривые Безье из Corel переходят в AutoCAD в виде сплайнов и работать с таким чертежом очень трудно.

Re: Как превратить сплайн в полилинию.

Отлично!!!
Но только для 2006-го

Re: Как превратить сплайн в полилинию.

И для 2005. В 2004 такой команды в Экспрессе нет. К сожалению, 3D полилиния так и осталась 3D полилинией.

Re: Как превратить сплайн в полилинию.

Кстати, для тех, кто не знает. Сама эта команда позволяет запросто обнулить координату Z для тех объектов, у которых она отлична от нуля. Мне не раз попадались такие файлы и в них невозможно было ни сделать сопряжение, ни привязаться к пересечению...
Плюс, к тому же, можно сделать плоский снимок со скрытыми линиями любой 3D сцены с любой 3D точки зрения.

Re: Как превратить сплайн в полилинию.

Может это немного утешит. Превращает сплайны, окружности, эллипсы, полилинии и линии в полилинии с заданным расстоянием между точками. Изменение цвета в конце можно убрать. Я под заказ писал и это было нужно.

(defun c:dvl(/ oldOsmode oldEcho objSet linLen objCount curObj
       vlaObj ptSet lastObj ptList startPt endPt objList
       nextObj oldColor *error*)
  (vl-load-com)
    (defun *error* (msg)
        (setvar "OSMODE" oldOsmode)
        (setvar "CMDECHO" oldEcho)
        (setvar "CECOLOR" oldColor)
    (princ)
    ); end *error*
  (setq oldOsmode(getvar "OSMODE")
        oldEcho(getvar "CMDECHO")
  oldColor(getvar "CECOLOR")
   ); end setq
  (setvar "OSMODE" 0)
  (setvar "CMDECHO" 0)
  (setvar "CECOLOR" "1")
  (princ "\n*** Select objects and press Enter *** ")
  (if
    (and
     (setq objSet
     (ssget '((-4 . "<OR")(0 . "LINE")(0 . "LWPOLYLINE")(0 . "ARC")
        (0 . "SPLINE")(0 . "CIRCLE")(0 . "ELLIPSE")(-4 . "OR>"))))
     (setq linLen(getreal "\n*** Specify lines length: "))
     ); end and
     (progn
       (setq objCount 0)
         (repeat(sslength objSet)
     (setq curObj(ssname objSet objCount)
     vlaObj(vlax-ename->vla-object curObj)
     ptSet(ssadd)
           lastObj(entlast)
     ptList '()
     ); end setq
     (command "_.measure" curObj linLen)
     (setq nextObj(entnext lastObj))
     (while(not(null nextObj))
       (ssadd  nextObj ptSet)
       (setq nextObj(entnext nextObj))
       ); end while
     (setq objList(vl-remove-if 'listp
                        (mapcar 'cadr(ssnamex ptSet))))
     (foreach pt objList
       (setq ptList(append ptlist(list(cdr(assoc 10(entget pt))))))
       ); end foreach
         (setq startPt(vlax-curve-getStartPoint vlaObj)
         endPt(vlax-curve-getEndPoint vlaObj)
         ptList(append(list startPt)ptList)
         ptList(append ptList(list endPt))
         ); end setq
           (command "_.pline")
                 (mapcar 'command ptList)
                 (command "")
     (command "_.erase" ptSet "")
     (command "_.erase" curObj "")
     (setq objCount(1+ objCount)
     ptSet nil); end setq
     ); end repeat
           (princ "\n*** DONE ***")
     ); end progn
       ); end if
    (setvar "OSMODE" oldOsmode)
    (setvar "CMDECHO" oldEcho)
    (setvar "CECOLOR" oldColor)
    (princ)
    ); end of dvl

Re: Как превратить сплайн в полилинию.

В 2004-ом Flatten тоже есть.
В папке EXPRESS лежит программа flatten.lsp
Загрузить её и с командной строки ввести flatten. Или в автозагрузку и создать кнопку с макросом.
PS Рядом с Flatten.lsp обязательно должна находиться и Flattensup.lsp

Re: Как превратить сплайн в полилинию.

> Hrenn
Там я просто не смотрел. А вот посмотреть, какие команды задействованы в конкретной версии "Express Tools" можно в файле acetmain.ini. Когда я переводил Экспресс в дистрибутиве, пришлось и этот файл модифицировать под русифицированные команды.

Re: Как превратить сплайн в полилинию.

> Fantomas
Извините, а как пользоваться Вашей программой.
Я её загрузил в Автокад, а дальше что?

Re: Как превратить сплайн в полилинию.

Сначала Tools>AutoLISP>Load... (тут собственно говоря загружаем *.lsp файл).
Потом в командной строке dvl, согласно инструкции выбираем объекты и вводим длинну отрезков в виде которых они должны быть представлены (кроме последнего конечно который будет произвольной длинны, которая меньше требуемой).
Програмка специфическая, попросил человек которому нужно было так представлять объекты для лазерной резки. Он это в ручную до этого делал :))
Так что незнаю насколько это вам подойдёт.

Re: Как превратить сплайн в полилинию.

> Profan
а как этот экспресс осовить легче? я в английском не очень, а для работы было бы полезно. Может файл помощи на русском есть? Иначе только со словорем сидеть и тыкаться по кнопочкам :)

Re: Как превратить сплайн в полилинию.

> Roman-80
Отвечаю за Profan'а. Описание "Express Tools" 2004 можно посмотреть здесь:
http://autocad.angteam.ru/?page=11&cat=0
Надо нажать "Показать всю главу" и пролистать к концу.