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

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

Замена цвета блока или блока на блок

Ответ
Поиск в этой теме
Непрочитано 14.09.2009, 19:46 #1
Замена цвета блока или блока на блок
maximator
 
Регистрация: 14.09.2009
Сообщений: 13

Суть в чем,есть одинаковые блоки скажем 100,от1..100,нужно по значению из внешней прграммы заменять цвет блока ,или как вариант,блок на такой же но перекрашены,старожили прощу помощи,думаю что то подобное уже было.Заранее громадное спасибо.Может кто знает где прочитать
Просмотров: 6266
 
Непрочитано 14.09.2009, 20:22
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Тут вариантов масса замена самого блока (если у всех надо цвет помнять), поменять слой у вхождения, дин. блоки с параметром видимости, создание аналогичного блока, но с новым цветом - вобщем вначале сам реши что именно нужно и напиши.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.09.2009, 20:38
#3
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


думаю оптимально так есть скажем блок-синий квадратик,пронумерован номером 1,надо чтобы при изменении значения во внешней программе,блок заменился на красный желтый или зеленый квадратик,самое обидное блин тока на делфях более менее,а вот как передачу в лисп сделать и подключиться к нужному блок хз,вобщем ламер я в делах программирования в кадике
maximator вне форума  
 
Непрочитано 15.09.2009, 09:09
#4
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Цитата:
Сообщение от maximator Посмотреть сообщение
думаю оптимально так есть скажем блок-синий квадратик,пронумерован номером 1,надо чтобы при изменении значения во внешней программе,блок заменился на красный желтый или зеленый квадратик,самое обидное блин тока на делфях более менее,а вот как передачу в лисп сделать и подключиться к нужному блок хз,вобщем ламер я в делах программирования в кадике
Крутая, однако, постановка задачи... "пронумерован номером 1" - имеется в виду, значение атрибута = 1? Блоки все одинаковые "квадратики" али могут другие геометрические фигуры встречаться? Если разные - имя атрибута - одинаковое? Что за "внешняя программа" (и как) должна определять, зеленым квадратику остаться, или там, покраснеть?
Да и нафига вообще программировать, если можно вручную выделить блоки и назначить им нужный цвет (ессно, примитивы блока должны быть с цветом "поблоку")..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 15.09.2009, 10:26
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Тут еще и внешняя программа появилась - опиши целиком что нужно.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 15.09.2009, 16:28
#6
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


есть чертеж в Зд если это важно,на нем есть метки(которые думаю есть смысл проставлять готовыми блочками)соответственно нужно чтобы при изменении значения в файле(скажем ТХТ или ХМL) менялся цвет у метки
maximator вне форума  
 
Непрочитано 15.09.2009, 16:46
#7
Кулик Алексей aka kpblc
Moderator

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


Само оно (значение) меняться не будет. Только если писать собственную программу - тогда шансы есть.
Правда, вопрос как был непонимаемым, так и остался...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.09.2009, 16:56
#8
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,685


Мда, maximator, поподробнее б задачу расписал.. Образец файла выложил бы с блоками, txt файл тот же...
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 15.09.2009, 17:39
#9
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


1.в программке(внешней) прошло изменение текстового фаила,просто в форме для заполнения записали значения.
2.сохранили в фаилик.
3.открыли акад,в нем нужно чтоб цвета поменялись
4.фаил типо секретный,реал нельзя выкладывать,а блочек квадратик а внутри цифирка(метка)вот заливку надо менять.
мужики реал вешаюсь,спрашивайте м б доп вопросы я поясню сразу
5.тхт будет в любом втде,как скажите так и сделаю,из формы не проблема получить любой тхтшник хоть с абракадаброй,вот тока какой
maximator вне форума  
 
