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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Замена отрезка на два новых конкретной длины/цвета

Замена отрезка на два новых конкретной длины/цвета

Ответ
Поиск в этой теме
Непрочитано 11.01.2021, 16:49 #1
Замена отрезка на два новых конкретной длины/цвета
mfun66
 
Регистрация: 11.01.2021
Сообщений: 3

Доброго времени суток! Прошу помощи в написании макроса, который бы заменял выделенный отрезок на два отрезка из краев исходного (то есть, условно говоря, вырезав его среднюю часть). Длина получившихся отрезков должна быть конкретно задана (12.36 мм, например), их цвет должен быть, например, желтым (255, 255, 0)
Заранее всех благодарю за помощь
Просмотров: 987
 
Непрочитано 11.01.2021, 17:00
#2
Кулик Алексей aka kpblc
Moderator

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


Где свой код? На каком языке пишешь?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.01.2021, 17:39
#3
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 1,062


Обязательно нужен код? А если проще, без кода, вставкой динблока?
AlexCondor на форуме  
 
Автор темы   Непрочитано 12.01.2021, 09:15
#4
mfun66


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Где свой код? На каком языке пишешь?
К сожалению, до этого момента не работал с такого рода задачами, поэтому начинаю, условно, с нуля. Буду рад хотя бы направлению, где искать, какие мануалы/гайды почитать, возможно есть примеры со схожим функционалом.

Цитата:
Сообщение от AlexCondor Посмотреть сообщение
Обязательно нужен код? А если проще, без кода, вставкой динблока?
Не обязательно код, чем проще, тем даже лучше, просто опыта в вопросе нет, а задачу решить нужно.
mfun66 вне форума  
 
Автор темы   Непрочитано 12.01.2021, 23:44
#5
mfun66


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


В общем пособирав по крупицам по форумам и чутка допилив получил вот что. Но бывает, почему-то, что макрос не срабатывает. Есть предположения?
Кроме того, хотелось бы вставляемые блоки (grav2.dwg) получать расчлененными, как-то можно их расчленить в ходе выполнения этого макроса? Либо как-то вставлять уже расчлененными?

Код:
[Выделить все]
Public Sub gr()
Dim oSset As AcadSelectionSet
Dim oEnt As AcadEntity
Dim angle, angleRev As Double
  Dim varStart As Variant
  Dim varEnd As Variant
Const PI = 3.14159265358979


On Error Resume Next
Set oSset = ThisDrawing.SelectionSets.Item("$Attribs$")
If Err Then
Err.Clear
Set oSset = ThisDrawing.SelectionSets.Add("$Attribs$")
End If

On Error GoTo Err_Control
oSset.Clear

oSset.SelectOnScreen
For Each oEnt In oSset
    
    ' отрезок
    If oEnt.ObjectName = "AcDbLine" Then
        
        ' конечные точки
        varStart = oEnt.StartPoint
        varEnd = oEnt.EndPoint
                      
        ' углы
        angle = ThisDrawing.Utility.AngleFromXAxis(varStart, varEnd)
        angleRev = ThisDrawing.Utility.AngleFromXAxis(varStart, varEnd) - PI
        
               
        ThisDrawing.ModelSpace.InsertBlock varStart, "C:\Users\Maxim\Desktop\grav2.dwg", 1, 1, 1, angle
        ThisDrawing.ModelSpace.InsertBlock varEnd, "C:\Users\Maxim\Desktop\grav2.dwg", 1, 1, 1, angleRev
        ThisDrawing.SelectionSets.Item("$Attribs$").Erase
      
        
        
    End If
Next oEnt
Err_Control:
End Sub
Вложения
Тип файла: dwg grav2.dwg (30.7 Кб, 3 просмотров)
mfun66 вне форума  
 
Непрочитано 13.01.2021, 07:39
#6
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,370


Я не проверял, но вроде как то так:
Код:
[Выделить все]
         Dim br1 As AcadBlockReference
        Set br1 = ThisDrawing.ModelSpace.InsertBlock(varStart, "C:\Users\Maxim\Desktop\grav2.dwg", 1, 1, 1, angle)
        br1.Explode
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 13.01.2021, 07:58
#7
trir


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


