| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Нужна помощь! Полилиния с равными интервалами опорных точек.

Нужна помощь! Полилиния с равными интервалами опорных точек.

Ответ
Поиск в этой теме
Непрочитано 13.03.2005, 17:18 #1
Нужна помощь! Полилиния с равными интервалами опорных точек.
pffafer
 
Регистрация: 13.03.2005
Сообщений: 3

Здравствуйте! Нужна помощь.
Суть проблемы:
Есть лазерный станок ЧПУ для нанесения логотипов. Клиент приносит рисунок логотипа. Мы его сканим, трассируем в КорелТрэйс, получаем DWG, где полилинии построены с разным интервалом опорных точек. И лазер немного задерживается в каждой точке. И тот участок полилинии, на котором опорных точек больше, лазер прорезает глубже, и наоборот.
В результате, глубина обработки неравномерна.
Ворос решаем так- руками обводим существующие полилинии (только линиями, без дуг и проч.), стараясь соблюдать равенство интервалов между опорными точками. Процесс мучительный и занимает массу времени.
Нет ли команды в Автокаде, или АвтоЛиспе, чтобы сама удаляла часть опорных точек на полилинии, задавая одинаковый интервал расположения точек?
Большое спасибо всем откликнувшимся.
Просмотров: 6458
 
Непрочитано 13.03.2005, 18:22
#2
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Команды такой не встречал. Можно программку сделать, но пока представляю алгоритм только в общих чертах.

А кроме полилинии что можно еще использовать для ЧПУ?

Есть такой вариант: обводить сплайном и поделить его командой _measure.
В принципе, на основе сплайна можно и полилинию с одинаковым интервалом вершин сделать - такая программка попадалась кажется на этом форуме, хотя могу и ошибаться.

PS Одно время пытался использовать КорелТрэйс... результат не фонтан. Да, все предельно просто, почти никаких настроек. Но принципы у Корела немного не такие же как у АКАДа. В общем, забросил...
vk вне форума  
 
Автор темы   Непрочитано 14.03.2005, 00:15
#3
pffafer


 
Регистрация: 13.03.2005
Сообщений: 3


Цитата:
Сообщение от vk
1. А кроме полилинии что можно еще использовать для ЧПУ?
Есть такой вариант: обводить сплайном и поделить его командой _measure.
В принципе, на основе сплайна можно и полилинию с одинаковым интервалом вершин сделать - такая программка попадалась кажется на этом форуме, хотя могу и ошибаться.

2. PS Одно время пытался использовать КорелТрэйс... результат не фонтан. Да, все предельно просто, почти никаких настроек. Но принципы у Корела немного не такие же как у АКАДа. В общем, забросил...
1. Даже полилини не используем. Только LINE. Так оказалось проще. Дело в том, что логотип наносится на пластик- материал очень легко обрабатывается. Очень трудно поймать нужные параметры скорости луча и его мощности для каждого отдельного пластика (а также получить высокую скорость нанесения всего логотипа, это уже экономический фактор). Для типа LINE мы его нашли. Все другие объекты требуют других параметров. Пришлось бы разбивать логотип на слои, например слой1-линии, слой2-дуги, слой3-окружности, и т.д., и для каждого слоя искать свои оптимальные параметры мощности и скорости. Это слишком сложно. Было принято волевое решение всё рисовать Line с примерно одинаковой длиной линий. Качество визуально не пострадало.

2. Все логотипы чёрно-белые, поэтому, Corel для этих целей хватает. Тут ещё очень важно перед трассировкой выбрать формат исходного растрового рисунка, его размер, разрешение, отсутствие мусора, и т.д. (фотошоп). Ну, а дальше, просто двигая движки настройки трассировщика, добиваемся нужного уровня векторизации.
Многоцветности логотипа можно добиться, повторяя эту операцию, несколько раз, добавляя в растровый оригинал элементы нового цвета. На словах сложно, на самом деле, не очень. :shock:

Как я уже сказал, самая трудоёмкая операция- добиться одинаковости длины LINE, а как это сделать- вопрос... :?:
pffafer вне форума  
 
Непрочитано 14.03.2005, 00:46
#4
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


