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

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

Как узнать номер ячейк табл Atable по коорд точки внутри нее

Ответ
Поиск в этой теме
Непрочитано 28.02.2007, 11:56 #1
Как узнать номер ячейк табл Atable по коорд точки внутри нее
kp+
 
идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095

Как программно узнать номер ячейки таблицы, созданной в Atable, по координатам точки, указанной мышью внутри ячейки?
Т. е., например, указана точка с координатами (10.258, 40.247). В результате узнаем, что она находится внутри ячейки D2 таблицы с handle'ом "1F"
Подскажите, PLS
Просмотров: 3522
 
Непрочитано 28.02.2007, 14:52
#2
Alxd

Нач. отдела САПР
 
Регистрация: 14.05.2004
Тюмень
Сообщений: 466
<phrase 1=


Хмм.... Даже такое надо?! Неплохой вопрос.

Насколько я помню, такое вычисление у меня в интерфейс программиста не вынесено. Остается обратиться к свойстве таблицы и считать параметры рядов и колонок. Затем циклом их перебрать в том же лиспе. Ессно координаты сместить на точку вставки самой таблицы в WCS. Ну, а где координата совпадет, там и ячейка...

У меня все это вычислено внутри .arx модуля. Не думал, что это потребуется программисту. Простите. В следующей версии поправлю.
Alxd вне форума  
 
Непрочитано 28.02.2007, 15:38
#3
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Цитата:
Сообщение от Alxd
Хмм.... Даже такое надо?! Неплохой вопрос.

Насколько я помню, такое вычисление у меня в интерфейс программиста не вынесено. Остается обратиться к свойстве таблицы и считать параметры рядов и колонок. Затем циклом их перебрать в том же лиспе. Ессно координаты сместить на точку вставки самой таблицы в WCS. Ну, а где координата совпадет, там и ячейка...

У меня все это вычислено внутри .arx модуля. Не думал, что это потребуется программисту. Простите. В следующей версии поправлю.
vla-hittest

~'J'~
fixo вне форума  
 
Непрочитано 28.02.2007, 16:07
#4
fixo

Lisp/VBA/VB.NET Hobbyist
 
Регистрация: 24.03.2005
Славен Град Петров
Сообщений: 367


Для примера

Код:
[Выделить все]
  (defun GetAddress
	 (/ acsp adoc atable col en ent pickpt return row)
    (vl-load-com)
    (if
      (and (setq ent (entsel "\n  >>  Select table >> \n"))
	   (eq "ACAD_TABLE"
	       (cdr (assoc 0
			   (entget
			     (setq en (car ent))
			   )
		    )
	       )
	   )
      )
       (progn

	 (setq atable (vlax-ename->vla-object (car ent))
	       pickpt (vlax-3d-point
			(trans
			  (getpoint
			    "\n  >>  Pick point inside of the desired cell  >>"
			  )
			  1
			  0
			)
		      )
	       return (vla-hittest
			atable
			pickpt
			(vlax-3D-Point '(0. 0. 1.))
			'row
			'col
		      )
	 )
       )
    )
    (list row col)
  )



;; TesT : 
(setq cr (GetAddress))
(princ cr)
~'J'~
fixo вне форума  
 
Автор темы   Непрочитано 28.02.2007, 16:52
#5
kp+

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


Цитата:
Сообщение от Alxd
Хмм.... Даже такое надо?! Неплохой вопрос... ...Не думал, что это потребуется программисту.
Может, Вас это удивит, но это первое, что понадобилось мне для программирования под Atable
Зачем, собственно, понадобилось: чтобы сделать маленькое окошко для быстрого редактирования отдельных ячеек (нужно при мелких правках достаточно большой таблицы). Сначала я хотел действовать "в лоб" - через nentsel и vla-get/put-textstring, но не тут-то было! Результат vla-put-textstring шел коту под хвост при открытии таблицы в редакторе Atable.

Цитата:
Насколько я помню, такое вычисление у меня в интерфейс программиста не вынесено.


Цитата:
Остается обратиться к свойстве таблицы и считать параметры рядов и колонок. Затем циклом их перебрать в том же лиспе. Ессно координаты сместить на точку вставки самой таблицы в WCS. Ну, а где координата совпадет, там и ячейка...
Придется... Просто я думал, что среди немалого количества свойств и методов Atable нужная фишка уже присутствует, и надо ее только найти.

Цитата:
У меня все это вычислено внутри .arx модуля. Простите. В следующей версии поправлю.
Если можно, PLS

>Fatty
Большое спасибо за код, думаю, он еще пригодится. Но для других задач, где будут использоватся стандартные таблицы Акада. К таблицам Atable (это фактически безымянные блоки) vla-hittest неприменим
kp+ вне форума  
 
Автор темы   Непрочитано 01.03.2007, 19:06
#6
kp+

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


ALXD, не могли бы Вы привести пару примеров использования объектной модели Atable в ЛИСП'е?
У меня пока что получилось только импортировать AlxdGrid.tlb. Имена свойств, методов и констант стали подсвечиватся.
Но воспользоваться ими не вышло.
Например:
Код:
[Выделить все]
_$ (setq a (vlax-ename->vla-object (car (entsel))));ВЫБОР ТАБЛИЦЫ ATABLE
#<VLA-OBJECT IAcadBlockReference2 0dca8f94>
_$ (vlax-get-property a 'atbp-get-Cells)
; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: atbp-get-Cells
_$ (vlax-invoke-method a 'atbp-get-Cells)
; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: atbp-get-Cells
Подскажите, PLS, что я не так делаю?

PS В приведенных исходниках add-on'ов все операции производятся при открытом окне редактора ATABLE (как я понял). Меня в первую очередь интересует использование средств объектной модели при закрытом редакторе
kp+ вне форума  
 
Непрочитано 02.03.2007, 11:10
#7
Alxd

Нач. отдела САПР
 
Регистрация: 14.05.2004
Тюмень
Сообщений: 466
<phrase 1=


А зачем импортировать библиотеку? Просто используй invoke-method, put/get-property!

Примерно так:
;get alxd atable object here
(setq atObject (vlax-get-object "AlxdGrid.AlxdApplication"))

;check value
(if (= atObject nil)
(progn
(alert (getlocal atableX2Glocal 30))
(exit)
)
)
; (vlax-dump-object atObject)

;get alxd atable spreadsheet here
(setq
atActiveSheet (vlax-get-property atObject 'AlxdEditor)
atActiveSheet (vlax-get-property atActiveSheet 'AlxdSpreadSheets)
wi (vlax-get-property atActiveSheet 'Active)
atActiveSheet (vlax-get-property atActiveSheet 'Items wi)
)

(if (= atActiveSheet nil)
(progn
(alert (getlocal atableX2Glocal 40))
(vlax-release-object atObject)
(exit)
)
)

; (vlax-dump-object atActiveSheet)

(setq
ssets (vlax-get-property atActiveSheet 'Selections)
wi (vlax-get-property ssets 'Count)
)

чуть не забыл. в конце не забывайте
(vlax-release-object ssets)
(vlax-release-object atActiveSheet)
(vlax-release-object atObject)
Alxd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как узнать номер ячейк табл Atable по коорд точки внутри нее

Размещение рекламы