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

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

самозакрашивающийся контур

Ответ
Поиск в этой теме
Непрочитано 02.02.2006, 01:14 #1
самозакрашивающийся контур
Димас
 
джедай
 
Магадан
Регистрация: 31.01.2005
Сообщений: 460

Уважаемые,
не подскажете возможно ли написать следующий макрос:

полилинией рисуется замкнутый контур, который сразу же заливается solid'ом.
при этом слой штриховки зависит от слоя, которым рисуется полилиния.
Просмотров: 7394
 
Непрочитано 02.02.2006, 04:30
#2
Лентяй

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


Что-то вроде этого.
Код:
[Выделить все]
^C^Cpline "" -h s (entlast) ""
Лентяй вне форума  
 
Автор темы   Непрочитано 02.02.2006, 05:55
#3
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


Цитата:
Сообщение от Лентяй
Что-то вроде этого.
Код:
[Выделить все]
^C^Cpline "" -h s (entlast) ""
не работает((
контур обводиться, но не заливается
Димас вне форума  
 
Непрочитано 02.02.2006, 09:16
#4
Profan


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


Вот такой простенький макрос:
Код:
[Выделить все]
^C^C_hatch;_s;;
Profan вне форума  
 
Непрочитано 02.02.2006, 09:42
#5
Лентяй

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


Тогда, мобыть, так:
Код:
[Выделить все]
^C^Cpline;_hatch;_s;(entlast);;
Лентяй вне форума  
 
Непрочитано 02.02.2006, 10:04
#6
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Проуй так
Код:
[Выделить все]
^C^C(progn(setvar "CMDECHO" 1)(command "_pline" pause)(while (= (getvar "CMDACTIVE") 1)(command pause))(vla-put-Closed (vlax-ename->vla-object (entlast)) :vlax-true)(command "_-bhatch" "_P" "_SOLID" "_S" (entlast) "" ""))
VVA вне форума  
 
Непрочитано 02.02.2006, 10:07
#7
Profan


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


Для Лентяй.
Не мобыть так. (entlast) вообще не годится. В крайнем случае можно было задать для выбора объектов опцию _L
А вообще, проверить вам было трудно?
Я вот тут сочинял еще разные варианты типа такого:
^C^C_pline;\\;;_-bhatch;_s;_l;_p;_s;
Этот макрос не работает, как хотелось бы. Тут только Vova сможет, наверное, разобраться.
Profan вне форума  
 
Непрочитано 02.02.2006, 10:14
#8
Profan


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


Для VVA
Эта конструкция работает, только уж вроде и не макрос это, а программа, записанная в пункт меню. Типа этого и я сделал программу в файл LSP. Но ведь в AutoCAD LT такой макрос работать не будет.
Profan вне форума  
 
Непрочитано 02.02.2006, 11:25
#9
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


>Profan Думаю только макросом реализовать такое невозможно, т.к.
1. пауза (\) срабатывает на 1 запрос, а не известно, сколько сегментов в полилинии пользователь будет рисовать
2. замкнута ли она?
AutoCAD LT обрабатывает DIESEL? Если да, то можно будет попробывать проверить значение CMDACTIVE при помощи него, а замкнутость полилинии оставить на совести рисовавшего или воспольваться _rectang
VVA вне форума  
 
Непрочитано 02.02.2006, 11:49
#10
Profan


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


Для VVA.
Это вы правильно говорите. Но с DIESEL я не успел в свое время разобраться, вцепился в Lisp.
Profan вне форума  
 
Непрочитано 02.02.2006, 12:13
#11
Кулик Алексей aka kpblc
Moderator

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


Стоп, в начале не было ни слова про LT. А если LT, то DIESEL может прочитать значения системных переменных, но применить, например, конструкцию (while (/= (getar "cmdactive") 0) (command pause)) невозможно - конструкция-то лисповая... Для всех остальных вариантов кроме как лисп приемлемого решения лично я не вижу (хотя можно, конечно, на Delphi или еще чем наваять специальное приложение, которое будет обращаться к объектной модели када, строить там чего-то, потом закрашивать... Вопрос - а стОит ли овчинка выделки?)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.02.2006, 12:19
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Согласен с kpblc. Лисп наименее геморройный.
VVA вне форума  
 
Автор темы   Непрочитано 03.02.2006, 01:11
#13
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


Цитата:
Сообщение от VVA
Проуй так
Код:
[Выделить все]
^C^C(progn(setvar "CMDECHO" 1)(command "_pline" pause)(while (= (getvar "CMDACTIVE") 1)(command pause))(vla-put-Closed (vlax-ename->vla-object (entlast)) :vlax-true)(command "_-bhatch" "_P" "_SOLID" "_S" (entlast) "" ""))
все работает спасибо огромное - ускорит работу

еще вопрос - можно ли сюда добавить вторую штриховку? т.е чтоб автоматом заливалось сразу двумя штриховками?
Димас вне форума  
 
Непрочитано 03.02.2006, 10:42
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Можно. Какую именно? Только что можно увидить, если заливать solid'oм, разве что цветным печатать?
VVA вне форума  
 
Автор темы   Непрочитано 06.02.2006, 02:30
#15
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


все правильно)) штрихуем цветными заливками

