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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выполнение функции vla-put-textstring в неактивном документе

Выполнение функции vla-put-textstring в неактивном документе

Ответ
Поиск в этой теме
Непрочитано 15.12.2003, 13:49 #1
Выполнение функции vla-put-textstring в неактивном документе
AVD
 
Сообщений: n/a

Задавал этот вопрос на другом форуме но ответа не получил, может тут кто поможет.

Исходный текст с выравниванием по центральной точке (оставлены только интересующие коды)

(0 . "TEXT")(10 333.0 95.0 0.0)(40 . 3.0)(1 . "aa")(50 . 0.0)(41 . 1.0)(51 . 0.0)(71 . 0)(72 . 1)(11 335.213 95.0 0.0)(73 . 0)

Если применить в открытом документе такую функцию

(vla-put-textstring (vlax-ename->vla-object (car(entsel))) "aaaaaaaa")

получаем примитив

(0 . "TEXT")(10 326.363 95.0 0.0)(40 . 3.0)(1 . "aaaaaaaa")(50 . 0.0)(41 . 1.0)(51 . 0.0)(71 . 0)(72 . 1)(11 335.213 95.0 0.0)(73 . 0)

в этом случае с кодами 10 и 11 всё в порядке, 10 принял новое значение т. к. новая строка длиннее старой.

Теперь запустим функцию (всё лишнее для понимания из функции убрано). Функция запускается из другого документа.

(setq acad_application (vlax-get-acad-object)
docs (vla-get-documents acad_application))
(setq doc (vla-open docs NameFile))
(setq ss (vla-get-selectionsets doc))
(setq sst (vla-add ss "sst"))
(setq filter_code (vlax-make-safearray vlax-vbinteger '(0 . 1)))
(vlax-safearray-fill filter_code '(0 1))
(setq filter_value (vlax-make-safearray vlax-vbvariant '(0 . 1)))
(vlax-safearray-fill filter_value (list "TEXT" "aa"))
(vla-select sst acSelectionSetAll nil nil filter_code filter_value)
(setq obj (vla-item sst 0))
(vla-put-textstring obj "aaaaaaaa")
(vla-save doc)(vla-close doc)

Открываю документ в котором были сделаны изменения и смотрю
строку текста которую меняли.

(0 . "TEXT")(10 333.0 95.0 0.0)(40 . 3.0)(1 . "aaaaaaaa")(50 . 0.0)(41 . 1.0)(51 . 0.0)(71 . 0)(72 . 1)(11 335.213 95.0 0.0)(73 . 0)

Код 10 остался без изменения.
Почему так происходит.
:shock:
Просмотров: 5720
 
Непрочитано 15.12.2003, 14:23
#2
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Не догоняю... Группа 1 тоже не изменилась?
vk вне форума  
 
Непрочитано 15.12.2003, 14:46
#3


 
Сообщений: n/a


Группа 1 в исходном тексте "аа" после vla-put- в обоих примерах - "aaaaaaaa"
 
 
Непрочитано 15.12.2003, 15:08
#4
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Не уверен, попробуй применить Update метод перед закрытием.
vk вне форума  
 
Непрочитано 15.12.2003, 15:13
#5


 
Сообщений: n/a


Применял. Не помогает.
 
 
Непрочитано 15.12.2003, 17:51
#6
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Попробуй
Код:
[Выделить все]
(vla-put-alignment vla:text acAlignmentCenter)
где vla:text - vla-указатель на объект-текст
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 16.12.2003, 07:51
#7


 
Сообщений: n/a


Выкрутиться конечно можно. Прочитать все нужные свойства, удалить старый текст и addText. Просто непонятно почему не идёт vla-put-textstring. Наверно проблема всётаки в том, что документ не активный.
 
 
Непрочитано 16.12.2003, 11:44
#8
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Цитата:
Прочитать все нужные свойства, удалить старый текст и addText.
На мой взгляд проще перейти в требуемый документ (сделать его активным функцией vla-activate), сделать там vla-put-textstring и вернуться назад. Хотя, как обычно, есть несколько путей решения задачи и каждый волен выбирать более ему подходящий.
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 16.12.2003, 12:46
#9


 
Сообщений: n/a


to cos. Мне кажется (почти уверен) если сделать документ активным то работа нашей лисп программы приостанавливается и закравать докум. придётся в ручную.
 
 
Непрочитано 16.12.2003, 13:42
#10
kos

LISP-программист
 
Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238


Беру свои слова обратно. Да, конечно, с пространствами имен документов возникнут непонятки. Это, конечно, обходимо, но в этом случае решение не будет таким простым.
__________________
Там все есть для счастья - меня там только нет.
Так это значит, что я там - буду!
kos вне форума  
 
Непрочитано 16.12.2003, 14:15
#11
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Можно создать скрипт (в том числе и программно) и запустить его. Нехай открывает нужный документ и делает там что надо.
vk вне форума  
 
Непрочитано 17.12.2003, 08:30
#12


 
Сообщений: n/a


Решил проблему путём вычисления точки InsertionPoint через textbox и далее vla-put-InsertionPoint. Для текста FIT вычисление нового scalefactor и vla-put-scalefactor. Для текста aligned вычисление новой высоты.
 
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Выполнение функции vla-put-textstring в неактивном документе

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

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