dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Контур с штриховкой по полилинии (полилиниям)

Контур с штриховкой по полилинии (полилиниям)

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 10.07.2016, 22:42 #1
Контур с штриховкой по полилинии (полилиниям)
Rusakov
 
Геодезия
 
г. Великий Новгород
Регистрация: 05.10.2011
Сообщений: 10

Rusakov вне форума Вставить имя

Здравствуйте!
Уважаемые форумчане, подскажите пожалуйста, есть ли уже готовое решение или может ли кто-нибудь помочь с решением следующей задачи:
- имеется одна или несколько полилиний или отрезков.
Требуется получить контур вокруг этих полилиний (отрезков) с задаваемым отступом и автоматически заштриховать этот контур нужной штриховкой с нужным цветом.
Пример: у меня есть 3 полилинии, одна на 1780 метров, и два отростка от первой по 300 метров.
Мне вокруг них нужно сделать один контур с отступом от полилинии в лево и вправо по 2 ( в том числе вниз и вверх от начальной и конечной точки полилинии ) + в этот контур добавить штрих из стандартной коллекции в желтом цвете.
Помогите пожалуйста!
P.S. на данный момент делаю так: с помощью функции смещение делаю две линии в лево и вправо + такие же у отростков, далее соединяю концы смещенных линий, смещаю эти линии вниз и вверх дополнительно (дабы сделать отступ от начальной и конечной точки полилинии) и использую функцию " объединить выбранное в 2D полилинии" - тем самым получаю контур. далее выбираю штриховку, цвет, масштаб и довожу начатое до конца. Хотелось бы все это сделать в прау кликов.

Последний раз редактировалось Rusakov, 10.07.2016 в 22:48.
Просмотров: 4627
 
Непрочитано 10.07.2016, 22:56
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,745
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Rusakov Посмотреть сообщение
с помощью функции смещение делаю две линии в лево и вправо + такие же у отростков, далее соединяю концы смещенных линий
Посмотри здесь LISP. Отрисовка внешнего контура выбранных объектов
и здесь Selection Set Bounding Box Там функция и чуть ниже пример ее использования
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 10.07.2016, 23:42
#3
trir


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


buffer
trir вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 11.07.2016, 00:13
#4
Rusakov

Геодезия
 
Регистрация: 05.10.2011
г. Великий Новгород
Сообщений: 10


Цитата:
Сообщение от VVA Посмотреть сообщение
и здесь Selection Set Bounding Box Там функция и чуть ниже пример ее использования
какой командой этот лисп заводится?

Цитата:
Сообщение от trir Посмотреть сообщение
buffer
В autoCad 2010 не пойдет?
Rusakov вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 11.07.2016, 09:18
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,310


trir, уточняй, что твое предложение касается Map3D. Сразу уточняй. Или в подписи укажи, что используешь Civil/Map3D.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 11.07.2016, 10:48
#6
Rusakov

Геодезия
 
Регистрация: 05.10.2011
г. Великий Новгород
Сообщений: 10


Нашел похожую функцию:
МенюГео: -->Работа с полилинией, отрезком -->Рисовать защитную зону вокруг полилинии, удаляя саму полилинию.
Минусы: удаляет саму полилинию ( лечится копированием по базовой точке)
зона рисуется только вдоль линии проходя через начальную и конечную точку полилинии, отступ от этих точек делаю в ручную.
зона рисуется на каждый объект отдельно, если линии три, то придется объединять самому.

Может кто-нибудь помочь на основе этой команды (Рисовать защитную зону вокруг полилинии, удаляя саму полилинию) сделать корректировку под мои нужды?
Rusakov вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 11.07.2016, 13:19
1 | #7
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,745
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Rusakov Посмотреть сообщение
Сообщение от VVA
и здесь Selection Set Bounding Box Там функция и чуть ниже пример ее использования
какой командой этот лисп заводится?
У автора - TEST
Собрал в одну кучу. Команда SSBB
Код:
[Выделить все]
(vl-load-com)
(defun c:SSBB ( / b s )
  ;;;Selection Set Bounding Box
  ;;;http://www.lee-mac.com/ssboundingbox.html
    (if
        (and
            (setq s (ssget))
            (setq b (LM:ssboundingbox s))
        )
        (entmake
            (append
               '(
                    (000 . "LWPOLYLINE")
                    (100 . "AcDbEntity")
                    (100 . "AcDbPolyline")
                    (090 . 4)
                    (070 . 1)
                )
                (mapcar '(lambda ( x ) (cons 10 (mapcar '(lambda ( y ) ((eval y) b)) x)))
                   '(
                        (caar   cadar)
                        (caadr  cadar)
                        (caadr cadadr)
                        (caar  cadadr)
                    )
                )
            )
        )
    )
    (princ)
)
;; Selection Set Bounding Box  -  Lee Mac
;; Returns a list of the lower-left and upper-right WCS coordinates of a
;; rectangular frame bounding all objects in a supplied selection set.
;; s - [sel] Selection set for which to return bounding box

