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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > как программно можно определить координату ручки динамического блока?

как программно можно определить координату ручки динамического блока?

Ответ
Поиск в этой теме
Непрочитано 28.11.2011, 00:37 #1
как программно можно определить координату ручки динамического блока?
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

Добрый день,подскажите можно ли программно определить координату на чертеже ручки динамического блока.например ручки отвечающей за размер dlina в данном чертеже?

Вложения
Тип файла: dwg
DWG 2007
111.dwg (653.4 Кб, 360 просмотров)

Просмотров: 2918
 
Непрочитано 28.11.2011, 10:06
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Ну если конкретно у этого блока (или ему подобных) то можно обойтись малой кровью - получить значение дин. свойства "Dlina" (vla-getdynamicblockproperties ....) взять точку вставки блока, масштаб по соответствующей оси , уголол поворота, преобразовать систему координат и вроде все. Либо очень глубоко "рыть" DXF.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.11.2011, 17:03
#3
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


сделал как Вы советовали, но есть один ньюанс ,если в динамическом блоке исходный параметр растягивается по оси Х то все нормально проходит, а если нет то неверно определяет точку.
на всякий случай выкладываю лисп ,моя цель поменять местами точку вставки блока и местоположение ручки Dlina
Код:
[Выделить все]
(defun c:Zod76 (  )
(setq 
ss1	nil
Dlina	nil
pt1	nil
pt2	nil
ang1	nil
)
(setq ss1(enametovla (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "INSERT"))))))))
(mapcar
	'(lambda (x)
		(progn
		(mapcar '(lambda(z)
					(if		(equal(vla-get-PropertyName z) "Dlina")		
							(setq Dlina(vlax-variant-value(vla-get-Value z)))
					)
				)
			(vlax-safearray->list(vlax-variant-value(vla-GetDynamicBlockProperties x)))
		)
		(setq pt1(vlax-safearray->list(vlax-variant-value(vla-get-InsertionPoint x))))
		(setq ang1 (vla-get-Rotation x))
		(setq pt2 (polar pt1 ang1 Dlina))
		(vla-put-InsertionPoint x (vlax-3d-point pt2))
		(vla-put-Rotation x(- ang1 pi))
		)
	)
ss1
)
)

(defun enametovla (lst); переводит список ename в vla-object или обратно.
(mapcar '(lambda (obj) (if (= (type obj) 'ename)
(vlax-ename->vla-object obj)
(if (= (type obj) 'vla-object) (vlax-vla-object->ename obj)))
)
lst)
)
Composter вне форума  
 
Непрочитано 30.11.2011, 18:52
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Не преобразовываешь вектор нормали - (trans...) и (vla-get-normal...)тебе в помощь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 30.11.2011, 19:07
#5
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


спасибо, но решил пойти другим путем, фактически получается мне нужно развернуть блок на 180 градусов относительно центральной точки.и я сделал вот так
Код:
[Выделить все]
 
;разворачивает блоки на 180 градусов
(defun c:Zod76 (/ ss1 pt1 pt2 pt3)
(setq ss1(enametovla (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "INSERT"))))))))
(mapcar
	'(lambda (x)
		(progn
		(vla-GetBoundingBox x 'pt1 'pt2)
		(setq pt3 (polar	(vlax-safearray->list pt1)
							(angle	(vlax-safearray->list pt1)(vlax-safearray->list pt2))
							(/(distance(vlax-safearray->list pt1)(vlax-safearray->list pt2))2)
					)
		)
		(vla-rotate x (vlax-3d-point pt3) pi)
		)
	)
ss1
)
)
Composter вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > как программно можно определить координату ручки динамического блока?

Реклама i


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли для конструкции, заданных плитными элементами определить момент в плоскости XOY? stumpel Расчетные программы 12 10.03.2009 10:51
Можно ли в скаде определить вес сборки? ascota SCAD 7 08.05.2008 04:08
Можно ли и как сохранить ручки при смене вида BM60 AutoCAD 13 06.03.2008 13:00
помогите определить, что за арматура в плите, и можно ли её резать (ФОТО) Дмитрий832 Железобетонные конструкции 58 28.12.2007 17:07
Вставка динамического блока с определёнными параметрами. Shade Динамические блоки 2 25.09.2007 15:20