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

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

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

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

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

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

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


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


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


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
С.-Петербург
Сообщений: 39,787


trir, уточняй, что твое предложение касается Map3D. Сразу уточняй. Или в подписи укажи, что используешь Civil/Map3D.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей 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,990
<phrase 1= Отправить сообщение для 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,990
<phrase 1= Отправить сообщение для 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,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


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


 
Регистрация: 20.03.2008
Сообщений: 2,653


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
Сообщений: 5,090


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

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

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


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

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


Цитата:
Сообщение от 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