(defun LM:ssboundingbox ( s / a b i m n o )
    (repeat (setq i (sslength s))
        (if
            (and
                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
                (vlax-method-applicable-p o 'getboundingbox)
                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
            )
            (setq m (cons (vlax-safearray->list a) m)
                  n (cons (vlax-safearray->list b) n)
            )
        )
    )
    (if (and m n)
        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
    )
)
(princ "\nType SSBB in command line")(princ)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 11.07.2016, 13:23
#8
Rusakov

Геодезия
 
Регистрация: 05.10.2011
г. Великий Новгород
Сообщений: 10


ммм...этот лисп делает прямоугольную рамку вокруг выбранных линий по их границе....совсем не то.
Rusakov вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 11.07.2016, 15:37
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,745
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Здесь еще можно посмотреть Нужен лисп (Двухсторонний офсет)
Offset Polyline Section
OffsetMultiplePolylines

----- добавлено через ~2 мин. -----
PS Кажется нашел более подходящую тему
Hatch of Closed Polylines Offset From User Designated Points

__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 12.07.2016, 13:52
#10
Rusakov

Геодезия
 
Регистрация: 05.10.2011
г. Великий Новгород
Сообщений: 10


Цитата:
Сообщение от VVA Посмотреть сообщение
PS Кажется нашел более подходящую тему
Hatch of Closed Polylines Offset From User Designated Points

А Есть возможность тот лисп выложить сюда? а то требует регистрации.

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от VVA Посмотреть сообщение
Здесь еще можно посмотреть Нужен лисп (Двухсторонний офсет)
Offset Polyline Section
OffsetMultiplePolylines

----- добавлено через ~2 мин. -----
эти лиспы очень похожи на функцию "смещение".
Rusakov вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 12.07.2016, 18:14
#11
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,745
Отправить сообщение для VVA с помощью ICQ Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Rusakov Посмотреть сообщение
А Есть возможность тот лисп выложить сюда? а то требует регистрации.
Есть
Вложения
Тип файла: lsp OffHatchV1-0.lsp (6.9 Кб, 60 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 18.07.2016, 01:47
#12
skkkk

AutoCAD_2008->2011
 
Регистрация: 20.03.2008
Московская область
Сообщений: 2,210


Rusakov, бьюсь об заклад, речь идет об охранной зоне газораспределительных сетей.
Набросал как-то для себя на скорую руку для предстоящего большого объема подобных действий:
Код:
[Выделить все]
 (defun C:PL-CONTOUR ( / en0 crv0 crv1 crv2 en1 en2 start_pt1 end_pt1 start_pt2 end_pt2 new_start_pt1 new_end_pt1 new_start_pt2 new_end_pt2 en3 crv3 en4 crv4 ss)
	(vl-load-com)
	(setq en0 (car (entsel "Укажите полилинию:"))
		  crv0 (vlax-ename->vla-object en0)
		  crv1 (car (vlax-safearray->list (vlax-variant-value (vla-Offset crv0 2))))
		  crv2 (car (vlax-safearray->list (vlax-variant-value (vla-Offset crv0 -2))))
		  en1 (vlax-vla-object->ename crv1)
		  en2 (vlax-vla-object->ename crv2)
		  start_pt1 (vlax-safearray->list (vlax-variant-value (vla-get-Coordinate crv1 0)))
		  end_pt1 (vlax-safearray->list (vlax-variant-value (vla-get-Coordinate crv1 (vlax-curve-getEndParam crv1))))
		  start_pt2 (vlax-safearray->list (vlax-variant-value (vla-get-Coordinate crv2 0)))
		  end_pt2 (vlax-safearray->list (vlax-variant-value (vla-get-Coordinate crv2 (vlax-curve-getEndParam crv1))))	
		  new_start_pt1 (polar start_pt1 (angle (vlax-curve-getPointAtParam crv1 0.001) start_pt1) 2)
		  new_end_pt1 (polar end_pt1 (angle (vlax-curve-getPointAtParam crv1 (- (vlax-curve-getEndParam crv1) 0.001)) end_pt1) 2)
		  new_start_pt2 (polar start_pt2 (angle (vlax-curve-getPointAtParam crv2 0.001) start_pt2) 2)
		  new_end_pt2 (polar end_pt2 (angle (vlax-curve-getPointAtParam crv2 (- (vlax-curve-getEndParam crv2) 0.001)) end_pt2) 2)	
	)
	(vla-put-Coordinate crv1 0 (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) new_start_pt1))
	(vla-put-Coordinate crv1 (vlax-curve-getEndParam crv1) (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) new_end_pt1))
	(vla-put-Coordinate crv2 0 (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) new_start_pt2))
	(vla-put-Coordinate crv2 (vlax-curve-getEndParam crv2) (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) new_end_pt2))
	(vl-cmdf "_PLINE" new_start_pt1 new_start_pt2 "")
	(setq en3 (entlast)
		  crv3 (vlax-ename->vla-object en3) 
	)
	(vl-cmdf  "_PLINE" new_end_pt1 new_end_pt2 "")
	(setq en4 (entlast)
		  crv4 (vlax-ename->vla-object en3) 
	)
	(setq ss (ssadd))
	(ssadd en1 ss)
	(ssadd en2 ss)
	(ssadd en3 ss)
	(ssadd en4 ss)
	(sssetfirst nil ss)
	(C:JPL)
	(command "_-hatch"
					 "С"
					 "ANSI31"
					 "1" ;;; масштаб штриховки
					 "0" ;;; угол штриховки
					 "В"
					(entlast)
					 "" ""
			)
)


