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

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

как перекрасить слой кликнув на объект

Ответ
Поиск в этой теме
Непрочитано 24.02.2009, 05:15 #1
подскажите лисп
GECK
 
инженер
 
сша
Регистрация: 15.11.2008
Сообщений: 28

подскажите лисп, который бы одним щелчком,по объкту менял цвет слоя этого объкта.
заранее благодарен.
Просмотров: 3695
 
Непрочитано 24.02.2009, 08:32
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Простенькая программа:
Код:
[Выделить все]
 
(defun C:ЦВ_СЛОЙ ( / ent lay clr )
(setq ent (car (entsel "\n Выберите объект: ")))
(if ent
   (progn
   (setq lay (cdr (assoc 8 (entget ent))))
   (initget 7)
   (setq clr (getstring "\n Номер нового цвета для слоя: "))
   (vl-cmdf "_-LAYER" "_C" clr lay "")
   )
   (princ "\n Объект не выбран.")
   )
(princ)
)
Profan вне форума  
 
Непрочитано 24.02.2009, 08:46
#3
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 23,284
<phrase 1=


Название информативнее! На переименование 24 часа
Солидворкер вне форума  
 
Автор темы   Непрочитано 24.02.2009, 16:22
#4
GECK

инженер
 
Регистрация: 15.11.2008
сша
Сообщений: 28


сейчас проверю ,спасибо.
очень оперативно.
GECK вне форума  
 
Непрочитано 24.02.2009, 18:22
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Offtop:
Так и переименовывать не понадобится.
Profan вне форума  
 
Автор темы   Непрочитано 25.02.2009, 01:22
#6
GECK

инженер
 
Регистрация: 15.11.2008
сша
Сообщений: 28


ни чего не получается,работаю на английском,пробовал переделать синтаксисн а английский ни чего не принимает"unknown command"
GECK вне форума  
 
Непрочитано 25.02.2009, 06:25
#7
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Тогда переименовывай тему и продолжим разговор.
Для сведения - все получается и в английской версии. Проверено в AutoCAD 2008 ENG:
Код:
[Выделить все]
 
Command: ЦВ_СЛОЙ
Выберите объект:
Номер нового цвета для слоя: 1
_-LAYER
Current layer: "0"
Enter an option 
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/MATerial/Plot/Freeze/Thaw/LOck/Unlock
/stAte]: _C
New color [Truecolor/COlorbook] : 1
Enter name list of layer(s) for color 1 (red) <0>: Layer1 Enter an option 
[?/Make/Set/New/ON/OFF/Color/Ltype/LWeight/MATerial/Plot/Freeze/Thaw/LOck/Unlock
/stAte]:
Command:
Немного переделанная программа:
Код:
[Выделить все]
 
(defun C:C_LAY ( / ent lay clr )
(setq ent (car (entsel "\n Выберите объект: ")))
(if ent
   (progn
   (setq lay (cdr (assoc 8 (entget ent))))
   (princ "\n Номер нового цвета для слоя ") (princ lay) (princ " :")
   (initget 7)
   (setq clr (getstring))
   (vl-cmdf "_-LAYER" "_C" clr lay "")
   )
   (princ "\n Объект не выбран.")
   )
(princ)
)

Последний раз редактировалось Profan, 25.02.2009 в 06:30.
Profan вне форума  
 
Автор темы   Непрочитано 26.02.2009, 05:49 как перекрасить слой кликнув на объект
#8
GECK

инженер
 
Регистрация: 15.11.2008
сша
Сообщений: 28


как перекрасить слой кликнув на объект
тему повторяю,с новым названием,т.как не успел переименовать старую
не было иннета
вопрoс, собственно в САБЖЕ
Код:
[Выделить все]
(defun C:C_LAY ( / ent lay clr )
(setq ent (car (entsel "\n Выберите объект: ")))
(if ent
   (progn
   (setq lay (cdr (assoc 8 (entget ent))))
   (princ "\n Номер нового цвета для слоя ") (princ lay) (princ " :")
   (initget 7)
   (setq clr (getstring))
   (vl-cmdf "_-LAYER" "_C" clr lay "")
   )
   (princ "\n Объект не выбран.")
)
(princ)
)

Последний раз редактировалось GECK, 26.02.2009 в 17:08.
GECK вне форума  
 
Непрочитано 26.02.2009, 06:09
#9
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


1. Не ПРОФАН, а Profan дал лисп. Не надо путать ники.
2. Функция определена как C_LAY, а не C-LAY.
3. Программа настолько проста, что просто обязана работать на всех версиях AutoCAD'а независимо от языка.
4. Нормальный код программы, а не та путаница, как в сообщении 1.
Код:
[Выделить все]
 
