Как отобразить контур 2-х пересекающихся объектов?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как отобразить контур 2-х пересекающихся объектов?

Как отобразить контур 2-х пересекающихся объектов?

Ответ
Поиск в этой теме
Непрочитано 25.02.2006, 00:30 #1
Как отобразить контур 2-х пересекающихся объектов?
xbt
 
Регистрация: 25.02.2006
Сообщений: 12

Есть 2 объекта,например полилиния и окружность, расположенные следующим образом - полилиния начинается в центре окружности и выходит за её пределы. Нужно отобразить ТОЛЬКО границы этого нового объекта... неполную окружность с хвостиком. Без заливки. Внутри этого комбинировонного объекта недолжно быть никаких линий. Может кто помочь?
Просмотров: 6064
 
Непрочитано 25.02.2006, 00:47
#2
vk

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


Цитата:
Внутри этого комбинировонного объекта недолжно быть никаких линий
Обрезать полилинию командой _.trim

Цитата:
неполную окружность
Дугу чтоли? Ну окружность тоже обрезать... Команда _.breake. Только повнимательней с ней
vk вне форума  
 
Автор темы   Непрочитано 25.02.2006, 01:15
#3
xbt


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


Пример лежит в файле
http://80.250.160.70/dxf/t.dxf
Слева исходный вариант, справа то что должно получится. Таких объектов в файле ~1000, т.е. желательно это как-то автоматизировать...
xbt вне форума  
 
Непрочитано 25.02.2006, 01:29
#4
vk

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


Вопрос первый: эти "такие объекты" идентичны во всем чертеже? Ну или может быть порядка десятка видов...

Есть мысля просто программно отрисовать, или повтыкать блоки.
vk вне форума  
 
Автор темы   Непрочитано 25.02.2006, 01:39
#5
xbt


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


Таких объектов всего 3..4 разных вида... Это экспортированная из P-CAD разводка печатной платы. В результате нужно получить векторный файл с толщиной линий контура 0.001мм для запуска на плоттер. (линии другой толщины или растровое изображение плоттер не обрабатывает). А как эти объекты заново отрисовывать?
xbt вне форума  
 
Непрочитано 25.02.2006, 02:03
#6
vk

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


Ну как... Программно конечно, не ручками же
Смысл такой, что надо за что то зацепиться. Например, за блок "_DEFAULT_PAD1". Ну а дальше думать...

Вопрос второй: эти блоки "_DEFAULT_PAD1" встречаются только в таких объектах, или еще где то?

Вопрос третий: длина примыкающей полилинии всегда 0,1" ?

Гммм... может быть, возможно ли из P-CAD экспортировать сразу с готовым контуром? Или это недоступно физически....
vk вне форума  
 
Автор темы   Непрочитано 25.02.2006, 02:17
#7
xbt


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


1) Блоки "_DEFAULT_PAD1" могут встречаться в любых объектах, так же как и похожие блоки с другими названиями.
2) Длина всех линий разная.

Экспортировать из P-CAD с границами не удавалось, правда удалось путём сложных махинаций типа P-CAD->adobe illustrator->corel drow->autocad->adobe illustrator получить векторную картинку с границами в виде линий вдоль контуров каждого объекта(самих объектов небыло, зато были линии пересечений границ внутри объектов, которе тоже надо как-то удалить). Но это ненормально и повторить 2-й раз несмогу.

Может есть какой-то парсер для dxf формата, который позволит как-то автоматизировать этот процесс?
xbt вне форума  
 
Непрочитано 25.02.2006, 02:52
#8
vk

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


Мдя.... невесело... Прицепите к сообщению, или замыльте фрагмент реального чертежа, может что то удастся придумать.... Разумеется, ничего секретного.

Есть еще одна мысля. Вроде P-CAD должен давать список координат точек в текстовом виде (файле). Наверняка эти точки можно как то идентифицировать по названию. И просто отрисовать по этим координатам заново.
vk вне форума  
 
Непрочитано 26.02.2006, 07:57
#9
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


