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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > формулы в таблицах и dxf

формулы в таблицах и dxf

Ответ
Поиск в этой теме
Непрочитано 03.08.2007, 08:43 #1
формулы в таблицах и dxf
Ax3
 
Programming, automation, CADs, GISs. "Теплоком"
 
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 306

Здравствуйте.
Не могу понять, какие из dxf-кодов характеризуют ячейку таблицы, содержащую формулу.
Вот моя таблица (акад 2006):
[ATTACH]1186114850.JPG[/ATTACH]
Правая нижняя ячейка - формула
Код:
[Выделить все]
=20*sum(A2:A4)*cos(45)
А вот код этой таблицы:
Код:
[Выделить все]
Command: (entget (car (entsel)))

Select object: ((-1 . <Entity name: 7ef78e70>) (0 . "ACAD_TABLE") (330 . <Entity name: 7ef78cf8>) (5 . "96") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (370 . 50) (100 . "AcDbBlockReference") (2 . "*T1") (10 18.2931 33.8531 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) (100 . "AcDbTable") (342 . <Entity name: 7ef78e50>) (343 . <Entity name: 7ef78e78>) (11 1.0 0.0 0.0) (90 . 22) (91 . 5) (92 . 5) (93 . 0) (94 . 0) (95 . 0) (96 . 0) (141 . 0.453333) (141 . 0.36) (141 . 0.36) (141 . 0.36) (141 . 0.36) 
(142 . 2.5) (142 . 2.5) (142 . 2.5) (142 . 2.5) (142 . 2.5) - видимо, высоты строк
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 5) (176 . 1) (177 . 0) (178 . ) (145 . 0.0)  (1 . "Ñïåöèôèêàöèÿ") - видимо, слово "Спецификация"
(171 . 1) (172 . 0) (173 . 1) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "") - пустая, объединенная со "Спецификацией"
(171 . 1) (172 . 0) (173 . 1) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "") - пустая, объединенная со "Спецификацией"
(171 . 1) (172 . 0) (173 . 1) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "") - пустая, объединенная со "Спецификацией"
(171 . 1) (172 . 0) (173 . 1) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "") - пустая, объединенная со "Спецификацией"
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "1") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "5") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "9") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "13") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "17") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "2") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "6") (171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "10") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "14") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "18") (171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "3") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "7") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "11") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "15") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "19") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "4") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "8") (171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) 
(145 . 0.0) 
(1 . "12") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(1 . "16") 
(171 . 1) (172 . 0) (173 . 0) (174 . 0) (175 . 1) (176 . 1) (177 . 0) (178 . 0) (145 . 0.0) 
(344 . <Entity name: 7ef78f30>))
Так вот - никак не могу обнаружить, где ж там моя формула?
Подскажите, плз!
Просмотров: 3600
 
Непрочитано 03.08.2007, 09:07
#2
Кулик Алексей aka kpblc
Moderator

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


Есть одно правило (я его для себя сам вывел, так что в прыжках прошу ногами по голове не охаживать): все объекты, появившиеся начиная с 2005 версии, лучше обрабатывать как vla-представления. Исключений очень мало.
P.S. dwg приложи, если не жалко - расковыряем
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.08.2007, 09:09
#3
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Пожалуй, я тоже к такому выводу прихожу.
[ATTACH]1186117761.dwg[/ATTACH]
Ax3 на форуме  
 
Непрочитано 03.08.2007, 09:39
#4
Кулик Алексей aka kpblc
Moderator

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


Чего-то у меня с утра не соображается. Значение текста я получил, а вот формулу никак не получается.
Код:
[Выделить все]
_$ (setq tbl (vlax-ename->vla-object (car (entsel))))
#<VLA-OBJECT IAcadTable2 0f5f61e4>
_$ (vla-gettext tbl (1- (vla-get-rows tbl)) (1- (vla-get-columns tbl)))
"84.852814"
_$ (vla-getfieldid tbl (1- (vla-get-rows tbl)) (1- (vla-get-columns tbl)))
2130181936
А дальше ступор:
Код:
[Выделить все]
_$ (vlax-dump-Object (vla-objectidtoobject (vla-get-activedocument (vlax-get-acad-object)) (vla-getfieldid tbl (1- (vla-get-rows tbl)) (1- (vla-get-columns tbl)))) t)
; IAcadObject: Стандартный интерфейс для базовых объектов AutoCAD.
; Значения свойств:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00c2eb8c>
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0f5da974>
;   Handle (RO) = "116E"
;   HasExtensionDictionary (RO) = -1
;   ObjectID (RO) = 2130181936
;   ObjectName (RO) = "AcDbField"
;   OwnerID (RO) = 2130383144
; Поддерживаемые методы:
;   Delete ()
;   GetExtensionDictionary ()
;   GetXData (3)
;   SetXData (2)
И все Интересно, где я "не туда" повернул?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.08.2007, 10:43
#5
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