(defun C:C_LAY ( / ent lay clr )
(setq ent (car (entsel "\n Выберите объект: ")))
(if ent
   (progn
   (setq lay (cdr (assoc 8 (entget ent))))
   (princ "\n Номер нового цвета для слоя ") (princ lay) (princ " :")
   (initget 7)
   (setq clr (getstring))
   (vl-cmdf "_-LAYER" "_C" clr lay "")
   )
   (princ "\n Объект не выбран.")
)
(princ)
)
5. Может, Windows английская?
6. Можно попробовать строку
Код:
[Выделить все]
 
(vl-cmdf "_-LAYER" "_C" clr lay "")
заменить на строку
Код:
[Выделить все]
(vl-cmdf "_-.LAYER" "_C" clr lay "")
Profan вне форума  
 
Автор темы   Непрочитано 26.02.2009, 16:38
#10
GECK

инженер
 
Регистрация: 15.11.2008
сша
Сообщений: 28


прошу прощения за ник.да это я дома перепутал дэш
но на работе вместе с гуру делал все правильно,
да window английский.попробую поменять
еще раз извините
ноновый не работает.

Код:
[Выделить все]
(defun C:C_LAY ( / ent lay clr )
(setq ent (car (entsel "\n Выберите объект: ")))
(if ent
   (progn
   (setq lay (cdr (assoc 8 (entget ent))))
   (princ "\n Номер нового цвета для слоя ") (princ lay) (princ " :")
   (initget 7)
   (setq clr (getstring))
   (vl-cmdf "_-.LAYER" "_C" clr lay "")
   )
   (princ "\n Объект не выбран.")
)
(princ)
)
Код:
[Выделить все]
Command: _appload LAY.LSP successfully loaded.


Command: ; error: bad character read (octal): 0

Command:
Command: c_lay
Unknown command "C_LAY".  Press F1 for help.

Последний раз редактировалось GECK, 26.02.2009 в 17:14.
GECK вне форума  
 
Непрочитано 26.02.2009, 18:46
#11
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


GECK, ты сильно откорректировал свое первое сообщение и мой ответ как-то не вписывается. Тем не менее, я оставлю его, как есть.
По существу.
К сожалению, я не могу проверить работу программы в английском AutoCAD'е под управлением английской OS. Нашел я в Интернете упоминание об этой ошибке
error: bad character read (octal): 0
http://discussion.autodesk.com/forum...hreadID=536973
но, честно говоря, не совсем понял, о чем там речь идет.
Profan вне форума  
 
Непрочитано 26.02.2009, 19:54
#12
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от GECK Посмотреть сообщение
как перекрасить слой кликнув на объект
тему повторяю,с новым названием,т.как не успел переименовать старую
не было иннета<...>
Достаточно было постучаться в личку любому модератору. Темы объединены.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.02.2009, 06:08
#13
GECK

инженер
 
Регистрация: 15.11.2008
сша
Сообщений: 28


profan,все заработало,помог гуру ,о котором я говорил,не знаю что было,повидимому мой комп не дружит с кирилицей,загрузили на другой комп,и все лиспы заработали, потом стого компа на свой скопировал и тоже все ок.очень благодарен,
GECK вне форума  
 
Непрочитано 27.02.2009, 06:15
#14
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


У меня были сомнения относительно поддержки русского языка, но я не стал уточнять по некоторым соображениям... Ладно, работет - ну, и хорошо.
Profan вне форума  
 
Непрочитано 27.02.2009, 09:18
#15
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Как вариант:
Код:
[Выделить все]
;(Kr_ReplaceColorLayer)
(defun Kr_ReplaceColorLayer (/)
  (setvar "ERRNO" 0)
  (while
    (or (initget 6) (setq color (getreal "\nВведите номер цвета для слоя <Выход> : ")))
      (while (or (setq ent (car (entsel "\nВыберите объект <Указать цвет> : "))) (= (getvar "ERRNO") 7))		  
	(setvar "ERRNO" 0)
	(if ent
	  (Kr-ReplaceColorLayer color ent)
	  );while
	);while
    );if
  );defun

;(Kr_ReplaceColorLayer 1 ent)
(defun Kr-ReplaceColorLayer (color ent /)
  (vl-load-com)
	  (vlax-for i (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))
	    (if (eq (vla-get-name i) (vla-get-layer (vlax-ename->vla-object ent)))
	      (vla-put-Color i color)
	    );if
	  );vlax-for
);defun
Запускать как (Kr_ReplaceColorLayer)
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > как перекрасить слой кликнув на объект

Реклама i
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как создавать в ADT 2008 объект в 2 этажа dasus Вертикальные решения на базе AutoCAD 6 09.06.2008 22:48
Как выделить замкнутый контур кликнув в середине его на VBA? Igoryok Программирование 1 30.11.2004 13:36
как напечатаь в файл двг 3-д объект? мм AutoCAD 2 22.10.2004 06:37
Как слой включить сразу во всех видовых экранах ilka_t AutoCAD 4 26.04.2004 11:20