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

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

Работа с примитивами внутри блока.

Ответ
Поиск в этой теме
Непрочитано 07.06.2006, 09:02 #1
Работа с примитивами внутри блока.
Toy
 
студент
 
Регистрация: 07.06.2006
Сообщений: 3

Задача: написать на автолиспе программу, которая бы изменяла цвет всех полилиний нулевой толщины внутри блока.
блок создаю Draw->Block->Make, т е сам блок программно создавать не надо. для начала решено было написать программу, которая бы меняла цвет всех полилиний в блоке.
ниже мой неработающий код() - не хочет перерисовываться блок, хотя если посмотреть списки данных примитивов , то автокад показывает , что все норм , изменения внесены.
(defun C:change_blok ()
(setq blok (tblnext "block" T))
(setq blok_name (tblobjname "block" (cdr (assoc 2 blok))))
(setq blok_data (entget blok_name))
(setq primitive_name (cdr(assoc -2 blok_data)))
(while (/= primitive_name nil)
(setq spisok (entget primitive_name))
(if (= (cdr (assoc 0 spisok)) "LWPOLYLINE")
(progn
(setq new_e (cons 62 67))
(setq old_e (assoc 62 spisok) )
(setq spisok (subst new_e old_e spisok) )
(setq spisok (append spisok (list(cons 62 67))))
(entmod spisok)
(entupd primitive_name)
)
)
(setq primitive_name (entnext primitive_name))
)
)
что здесь не так?
p.s. причем если сделаю на блоке Edit block in-place то все внесенные мной изменения применяются.
Просмотров: 7768
 
Непрочитано 07.06.2006, 09:20
#2
Кулик Алексей aka kpblc
Moderator

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


А тебе обязательно через (entmode) идти? По-моему, через vla-функции можно чутка попроще
Код:
[Выделить все]
(defun c:chblock (/ adoc)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (vlax-for block (vla-get-blocks adoc)
    (if	(not (wcmatch (strcase (vla-get-name block) t) "*_space*"))
      (vlax-for	ent (vla-item (vla-get-blocks adoc) (vla-get-name block))
	(if (= (vla-get-objectname ent) "AcDbPolyline")
	  (vla-put-color ent 67)
	  ) ;_ end of if
	) ;_ end of vlax-for
      ) ;_ end of if
    ) ;_ end of vlax-for
  (vla-endundomark adoc)
  (princ)
  ) ;_ end of defun
Работу не проверял, сорри.
---
Добавлено:
Хотя... Попробуй дополнительно сделать (entupd) для блока.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2006, 09:25
#3
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Гы-ы-ы, kpblc стал на чистом ActiveX писать! Не иначе, влияние 06.06.06.
Лентяй вне форума  
 
Непрочитано 07.06.2006, 09:34
#4
Кулик Алексей aka kpblc
Moderator

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


Это тут без selectionset'a обошлось. Был бы он, я б старые методы исполдьзвал
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.06.2006, 09:53
#5
Toy

студент
 
Регистрация: 07.06.2006
Сообщений: 3


2kpbIc: да обязательно. желание препода - закон
Toy вне форума  
 
Непрочитано 07.06.2006, 09:58
#6
Кулик Алексей aka kpblc
Moderator

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


Так а (entupd) провернутый и на примитив внутри блока, и на блок собственно срабатывает? Я сильно подозреваю, что и этого может оказаться мало - регенерация чертежа не выполняется же автоматически?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2006, 10:05
#7
ssn

Инженер проектировщик (раздел ТМ - фриланс)
 
Регистрация: 06.12.2003
Геленджик
Сообщений: 1,794
Отправить сообщение для ssn с помощью Skype™


понимаю, вопрос не совсем в тему, но раз уж зашла речь про переопределение блоков....
Если изменять толщины, цвета и прочее для линий, входящих в блок, то при переопределении блока по всему чертежу в этих, переопределённых блоках, происходят изменения. Но вчера столкнулся с такой бедой - необходимо было изменить цвет атрибута, входящего в блок. Цвет атрибута изменил, блок переопределил, но изменения на созданные раннее блоки не распространились. Если вставляешь новый переопределённый блок - цвет атрибута как надо. в чём дело?
ssn вне форума  
 
Непрочитано 07.06.2006, 10:27
#8
Кулик Алексей aka kpblc
Moderator

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


По-моему, дело в том, что примитивам "атрибут" в каждой конкретной вставке блока можно тьму всего понавесить. Соответственно его и менять надо. Либо собственный вариант писать, либо испльзовать _attsync либ _battman - по вкусу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.06.2006, 10:27
#9
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,186
<phrase 1=


ssn
атрибуты - отдельная песня. Они в каждой вставке блока могут иметь свои свойства, а чтобы свойства атрибута вставки стали аналогичны свойствам атрибута самого блока надо выполнить синхронизацию, коя делается командой attsync из express tools.
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 07.06.2006, 10:32
#10
Кулик Алексей aka kpblc
Moderator

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


> Apelsinov: Разница в ответе, по-моему, секунд 5, не больше
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.06.2006, 10:35
#11
Toy

студент
 
Регистрация: 07.06.2006
Сообщений: 3


2kpbIc: на счет блока не знаю, но мне говорили, что реген, он как раз автоматически врубает(entupd). ну я вообще понял так, получили доступ к примитиву внутри блока - изменили его - сделали entmod списка данных примитива - перерисовали entupd.
Toy вне форума  
 
Непрочитано 12.04.2007, 14:46
#12
G.A.W.

работник по монтажу, то посижу, то полежу!!!
 
Регистрация: 24.01.2007
г.Владимир
Сообщений: 348
<phrase 1=


Такой вопрос.
Есть куча блоков. Требуется изменить во всех блоках размерный стиль, в частности в размерном стиле поменять цвет текста. У блоков есно разные имена. Возможно?
G.A.W. вне форума  
 
Непрочитано 12.04.2007, 14:55
#13
Кулик Алексей aka kpblc
Moderator

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


:?: Ну ни себе чего задачка... Приложи исходник и чего хочешь. Потому как я сильно подозреваю, что там в постановке чего-то напутано...
---
Добавлено:
Я не очень долнал - надо создать новый размерный стиль, потом его назначать куда ни попадя, так?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2007, 15:09
#14
G.A.W.

работник по монтажу, то посижу, то полежу!!!
 
Регистрация: 24.01.2007
г.Владимир
Сообщений: 348
<phrase 1=


Смотри, у меня был размерный стиль, в нем текст стоял зеленый (ну понял, да, не по слою, а зеленый, постояный), тут начали все всё менять и потребовался цвет текста синий. Я в размерном стиле это сделал, все что не в блоках поменялось (это естественно), а в блоках остался зеленый (это помойму тоже естественно). И вот, можно ли сразу во всех разноименных блоках изменить цвет текста в размерах, а не в каждом поотдельности (хотя для этого только стоит открыть блок и закрыть с сохранением, свойства автоматом цепляются). Вроде понятно :? Нехочу пример цеплять по разным причинам, но если надо :roll:
G.A.W. вне форума  
 
Непрочитано 12.04.2007, 15:15
#15
Кулик Алексей aka kpblc
Moderator

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


Попробуй сделать в стиле ByBlock цвет - они ж не зря там есть. А потом _regenall.
---
Добавлено: Или пример в почту мне пришли. Попробую чичас чего-нить наваять, хотя правильность работы гарантировать не могу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2007, 15:41
#16
Кулик Алексей aka kpblc
Moderator

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


Попробуй (писал код "насухую", поэтому может и не сработать).
Код:
[Выделить все]
(defun test ()
  (vl-load-com)
  (vlax-for spc
            (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
    (vla-update spc)
    (if (wcmatch (strcase (vla-get-name spc) t) "*space*")
      (vlax-for blk spc
        (if (= (vla-get-objectname blk) "AcDbBlockReference")
          (vla-update blk)
          ) ;_ end of if
        ) ;_ end of vlax-for
      ) ;_ end of if
    ) ;_ end of vlax-for
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2007, 15:53
#17
G.A.W.

работник по монтажу, то посижу, то полежу!!!
 
Регистрация: 24.01.2007
г.Владимир
Сообщений: 348
<phrase 1=


Говорит
Цитата:
; ошибка: ActiveX Server возвратил ошибку: неизвестное имя: Update
Я так понимаю вводить нужно (test) и чото там погнали :?:
G.A.W. вне форума  
 
Непрочитано 12.04.2007, 15:59
#18
Кулик Алексей aka kpblc
Moderator

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


Ага. Снеси первую строку (моя ошибка, сорри)
Код:
[Выделить все]
(vla-update spc)
- чего будет?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.04.2007, 16:19
#19
G.A.W.

работник по монтажу, то посижу, то полежу!!!
 
Регистрация: 24.01.2007
г.Владимир
Сообщений: 348
<phrase 1=


Если я сношу эту строку, то
Цитата:
; ошибка: no function definition: TEST
G.A.W. вне форума  
 
Непрочитано 12.04.2007, 16:30
#20
G.A.W.

работник по монтажу, то посижу, то полежу!!!
 
Регистрация: 24.01.2007
г.Владимир
Сообщений: 348
<phrase 1=


Чото я помойму не то сделал, Да? :?
G.A.W. вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Работа с примитивами внутри блока.

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

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