а как сделать так контур - полилиния 7-го, одна заливка допустим ANSI37 7-го цвета, под ней штриховка SOLID допустим красного цвета?
Димас вне форума  
 
Непрочитано 06.02.2006, 07:04
#16
Profan


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


Вот такая программа на AutoLisp (код сохранить в файле bo_hatch.lsp):
Код:
[Выделить все]
(defun C:КОНШТРИХ ( / osm cecol echo con)
(setq osm (getvar "OSMODE"))
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 1)
(setq cecol (getvar "CECOLOR"))
(setvar "CECOLOR" "7")
(command "_pline" pause)
(while (= (getvar "CMDACTIVE") 1)(command pause))
(vla-put-Closed (vlax-ename->vla-object (entlast)) :vlax-true)
(setq kon (entlast))
(command "_-bhatch" "_P" "ANSI37" "100" "" "_S" kon "" "")
(setvar "CECOLOR" "1")
(command "_-bhatch" "_P" "SOLID" "_S" kon "" "")
(command "_draworder" "_L" "" "_B")
(setvar "OSMODE" osm)
(setvar "CMDECHO" echo)
(setvar "CECOLOR" cecol)
(princ)
)
Возможный макрос для кнопки или пункта меню:
Код:
[Выделить все]
^C^C(if (not C:КОНШТРИХ) (load "bo_hatch")) КОНШТРИХ
Profan вне форума  
 
Автор темы   Непрочитано 06.02.2006, 08:52
#17
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


спасибо огромное будем пробовать)))
Димас вне форума  
 
Непрочитано 06.02.2006, 09:01
#18
Profan


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


Надо бы третьей строкой в коде написать:
Код:
[Выделить все]
(setvar "OSMODE" 0)
Забыл, понимаешь...
Profan вне форума  
 
Автор темы   Непрочитано 24.03.2006, 06:47
#19
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


вот такой вот макрос)), решил без лиспа еще раз попробовать.
Цитата:
^C^C-HATCH;W;Y;/;p;SOLID;;
немного недоделан - приходиться в конце entr жать, но им можно рисовать и внутренние контуры.

поможите до конца доработать? как сюда прикрепить чтоб сверху еще другая штриховка ложилась? допустим "Ansi37" и 7-го цвета? (все остальное у меня ByLayer)
Димас вне форума  
 
Непрочитано 27.03.2006, 06:05
#20
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


По моему удобнее нарисовать сначала контуры, а потом уж их залить все сразу (с наследованием свойств полилиний).
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21672kY
KAI вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > самозакрашивающийся контур