С простым мтекстом, содержащим поле формулы, прокатила такая вещь:
Код:
[Выделить все]
(vla-fieldcode (vlax-ename->vla-object (car (entsel))))

Select object: "%<\\AcExpr (20*cos(45)) \\f \"%lu2\">%"
Как вот теперь из таблицы получить объект "Текст" или "Мтекст", который требуется для функции vla-fieldcode?
Ax3 на форуме  
 
Непрочитано 03.08.2007, 11:01
#6
Кулик Алексей aka kpblc
Moderator

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


Может, HitTest поможет? Хотя лично я не знаю - а смысл какой? Тебе надо что в результате получить?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 03.08.2007, 11:03
#7
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Мне нужно просто заполнить те ячейки таблички, в которых нет формул. Так что, наверно, fieldid'ом можно ограничиться. Вообще еще хотелось формулу получить, но пожалуй, уже не надо.
Ax3 на форуме  
 
Непрочитано 03.08.2007, 11:18
#8
Кулик Алексей aka kpblc
Moderator

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


Только учти, что fieldid возвращает не 0 только если внутри ячейки поле, насколько я понял. За компанию еще проверяй и vla-gettext, а то заколотишь "не туда"
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.08.2007, 12:08
#9
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Цитата:
Сообщение от Ax3
Мне нужно просто заполнить те ячейки таблички, в которых нет формул. Так что, наверно, fieldid'ом можно ограничиться. Вообще еще хотелось формулу получить, но пожалуй, уже не надо.
Тогда вообще не парься и заполняй все (1 . "") для (entget (car (entsel))) - не ошибёшся!

А получить формулу через dxf можно так
Код:
[Выделить все]
(and (setq ename-acad_table (car (entsel)))
     (setq ename-fild1 (cdr (assoc 344 (entget ename-acad_table))))
     (setq ename-fild2 (cdr (assoc 360 (entget ename-fild1))))
     (setq fild_text (cdr (assoc 301 (entget ename-fild2))))
     (setq fild_AcExpr (cdr (assoc 2 (entget ename-fild2))))
     ) ;_ end and
Евгений А. вне форума  
 
Автор темы   Непрочитано 03.08.2007, 12:34
#10
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


Во как! Респект, Евгений А., благодарю. То-то меня смутил в конце листинга код 344... :-)
Ax3 на форуме  
 
Непрочитано 03.08.2007, 12:48
#11
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


Ну так метод тыка пока не отменили!
А через ActiveX к этим данным вроде нет доступа (пока по крайней мере пока), как нет доступа к геометрии тел, поэтому и спасает DXF (хотя я его очень не люблю... )
Евгений А. вне форума  
 
Непрочитано 04.09.2007, 17:52
#12
Glyuk


 
Регистрация: 02.02.2006
г.Уфа
Сообщений: 25


Добрый вечер!
возник вопрос следующего характера (ответ есть на форуме, читал когда то, но поиском не нашел):
как создать "вслывающие" ячейки в Эксель с возможностью выбора.. я так понимаю это связано со сводными таблицами.. подскажите пожалуйста
Glyuk вне форума  
 
Непрочитано 04.09.2007, 23:13
#13
fixo

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


Если я правильно понял тебе нужен
раскрывающийся список, а не сводная
таблица

Код:
[Выделить все]
Option Explicit

Sub DropDownList()

Dim rng As Range
Set rng = Application.InputBox _
(prompt:="Выделить диапазон для создания" & vbNewLine & _
" раскрывающегося списка:", Title:="Создать список", Type:=8)
ActiveSheet.ListObjects.Add(xlSrcRange, rng, , xlNo).Name = _
        "Список №1"
rng.Select

End Sub
~'J'~
fixo вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > формулы в таблицах и dxf