Непрочитано 16.09.2009, 14:58
#10
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ну в общем так, создаешь блоки, в них объекты которые должны поменять цвет, должны иметь цвет "по блоку", в блоках-же создаешь атрибут (можно скрытый) с именем "IDENT" с произвольным содержанием, далее создаешь текстовой файл с тем-же именем что и файл рисунка и в той-же директории, в нем пишеш данные в следующем формате:
имя_блока значение_атрибута_ident номер_цвета
разделители пробелы, для обновленния данных в рисунке, запускаешь лисп setcolor (он естественно должен быть загружен), в общем смоти пример.
Код:
[Выделить все]
(vl-load-com)
(defun c:setcolor ( / file)
(vla-startundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
(setq file (vla-get-fullname (vla-get-activedocument (vlax-get-acad-object)))
);end of setq
(if (and	(> (strlen file) 3)
		(setq file (readfile (strcat (substr file 1 (- (strlen file) 3)) "txt")))
);end of and
(mapcar '(lambda (str)
(apply '(lambda (blockname ident color)
(mapcar '(lambda (lst) (entmod (append lst (list (cons 62 (atoi color))))))
(mapcar 'entget
(vl-remove-if-not
'(lambda (obj) 
(vl-remove-if-not '(lambda (attrib) (and (= (cod 2 obj) blockname) (= (cod 2 attrib) "IDENT") (= (cod 1 attrib) ident) )) (getinsertattrib obj))
);end of lambda 
(sstolist (ssget "_a" (list (cons 0 "insert")))))))
);end of lambda 
(mapcar 'vl-list->string (sublist 32 (vl-string->list str))))
);end of lambda 
file);end of mapcar
(alert "Не найден файл настройки")
);end of if
(vla-endundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
(princ)
);end of setcolor

;********* библиотечые

(defun sstolist (ss / i lst); конвертирует набор в список
(setq i 0)
(if ss
(repeat (sslength ss)
(setq lst (append lst (list (ssname ss i))) i (1+ i))
));end of repeat & if
lst
);end of sstolist

(defun readfile (F / str lst);возращает список строк файла F
(if F (progn
(setq F (open F "r"))
(if F
(progn
(setq str (read-line F))
(while str (setq lst (append lst (list str)) str (read-line F)))
(close F)
))));end of progn&if*2
lst
);end of readfile

(defun getinsertattrib (obj / ret); список примитивов атрибутов блока
(if (= (cod 66 obj) 1)
(while (/= (cod 0 obj) "SEQEND")
(setq ret (cons (setq obj (entnext obj)) ret))
))
(reverse (cdr ret))
);end of getinsertattrib

(defun cod (cd obj) ; возращает код cd примитива obj.
(if (and obj (= (type obj) 'ename))
(cdr (assoc cd (entget obj)))
));end of cod

(defun sublist (x lst); делит список на подсписки с разделителем x
(vl-remove nil (if (member x lst)
(append  (list (first (vl-position x lst) lst)) (sublist x (cdr (member x lst))))
(list lst)
))
);end of sublist

(defun first (count lst); возращает первые count элементов списка
(if (> count 0)
(cons (car lst) (first (1- count) (cdr lst)))
);end of if
);end of first
Вложения
Тип файла: rar пример.rar (18.0 Кб, 70 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 20.09.2009, 22:54
#11
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


мужик ты гений!это то что надо!
maximator вне форума  
 
Автор темы   Непрочитано 24.09.2009, 00:22
#12
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


все сделал,с внешней программы меняется,тока одна сложность лисп включается только в том случае если создан в это м же файле и скомпилирован,закрываешь и надо снова входить в лисп вставлять код и компилировать,тока тогда работает,может я что не так делаю?
maximator вне форума  
 
Непрочитано 24.09.2009, 07:39
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


загружать лисп автоматически или повесить на кнопку (if (not (c:setcolor)) (progn (load ...setcolor.lsp) (c:setcolor)))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 24.09.2009, 09:44
#14
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


я ставил на автозагрузку,он светится в загруженых но матовым,пишет что успешно загружено но команда не срабатывает,кст акад 2008

Последний раз редактировалось maximator, 24.09.2009 в 10:28.
maximator вне форума  
 
Непрочитано 24.09.2009, 10:35
#15
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Если ты поставил на автозагрузку он просто загружаеться его еще надо вызвать, каким образом это сделать решать тебе: либо вызвать с ком.строки, либо "повесить на кнопку", либо дописать в конец файла команду setcolor - но тогда он будет запускаться при каждом открытии любого файла - и соответственно при ненахождении {active-name}.txt, будет ругаться.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 24.09.2009, 10:53
#16
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


просто сетколор?проблема в том что он загружен,а когда я жму в командной строке сетколор(setcolor) он пишет неизвестная команда,срабатывает тока после выше описаннгогя в трауре,_appload setcolor.VLX успешно загружено.
setcolor
Неизвестная команда "SETCOLOR". Для вызова справки нажмите F1.

Последний раз редактировалось maximator, 24.09.2009 в 11:17.
maximator вне форума  
 
Непрочитано 24.09.2009, 11:40
#17
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


а что такое setcolor.vlx?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 24.09.2009, 12:48
#18
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


эмм,ну вот так скомпилировалась програмка,не так да?скажи плиз ка правильно или где прочитать
maximator вне форума  
 
Непрочитано 24.09.2009, 13:04
#19
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


а зачем ты пишешь (setcolor), я делал setcolor?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 24.09.2009, 13:10
#20
maximator


 
Регистрация: 14.09.2009
Сообщений: 13


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Газопровод по фасаду здания proekt Прочее. Архитектура и строительство 13 30.09.2022 07:49
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Сейсмозащита и сейсмоизоляция существующих, построенных зд. IANationalInformAgentstvo Прочее. Архитектура и строительство 216 20.01.2015 16:51
NanoСПДС gest Другие CAD системы 401 15.07.2008 14:50
ответственность за проектную документацию zaza-noza Организация проектирования и оформление документации 3 07.03.2008 09:54