(defun C:JPL ( / ope ssnab )
	(setq ope (getvar "PEDITACCEPT"))
	(setvar "PEDITACCEPT" 1)
	(setq ssnab (ssget "_I"))
	(while (not ssnab)
		(setq ssnab (ssget))
	)
	(command "_pedit" "_Multiple" ssnab "" "_Join" 0 "")
	(setvar "PEDITACCEPT" ope)
	(setq ssnab nil)
	(princ)
)

(princ "C:PL-CONTOUR")
(princ)
Не слишком углублялся в обработку ошибок, всяческие проверки и прочие красивости. Промах, выбор не того объекта, и прочие отступления от нужных действий приведут к вылету программы.
И этот код только для одной полилинии. Алгоритм обработки совместно (не по очереди, а именно совместно) сразу нескольких полилиний пока слабо себе представляю, хотя еще почти не думал над этим вопросом. Как из пересекающихся замкнутых полилиний вычленить общий контур, может знает кто-нибудь?
P.S.: Запустится только в русской версии. Лень уже выискивать английские опции для команды _-HATCH.
skkkk на форуме вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 26.07.2016, 14:21
#13
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Днепройт
Сообщений: 3,785


Цитата:
Сообщение от skkkk Посмотреть сообщение
Как из пересекающихся замкнутых полилиний вычленить общий контур, может знает кто-нибудь?
Totalboundary Пока автор не допилил Pro-версию, была еще бесплатная Lite-версия, ныне отовсюду выпилена. Могу поискать у себя, если осталась
__________________
Кому жизнь буги-вуги, а кому полный бред... (С)

Последний раз редактировалось kp+, 26.07.2016 в 14:36.
kp+ вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 24.12.2018, 13:10
#14
annt

программист
 
Регистрация: 24.06.2008
Москва
Сообщений: 37


Цитата:
Сообщение от kp+ Посмотреть сообщение
Totalboundary Пока автор не допилил Pro-версию, была еще бесплатная Lite-версия, ныне отовсюду выпилена. Могу поискать у себя, если осталась
Если осталась, не поделитесь?
annt вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 26.12.2018, 21:24
#15
АлексЮстасу

топограф, технолог
 
Регистрация: 24.05.2009
Москва
Сообщений: 2,661


Цитата:
Сообщение от annt Посмотреть сообщение
Если осталась, не поделитесь?
См. в Autodesk App Store.
__________________
количество моих сообщений не говорит о знании Автокада
АлексЮстасу вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Контур с штриховкой по полилинии (полилиниям)

РЕВЕРС. Автоматическая пакетная печать множества рамок (форматов) из пространства модели и листов
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
.NET Изобретаем велосипед, или как найти ближайшую вершину полилинии? La Persona .NET 14 05.12.2013 10:56
Нарисовать контур из полилинии Danunafik AutoCAD 6 17.10.2012 18:22
ищу функцию построения 3d полилинии mankurt Программирование 8 07.02.2012 12:43
VBA проблема со штриховкой замкнутой полилинии неправильной формы sergtranes Программирование 4 14.02.2011 19:28
Как получить контур полилинии с различной шириной Marina AutoCAD 5 26.12.2008 09:16

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||