и сразу переобулся в воздухе - речь была про отрезки, а в коде блоки...

Последний раз редактировалось trir, 13.01.2021 в 08:20.
trir вне форума  
 
Непрочитано 13.01.2021, 08:33
#8
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,370


Ну видимо какие примеры удалось найти, такими и воспользовался, там же видно, что код собран из кусков... да и проще это, не нужно математику вспоминать, хотя если все таки сделать над собой усилие и вспомнить, что такое вектор и как с ними работать, то все станет намного проще и блоки не понадобятся, но это потом.
__________________
_бложиг
Boxa вне форума  
 
Непрочитано 13.01.2021, 09:56
1 | #9
koMon


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


на лиспе

Код:
[Выделить все]
 
;*************************************************************************************************

(vl-load-com)

;*************************************************************************************************

(defun c:split_line (/ filter_list group_code_array group_value_array array_index color_object
					   Line_Collection both_sides_remainder_length every_line_duplicate
					)
	(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
	(setq filter_list '((0 . "line"))
		  group_code_array (vlax-make-safearray vlax-vbinteger (cons 0 (1- (length filter_list))))
		  group_value_array (vlax-make-safearray vlax-vbvariant (cons 0 (1- (length filter_list))))
		  array_index 0
		  color_object (vlax-create-object (strcat "AutoCAD.AcCmColor." (substr (getvar 'acadver) 1 2)))
	)
	(vla-setrgb color_object 255 255 0)			;	устанавливаем RGB цвет для назначения полученным отрезкам
	(if (null (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) "Line_Collection"))))
			(vla-delete (vla-item (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) "Line_Collection"))
	)
	(repeat (length filter_list)
		(vlax-safearray-put-element group_code_array array_index (car (nth array_index filter_list)))
		(vlax-safearray-put-element group_value_array array_index (cdr (nth array_index filter_list)))
		(setq array_index (1+ array_index))
	)
	(setq Line_Collection (vla-add (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) "Line_Collection"))
	(if (null (setq both_sides_remainder_length (getreal "\Длина остатка отрезка от начала и конца: [12.36] <12.36>"))) (setq both_sides_remainder_length 12.36))
	(vla-selectonscreen Line_Collection group_code_array group_value_array)
	(vlax-for every_line Line_Collection
		(if (< both_sides_remainder_length (* 0.5 (vla-get-length every_line)))
			(progn
				(vla-put-colormethod (vla-get-truecolor every_line) accolormethodbyrgb)
				(vla-put-truecolor every_line color_object)
				(setq every_line_duplicate (vla-copy every_line))
				(vla-put-startpoint every_line_duplicate (vla-get-endpoint every_line))
				(vla-put-endpoint every_line_duplicate (vla-get-startpoint every_line))
				(foreach _line (list every_line every_line_duplicate)
					(vla-put-endpoint _line (vlax-3d-point (polar (vlax-get _line 'startpoint)
																  (angle (vlax-get _line 'startpoint) (vlax-get _line 'endpoint))
																  both_sides_remainder_length
														   )
											)
					)
				)
			)
		)
	)
	(vla-delete (vla-item (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))) "Line_Collection"))
	(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
	(princ)
)

;*************************************************************************************************
Вложения
Тип файла: lsp Split_Line.lsp (2.9 Кб, 2 просмотров)

Последний раз редактировалось koMon, 13.01.2021 в 16:40.
koMon вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Замена отрезка на два новых конкретной длины/цвета

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Замена текстового стиля VVA Готовые программы 280 19.01.2021 14:28
Является ли замена плит покрытия капремонтом или реконструкцией sergkuz Прочее. Архитектура и строительство 44 07.04.2017 18:29
Замена отрезка на блок с учетом поворота gizmo_zx Программирование 2 13.05.2016 14:50
Помогите дополнить макрос простановки уклона MrBrown Программирование 2 14.04.2015 13:50
Длина отрезка в новых Автокадах ALM AutoCAD 7 29.11.2013 12:43