xbt , вы не представляете, как вам сегодня умопомрачительно свезло. Я написал для вас прогу, ибо аз есмь добр днесь. Пользуйтесь на здоровье, да не забывайте каждый раз сугубо и трегубо благодарить мнея за то, что я есть.
Код:
[Выделить все]
(defun flt (typ)
  (list 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbinteger '(0 . 0)) '(0)) 
    (vlax-safearray-fill (vlax-make-safearray vlax-vbvariant '(0 . 0)) (list typ)))
);flt
;
(defun vlst (var)
  (vlax-safearray->list (vlax-variant-value var))
);vlst
;
(defun C:CLN (/ adoc util bks ass pts ptn ptx lpts ht cpt opt pt1 pt2) 
  (vl-load-com)
  (alert "\nСпасибо Лентяю, да живет он долго и счастливо! Ура!")
  (setq vlt (mapcar 'getvar '("OSMODE" "CMDECHO" "LUNITS"))
        adoc (vla-get-activedocument (vlax-get-acad-object))
        lmt (vlax-get adoc 'limits))
  (mapcar '(lambda (x y) (set x (vlax-get-property adoc y))) '(util bks ass sss lyr)
             '(utility blocks ActiveSelectionSet SelectionSets ActiveLayer))
  (if (/= (vla-get-count ass) 0) (vla-clear ass))
  (setq oss (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list sss "OSS")))
              (vla-add sss "OSS") (vla-item sss "OSS")))
  (vla-endundomark adoc)
  (vla-startundomark adoc)
  (setvar "cmdecho" 0) (setvar "LUNITS" 2)
  (vla-Select ass acSelectionSetAll (vlax-3d-point '(0 0 0))
    (vlax-3d-point (cddr lmt))(car (flt "*Insert")) (cadr (flt "*Insert")))
  (setq csp (vla-ObjectIDToObject adoc (vla-get-OwnerID (vla-item ass 0))))
  (vlax-for it ass
    (if (and (vlax-property-available-p it 'Name) (= (vla-get-name it) "_DEFAULT_PAD1"))
      (progn (vla-getboundingbox it 'pt1 'pt2)
        (vla-Select oss acSelectionSetCrossing (vlax-make-variant pt1) (vlax-make-variant pt2)
          (car (flt "*Polyline")) (cadr (flt "*Polyline")))
        (vlax-for pl oss
          (setq nls (mapcar '(lambda (x) (car (vlst (vla-offset pl (* x (vla-get-ConstantWidth pl)))))) '(0.5 -0.5))
                crc (vla-addCircle csp (vla-get-InsertionPoint it)
                      (apply '- (mapcar '(lambda (x) (car (vlax-safearray->list x))) (list pt2 pt1))))
                lns (mapcar '(lambda (x) (car (vlst (vla-explode x)))) nls)
                tpts (mapcar '(lambda (x) (vla-IntersectWith crc x acExtendNone)) lns)
                pars (mapcar '(lambda (x y) (vlax-curve-getParamAtPoint x (vlst y))) lns tpts))
          (foreach l (cons it (cons pl nls)) (vla-delete l))
          (mapcar '(lambda (x y z) (if (> 0.5 x) (vla-put-StartPoint y z) (vla-put-EndPoint y z))
                     (vla-put-layer y (vla-get-name lyr))) pars lns tpts)
          (mapcar '(lambda (x) ) lns)
          (setq ens (mapcar 'vlax-vla-object->ename (cons crc lns)))
          (command "TRIM" (cadr ens) (caddr ens) "" (car ens)));vlax-for
        (vla-clear oss)));if
  );vlax-for
  (vla-clear ass)
  (vla-endundomark adoc)
  (mapcar '(lambda (x y) (setvar x y)) '("OSMODE" "CMDECHO" "LUNITS") vlt)
);end
Я так понимаю. что полилинии могут быть длинными и ломаными. Потому я превратил их в отдельные отрезки, сопряженные с окружностями. Если будут какин проблемы в случае соединения/пересечения двух и более дорожек с одной и той же контактной площадкой, кричите громче, и я приду на помощь.
Лентяй вне форума  
 
Автор темы   Непрочитано 26.02.2006, 22:36
#10
xbt


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


Выкладываю 2 рисунка. Левый - то что удалось получить через P-CAD -> CorelDraw -> AutoCAD. Правый - то что мне удалось сделать за 10 минут(только левая часть схемы, 1 дорожка с 4-мя изгибами)... Собственно это и требуется сделать для всей схемы...
[ATTACH]1140982619.rar[/ATTACH]
xbt вне форума  
 
Непрочитано 26.02.2006, 23:05
#11
vk

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


В приложении то что сделал за две минуты после почти получаса обдумывания. Осталось немного додумать как выкинуть мелочевку.
[ATTACH]1140984339.zip[/ATTACH]
vk вне форума  
 
Автор темы   Непрочитано 26.02.2006, 23:07
#12
xbt


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


Забыл выложить то-что даёт P-CAD. Площадки не обязательно могут быть круглыми, но и прямоугольными, но на местах изгиба есть круги. То что выложил Лентяй частично работает на старой схеме, но на этой неработает... Всё равно ему спасибо... Теперь есть направление для размышления...
[ATTACH]1140984431.rar[/ATTACH]
xbt вне форума  
 
Автор темы   Непрочитано 26.02.2006, 23:14
#13
xbt


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


vk Супер. Осталось избавится каким-то образом от круглых элементов, т.к. в этой схеме их быть не должно...
xbt вне форума  
 
Непрочитано 26.02.2006, 23:19
#14
vk

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


Ага... еще три минуты размышлений....
[ATTACH]1140985158.zip[/ATTACH]
vk вне форума  
 
Автор темы   Непрочитано 26.02.2006, 23:22
#15
xbt


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


А теперь собственно вопрос... А как это всё сделать!???
Огромное спасибо за помощь!
xbt вне форума  
 
Непрочитано 26.02.2006, 23:31
#16
vk

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


Ну дак написать то дольше получается чем потыкать мышом

Значит, создаю новый слой (синим) и делаю его активным
Отрисовываю прямоугольник - типа границы платы
Далее замут со штриховкой:
Command: _bhatch
В диалоговом окне опции как на картинке....
Тыкаю Pick points и указываю точку между границей платы и рисунком
АКАД некоторое время думает, потом предлагает ткнуть еще точку - это нам не надо, значит давлю ентер.
Штриховку можно сразу выкинуть - не нужна
[ATTACH]1140985918.gif[/ATTACH]
vk вне форума  
 
Непрочитано 26.02.2006, 23:35
#17
vk

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


Продолжаем....

Открываю панель свойств, давлю кнопочку Quick Select и выбираю как на картинке....
Давлю Ok
Давлю Del

Усе
[ATTACH]1140986157.gif[/ATTACH]

Вроде ничего не напутал...
vk вне форума  
 
Непрочитано 26.02.2006, 23:58
#18
vk

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


:evil: Однако, не все так просто... Внимательно полазил по скруглениям - кое где при переходе на "радиус" обнаружил вот такую фигню....

Возможно, удастся поиграв параметрами при штриховке от этого избавится, а возможно и нет. Длина "хвостика" всего то 0.00034421 а ширина и того меньше 0.00004584 ....
Может быть придется на этапе экспорта что то подправлять....
[ATTACH]1140987490.gif[/ATTACH]
vk вне форума  
 
Автор темы   Непрочитано 27.02.2006, 00:18
#19
xbt


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


После вышеописанных манипуляций получил вот что... Непонятно что делать с кружками СИНЕГО цвета, но почему-то не все удалились с помощью quick select... Хвостики особого значения не имеют, т.к. слишком малы, думаю плоттер их незаметит вовсе... Кстати кружки на исходном рисунке могут быть и как более мелкие так и более крупные. И если бы удалось это всё провернуть с исходным рисунком(там где всё залито) - то было бы вообще замечательно.
[ATTACH]1140988719.dwg[/ATTACH]
xbt вне форума  
 
Непрочитано 27.02.2006, 01:10
#20
vk

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


В предыдущем файле, который я ковырял, синие кружочки (кстати, там есть еще и полукружочки) представляли собой полилинию площдью примерно 0.0004, соответственно, выделил их фильтром < 0.0005. В последнем же файле их площадь примерно 0.0027 - надо подобрать значение фильтра.

Насчет более или менее мелких.... ну, пожалуй сделать еще пару-тройку слоев, чтоб так же фильтрами раскидать на "нужные - не нужные". Ведь и какие то мелкие могут оказаться нужными

По поводу "со всем рисунком". Может сразу весь не получится, возможно придется обрабатывать частями. Создание контура бывает что глючит на слишком густо засыпаном чертеже.
vk вне форума  
 
Автор темы   Непрочитано 27.02.2006, 01:22
#21
xbt


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


Вроде разобрался... Огромнейшее спасибо!
xbt вне форума  
 
Автор темы   Непрочитано 26.03.2006, 13:04
#22
xbt


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


А у этого файла найти указанным методом не получается. Есть какой-то более действенный способ?
[ATTACH]1143363861.dwg[/ATTACH]
xbt вне форума  
 
Непрочитано 27.03.2006, 11:45
#23
vk

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


Так пайдеть?
[ATTACH]1143445552.zip[/ATTACH]
Млин, файл тяжеленным выходит...
ээээ.... возля 16 ножки площадка почему то не соединилась с дорожкой... хз почему...

В общем, сначала _.region - выбрал все
Потом _.union - опять все
И наконец, _.explode

Ну, думаю что дальше просто
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как отобразить контур 2-х пересекающихся объектов?