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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Есть ли альтернатива _REFEDIT через ActiveX?

Есть ли альтернатива _REFEDIT через ActiveX?

Ответ
Поиск в этой теме
Непрочитано 22.07.2004, 14:54 #1
Есть ли альтернатива _REFEDIT через ActiveX?
{Smirnoff}
 
Инженер по системам безопасности
 
Рига
Регистрация: 23.11.2003
Сообщений: 1,099

Подскажите возможно ли реализовать изменения свойств примитивов содержащихся в блоке через ActiveX? Методы Add...... я там вижу. А как добраться до свойств объектов?
Попробовал получить свойство :

(setq db(vla-get-XRefDatabase(vlax-ename->vla-object(car(entsel)))))
Пишет: ; error: ActiveX Server returned the error: unknown name:
XRefDatabase
Просмотров: 4281
 
Автор темы   Непрочитано 22.07.2004, 15:47
#2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Sorry! Конечно это свойство не годится для объекта blockRef. Надо извлекать из коллекции соответствующие блоки. Сейчас попробую. Но тема не снята, кто знает все сразу, просьба написать.
{Smirnoff} вне форума  
 
Непрочитано 22.07.2004, 20:20
#3
Лентяй


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


Я бы пошел (vlax-for (vla-get-blocks) (if [or cond] (...) (progn (...))));vlax-for, либо через (vla-item (vla-get-bloks)).
 
 
Автор темы   Непрочитано 22.07.2004, 21:35
#4
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Лентяй
Это само сабой разумеется. А как дальше действовать. Задача не добраться до коллекции блоков, а до свойств примитивов соствляющих блоки. Честно говоря ничего на попробовал потому что увлекся другой задачей. Можно конечно и _explode любого блока с нужным именем потом собственно изменнение свойств примитивов и переопределение, но хочется один раз написать красивую функцию без COMMAND. Где она база данных блока?
Тем более что при "взрыве" надо учитывать еще по крайней мере Scale по всем осям, иначе после переопределения будут наприятные последствия.
Все вроде решается через _REFEDIT с некоторыми заморочками на уровень вложенносити. Однако хочется красиво.
{Smirnoff} вне форума  
 
Непрочитано 22.07.2004, 22:56
#5
vk

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


Без ActiveX все просто. Допустим, у тебя в чертеже имеется блок с именем "123". Тогда
Код:
[Выделить все]
(setq tbl (tblobjname "block" "123")) ; ищем начало определения блока
(setq enext (entnext tbl)) ; это первый элемент блока
(setq dat (entget enext)) 
(entmod (subst (cons 62 5) (assoc 62 dat) dat)) ; вот и поменяли цвет примитива

; ну и для полноты эффекта делаем
(command "_.regenall") ; чтоб отобразились изменения на экране
Дальше, надеюсь, разберешся. Не забудь делать проверочку типа примитива! Примитив ENDBLK - завершает описание блока.
vk вне форума  
 
Непрочитано 22.07.2004, 23:59
#6
vk

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


С ActiveX - тот же блок, но для простоты примера, чуть иначе:
Код:
[Выделить все]
(setq blcks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))) ;_ в коллекции блоков чертежа
(setq b123 (vla-item blcks "123")) ;_ находим блок с именем "123"

(vlax-for i b123
  (vla-put-color i 6) ;_ меняем цвет каждого примитива блока
)

;;; ну и для полноты эффекта делаем
<возможны варианты>
vk вне форума  
 
Автор темы   Непрочитано 23.07.2004, 00:44
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>VK

Я пьян и немогу программирвать. И все это замечательно, мир прекрасен.
Цитата:
Код:
[Выделить все]
(vlax-for i b123 
  (vla-put-color i 6) ;_ меняем цвет каждого примитива блока 
)
А как изменить свойсво НУЖНОГО примитива, входящего в состав блока (через AX)?

Впрочем возможно я просто сейчас недопоминаю. Ну и ладно... Накрылся мой летний отпуск... Коллега увольняется только я могу заменить... Пойду еще... Может опоздать на работу? Это дело у нас около 50$ cтоит. Нас%&ть....
{Smirnoff} вне форума  
 
Непрочитано 23.07.2004, 01:18
#8
vk

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


>Fantomas
Цитата:
Честно говоря ничего на попробовал потому что увлекся другой задачей.
Понятно теперь, какой Надеюсь, твой босс не читает этот форум :wink: Доберусь до дому - тож приляпаю [sm700]
Цитата:
А как изменить свойсво НУЖНОГО примитива
Да кто ж знает, который примитив в блоке тебе нужОн то...
Код:
[Выделить все]
(vla-put-color (vla-item b123 0) 6) ;_ поменяли цвет первого
Или метка у примитива есть какая (слой какой то особенный или цвет или тип линии....) тогда в цикле vlax-for в предыдущем постинге ищи примитив с той меткой и.... действуй
vk вне форума  
 
Непрочитано 23.07.2004, 07:11
#9
ShaggyDoc


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


На

http://www.kurganobl.ru/cad/book.jsp...nt=129&tn=main

есть примеры создания блоков объектными методами. В том числе из блока-обрзца. Изменение отдельных свойств отдельных примитивов - частный случай. Как менять свойства - есть в примерах.

Но! Есть глюки у AutoCAD, (разные у разных версий) связанные с неоднозначным помещением образовавшихся при расчленении объектов относительно точки вставки блока. Так что тщательнЕе...
 
 
Непрочитано 23.07.2004, 10:19
#10
Лентяй


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


Цитата:
Да кто ж знает, который примитив в блоке тебе нужОн то...

Ну, вы, VK. блин, даете! Я думал, я лентяй. а вы, оказывается еще лентяестее. А поискать? По тэгу:
Код:
[Выделить все]
(vlax-for bk (vla-get-blocks adoc)
  (if ( = (vla-getHasattributes bk) :vlax-vbTrue)
     (vlax-for ent bk
        (if (= (vla-get-tagString ent) "XXX")
           (progn () ))0)
По значению: см. выше, только
Код:
[Выделить все]
 (if ( = (vla-get-textString at) "YYY")
По цвету: сами догадаетесь, не маленький, чай. Лениться меньше надо... [/quote]
 
 
Автор темы   Непрочитано 23.07.2004, 11:04
#11
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>VK Спасибо, теперь понятно.

>Лентяй А причем тут тег? Речь не шла об атрибутах блоков. С ними как раз все просто.

>ShaggyDoc Ваши бибиотеки хорошее пособие по программированию.

Всем спасибо разобрался.
{Smirnoff} вне форума  
 
Непрочитано 23.07.2004, 13:30
#12
vk

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


>Лентяй
Не спорю, лентяй еще тот... А то не стал бы программирование изучать, если б все сам делал...
Однако, пальма первенства по лени все таки у Вас [sm2700]
Лень было дочитать до конца мой постинг, где предложены разные варианты :roll:
vk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Есть ли альтернатива _REFEDIT через ActiveX?

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

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