А нельзя ли маленько заавтоматизировать разметку? Мысля такая: для ручной обводки используем команду _revcloud, которая строит полилинию-облачко (ногами пока не пинать! читайте дальше) с практически одинаковыми расстояниями между вершинами. Далее загружаем примерно такую программку
Код:
[Выделить все]
(defun test ()
  (princ "\nУкажите LWPOLYLINE > ")
  (if (and (setq e (ssget "_:S" '((0 . "LWPOLYLINE"))))
           (setq e (ssname e 0))
           (setq ptl (apply 'append 
                            (mapcar '(lambda (el)
                                       (if (= 10 (car el))
                                         (list (cdr el))
                                       ) ;_  if
                                     ) ;_  lambda
                                    (entget e)
                            ) ;_  mapcar
                     ) ;_  apply
           ) ;_  setq
      ) ;_  and
    (progn
      (command "_.line")
      (mapcar 'command ptl)
      (command "")
    ) ;_  progn
  ) ;_  if
  (princ)
) ;_  defun

(test) ;_ автозапуск
которая построит отрезки (LINE) по вершинам полилинии. Это то что пришло на ум так сказать, сходу.
vk вне форума  
 
Непрочитано 14.03.2005, 00:57
#5
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Вдогонку.... для преобразования сплайнов (чето не вспомню, сплайны или кто после корела выходят?):
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=10553ZP полилинию потом взорвать - будут отрезки...
Вот еще нечто похожее как то делал http://www.autocad.ru/cgi-bin/f1/board.cgi?t=10775rI - блоки взорвать после
vk вне форума  
 
Непрочитано 14.03.2005, 02:40
#6
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Что то много вас "лазерщиков" развелось Уже второй за последнее время. Вот может подойдет как экспресс вариант. Представляет линии, полилинии и арки в виде линий заданной длинны (режет круче лазера!). Со сплайнами, окружностями и эллипсами с первого захода не полчилось, что-то "глючит". Если надо то потом можно доработать...
Код:
[Выделить все]
(defun c:dvtl (/ *error* oldOsmode oldEcho linLen workObj
	       vlaObj stPt enPt curPt ptList linDist)
  
  (vl-load-com)

  (defun *error* (msg)
        (setvar "OSMODE" oldOsmode)
        (setvar "CMDECHO" oldEcho)
    (princ)
    ); end *error*

  (setq oldOsmode(getvar "OSMODE")
	oldEcho(getvar "CMDECHO")
	); end setq
  (setvar "OSMODE" 0)
  (setvar "CMDECHO" 0)
  (if
    (and
      (setq linLen(getreal "\n*** Enter lines length: "))
      (setq workObj(car(entsel "\n*** Select object ")))
      (member (cdr(assoc 0(entget workObj)))
	      '("LINE" "LWPOLYLINE" "ARC"))
      ); end and
    (progn
      (setq vlaObj(vlax-ename->vla-object workObj)
	    stPt(vlax-curve-getStartPoint vlaObj)
	    enPt(vlax-curve-getEndPoint vlaObj)
	    curPt stPt
	    linDist linLen
	    ptList '()
	    ); end setq
      (while(not(null curPt))
	(setq curPt(vlax-curve-getPointAtDist vlaObj linDist))
	(if(not(null curPt))
	      (setq ptList(append ptList(list curPt)))
	        ); end if
	      (setq linDist(+ linDist linLen))
	); end while
      (setq ptList(append ptList(list enPt)))
      (command "_.line")
      (mapcar 'command ptList)
      (command "")
      (vla-delete vlaObj)
      ); end progn
    ); end if
    (setvar "OSMODE" oldOsmode)
    (setvar "CMDECHO" oldEcho)
      (princ)
      ); end of c:dvtl
К стати у первого "лазерщика" проблемма была в том что лазер тормозил в точках "линия-линия" и ему надо было все разбить на арки...
{Smirnoff} вне форума  
 
Непрочитано 14.03.2005, 03:51
#7
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


Попробуйте COOR2TXT (сброс точек прямо в файл). Если нужны именно линии в DWG - можно их сформировать программой OCREATE из файла, который, правдо, нужно будет преобразовать в нужный формат, но это легко сделать средствами Excel.
(см.http://geol-dh.narod.ru/kai_stru.html)
KAI вне форума  
 
Непрочитано 14.03.2005, 16:33
#8
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Вот это переводит в набор отрезков: линии, полилинии, сплайны, эллипсы, арки. Обрабатывает сразу все выбранные объекты. Если нужна полилиния, замените строку (command "_.line") на (command "_.pline"). Если нужно записать список точек в какой либо файл тоже не проблемма. Если объекты большие и шаг мелкий придется немного подождать.

Код:
[Выделить все]
(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 "_.line")
      	         (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
[ATTACH]1110810028.gif[/ATTACH]
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 14.03.2005, 21:24
#9
pffafer


 
Регистрация: 13.03.2005
Сообщений: 3


Большое спасибо всем ответившим!
Пока много заказов на "гиперболоиде" , как разгребу (по старинке) - попробую предложеные варианты.
Ещё раз большое спасибо!
pffafer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Нужна помощь! Полилиния с равными интервалами опорных точек.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск