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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Запретить блоку в ячейке таблицы менять цвет

Запретить блоку в ячейке таблицы менять цвет

Ответ
Поиск в этой теме
Непрочитано 13.08.2021, 03:59 #1
Запретить блоку в ячейке таблицы менять цвет
Tonic
 
Воронеж
Регистрация: 26.06.2007
Сообщений: 151

Всем привет!
У меня случилась проблема, которую я никак не могу решить.
Я вставляю блоки в ячейки таблицы так:
  • вставляю блок на чертёж (vla-InsertBlock)
  • меняю этому вхождению блока цвет (на "По слою") (vla-put-Layer)
  • вставляю этот блок в таблицу
  • удаляю этот временный блок с чертежа (в таблице он остаётся с нужным цветом)
Потом в процессе работы с чертежом я вставляю новые вхождения этого блока командой
Код:
[Выделить все]
 (vl-cmdf "_-insert" (strcat block_name "=" block_file_name) ...)
где block_file_name — это имя DWG блока (чтобы на чертеже в случае чего обновились все старые вхождения блока).

Но вот, в чём проблема: для динамических блоков внутри ячеек таблицы сразу после этой команды сбрасывается цвет. У обычных блоков — нет. Блокировка ячеек не помогает.
Что можно придумать?
Просмотров: 2604
 
Непрочитано 13.08.2021, 08:11
#2
Кулик Алексей aka kpblc
Moderator

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


Может, проще перед вставкой в таблицу менять системные переменные, а потом их восстанавливать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2021, 15:19
#3
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Конечно, проще. Но какие системные переменные здесь помогут?
Tonic вне форума  
 
Непрочитано 13.08.2021, 15:50
#4
Кулик Алексей aka kpblc
Moderator

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


clayer, cecolor, celweight, celtype...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2021, 17:48
#5
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


К сожалению, эти переменные никак не повлияли на "обнуление" цвета блока внутри ячейки. Он (цвет) сбрасывается, ещё когда вставляемый на чертёж аналогичный блок висит на курсоре.
Tonic вне форума  
 
Непрочитано 13.08.2021, 20:13
#6
Кулик Алексей aka kpblc
Moderator

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


Ок, что значит "сбрасывается"? Также не помешает образец dwg. И код.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 14.08.2021, 21:07
#7
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Удалось локализовать проблему с минимумом действий и почти без кода.
Во вложении — файл DWG.dwg, содержащий только один блок (в слое "1", с красным цветом "По слою") и таблицу, в ячейку которой вставлен этот же блок (тоже красного цвета). Всё, что нужно сделать — это вставить ещё раз этот блок на чертёж командой (файл с блоком положить в корень диска D):
Код:
[Выделить все]
 (vl-catch-all-apply 'vl-cmdf (list "_-insert" (strcat "PPK=" (findfile "D:\\PPK.dwg")) "_PX" 1 "_PY" 1 pause 1 1 ""))
Сразу же (ещё когда блок висит на курсоре) цвет блока в таблице изменится на белый (то есть, видимо, его слой станет таким же, как слой таблицы — "0"). От выставления предварительно слоя или цвета в AutoCAD результат не меняется.
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_1.png
Просмотров: 8
Размер:	3.1 Кб
ID:	239758  Нажмите на изображение для увеличения
Название: Screenshot_2.png
Просмотров: 8
Размер:	3.8 Кб
ID:	239759  
Вложения
Тип файла: dwg
DWG 2010
DWG.dwg (38.0 Кб, 5 просмотров)
Тип файла: dwg
DWG 2010
PPK.dwg (59.9 Кб, 4 просмотров)
Tonic вне форума  
 
Непрочитано 15.08.2021, 19:38
#8
Кулик Алексей aka kpblc
Moderator

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


Первое, что приходит в голову - это создавать отдельное определение анонимного блока, в который выполнять копирование всех видимых примитивов "исходного". В таблицу вставлять уже новый анонимный блок. Второе - почитать "САПР на базе AutoCAD" - там есть вариант вставки блока "на курсоре".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.08.2021, 01:54
#9
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Спасибо. Я нашёл и адаптировал код Ли Мака для переименования блока (чтобы вставить его в таблицу с другим именем), но появилась другая проблема: в блоках размещена маскировка, и в некоторых версиях Автокада при "пересоздании" блока нарушается порядок отображения элементов внутри него, в результате чего маскировка внутри блока оказывается поверх остальных его элементов. Кто-то описывал такую же проблему: https://forums.autodesk.com/t5/autoc...g/td-p/2280305
Tonic вне форума  
 
Непрочитано 16.08.2021, 09:49
1 | 1 #10
Кулик Алексей aka kpblc
Moderator

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


Как варианты:
1. https://autolisp.ru/2013/09/18/draworder-inside-blocks/
2. https://autolisp.ru/2011/12/16/draworder/
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 16.08.2021, 10:35
1 | 1 #11
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,991


3. https://www.cadtutor.net/forum/topic...-blocks-issue/
Nike вне форума  
 
Автор темы   Непрочитано 16.08.2021, 16:25
#12
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 151


Спасибо всем за участие!
Проблему решил функцией Ли Мака из последней ссылки. Теперь, правда, на чертеже будут множиться лишние блоки, но зато проблема решилась.
Tonic вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Запретить блоку в ячейке таблицы менять цвет

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В ячейке одной таблицы есть текст, как сделать чтоб этот текст отображался в ячейки другой таблицы? Basily AutoCAD 2 05.02.2017 16:46
Помогите с интересной проблемой о тексте в ячейке таблицы reime AutoCAD 15 22.09.2016 19:10
вставка таблицы из MS Excell baaba Готовые программы 23 11.03.2014 19:47
Lisp. Изменение отступа в ячейке таблицы orexxx LISP 1 28.08.2012 12:02
Как привязать изменение видимости слоя к значению в ячейке таблицы? 4ertilka Программирование 3 16.07.2009 14:53