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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите создать лисп, вызывающий команду ПРЯМАЯ с определенными параметрами

Помогите создать лисп, вызывающий команду ПРЯМАЯ с определенными параметрами

Ответ
Поиск в этой теме
Непрочитано 17.01.2015, 13:15 #1
Помогите создать лисп, вызывающий команду ПРЯМАЯ с определенными параметрами
VAV
 
Проектировщик
 
Воронеж
Регистрация: 28.10.2009
Сообщений: 331

Прошу прощения за столь примитивную просьбу!!
Помогите сделать лисп, вызывающий команду ПРЯМАЯ, так чтобы она была была уже ориентирована вертикально/горизонтально и чтобы она вычерчивалась в конкретном слое (например ПРЯМАЯ), определенной толщины (например 0,09) и определенным цветом (например синяя). Если со слоем слишком заморочно, то хотя бы чтобы цвет и толщину имела уже заданную лиспом. Благодарю за помощь
Просмотров: 3417
 
Непрочитано 18.01.2015, 05:45
#2
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Режим орто + палитра инструментов. Лисп тут не нужен.
Boxa вне форума  
 
Непрочитано 18.01.2015, 14:12
#3
Profan


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


А про какую программу идет речь? В AutoCAD'е нет команды "ПРЯМАЯ".
Profan вне форума  
 
Непрочитано 18.01.2015, 14:19
#4
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Boxa, не все любят палитры, а у иных наоборот - палитры заняты очень плотно уже чем-то другим, например, библиотекой блоков, и добавлять туда еще что-то не хочется... Плюс режим ОРТО нужно отдельно включать/выключать, а это лишние действия.
VAV, лисп тут будет очень простым, нужно только понять, одну ли прямую чертить в рамках одного вызова или как в штатной программе - пока не завершишь правой кнопкой или Enter'ом? И как выбирать горизонтальность/вертикальность? Через опцию, как в штатной команде или указанием второй точки, как в режиме ОРТО? Или на вертикальную одна кнопка, на горизонтальную - другая?
И тут еще есть момент: нужно ли цвет и вес задавать жестко или все же ПоСлою, а настройки слоя установить уже "синий" и "0.09"? И всегда ли слой уже есть или все же надо создать программно, если его еще нет в чертеже? А если есть, но с другими настройками? Перенастроить?
Вроде такая простая задачка, а вон сколько вопросов создает, и то - наверняка что-то я да не учел еще.

----- добавлено через ~5 мин. -----
Profan, как нет? У меня в 2011-м есть. Так и забиваю в комстроке ПРЯМАЯ, а по-английски - _XLINE

Последний раз редактировалось skkkk, 18.01.2015 в 14:26.
skkkk вне форума  
 
Непрочитано 19.01.2015, 07:16
#5
Vladimir_Sergeevich

рисую дороги, в перерывах курю Lisp
 
Регистрация: 20.04.2011
Пермь
Сообщений: 475
<phrase 1= Отправить сообщение для Vladimir_Sergeevich с помощью Skype™


а как насчет того что бы сделать пару новых кнопок и макросы ни них типа такого:
_-layer;у;<layer_name>;;_xline;в;
_-layer;у;<layer_name>;;_xline;г;
з.ы. кад русский, поэтому опции локализованные.
з.з.ы. имхо, толщина и цвет должны задаваться слоем
__________________
Не труд сделал из обезьяны человека, а лень и жажда халявы...
Vladimir_Sergeevich вне форума  
 
Автор темы   Непрочитано 19.01.2015, 09:33
#6
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


Цитата:
Сообщение от Boxa Посмотреть сообщение
Режим орто + палитра инструментов. Лисп тут не нужен.
Спасибо, не подходит. Слишком заморочно.

skkkk, Хотелось бы чтобы, как в шатной программе: пока не завершишь энтером; чтобы на горизонтальные линии была одна команда, на вертикальные - другая. По поводу слоев/толщин/цветов: в принципе без разницы, как будет проще тому, кто поможет написать этот лисп. Для меня главное чтобы цвет был синим и толщина, близкая к нулю. А если что, цвет и толщину я вручную и сам смогу подправить в лиспе при необходимости. Как-то так )
skkkk, Vladimir_Sergeevich, спасибо за макросы, но я стараюсь минимально пользоваться кнопками. Все необходимое выношу на клавиатуру

Последний раз редактировалось VAV, 19.01.2015 в 09:39.
VAV вне форума  
 
Непрочитано 19.01.2015, 11:16
1 | #7
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


VAV, помогаю создать лисп:
Код:
[Выделить все]
 (vl-load-com)
(defun C:HOR-XLINE () (draw-xline "_H"))
(defun C:VERT-XLINE () (draw-xline "_V"))
(defun draw-xline
		  (dir		/	     *error*	  adoc
		   oldCLAYER	oldCECOLOR   oldCELTYPE	  oldCELWEIGHT
		   layername	col	     vla-obj-lay
		  )
  (defun *error* (msg)
    (if	oldCLAYER
      (setvar "CLAYER" oldCLAYER)
    ) ;_ end of if
    (if	oldCECOLOR
      (setvar "CECOLOR" oldCECOLOR)
    ) ;_ end of if
    (if	oldCELTYPE
      (setvar "CELTYPE" oldCELTYPE)
    ) ;_ end of if
    (if	oldCELWEIGHT
      (setvar "CELWEIGHT" oldCELWEIGHT)
    ) ;_ end of if
    (princ msg)
    (princ)
  ) ;_ end of defun *error*
  (setq	adoc	 (vla-get-ActiveDocument (vlax-get-acad-object))
	oldCLAYER    (getvar "CLAYER")
	oldCECOLOR   (getvar "CECOLOR")
	oldCELTYPE   (getvar "CELTYPE")
	oldCELWEIGHT (getvar "CELWEIGHT")
	layername    "ПРЯМАЯ"
  ) ;_ end of setq
  (setvar "CECOLOR" "BYLAYER")
  (setvar "CELTYPE" "BYLAYER")
  (setvar "CELWEIGHT" -1)
  (if (null (tblsearch "LAYER" layername))
    (progn
      (vla-Add (vla-get-Layers adoc) layername)
      (setq col		(vla-GetInterfaceObject
			  (vlax-get-acad-object)
			  (strcat "autocad.accmcolor."
				  (vl-princ-to-string (atoi (getvar "acadver")))
			  ) ;_ end of strcat
			) ;_ end of vla-GetInterfaceObject
	    vla-obj-lay	(vla-Item (vla-get-Layers adoc) layername)

      ) ;_ end of setq
      (vla-put-ColorIndex col 5) ; номер цвета
      (vla-put-TrueColor vla-obj-lay col)
      (vla-put-LineWeight vla-obj-lay 9) ; вес линий
    ) ;_ end of progn
  ) ;_ end of if
  (setvar "CLAYER" layername)
  (vl-cmdf "_XLINE" dir)
  (while (> (getvar "CMDACTIVE") 0) (vl-cmdf pause))


  (*error* "")
  (princ)
) ;_ end of defun
(princ
  "\nЗагружены пользовательские команды HOR-XLINE и VERT-XLINE"
) ;_ end of princ
(princ)
Подразумевается, что перед запуском лиспа ВСЁ уже сделано ПРАВИЛЬНО, а именно: слой "ПРЯМАЯ" в чертеже существует, ему назначен цвет - синий, тип линий - нужный, вес линий - 0.09. Если слоя не существует, он создастся с настройками в соответствии с техзаданием. В комментариях в коде указано, где эти настройки поменять.

Текущие (активные до запуска лиспа) цвет, тип и вес могут быть любыми, но мы с Владимиром Сергеевичем и не только рекомендуем использовать значения "ПоСлою", кроме особых, обоснованных случаев.

Последний раз редактировалось skkkk, 19.01.2015 в 12:28. Причина: см. #8
skkkk вне форума  
 
Автор темы   Непрочитано 19.01.2015, 11:35
#8
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


skkkk, огромное спасибо за помощь, все работает. А сложно будет сделать, чтобы слой с заданными параметрами создавался автоматически?
VAV вне форума  
 
Непрочитано 19.01.2015, 12:05
#9
Profan


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


Есть команда "ПРЯМАЯ", забыл совсем, это конструкционная линия...
Profan вне форума  
 
Непрочитано 19.01.2015, 12:29
1 | #10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Цитата:
Сообщение от VAV Посмотреть сообщение
чтобы слой с заданными параметрами создавался автоматически?
Обновил в #7.
skkkk вне форума  
 
Непрочитано 19.01.2015, 12:53
1 | #11
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Offtop:
XLinePP
Внутри две команды : AddXLineV и AddXLineH
Толщина и цвет линии вынесены в файл настроек.
Скомпиленный вариант для 2014 акада.
Boxa вне форума  
 
Автор темы   Непрочитано 19.01.2015, 13:46
#12
VAV

Проектировщик
 
Регистрация: 28.10.2009
Воронеж
Сообщений: 331
<phrase 1=


skkkk, Boxa, благодарю за помощь!!!!!!!
VAV вне форума  
 
Непрочитано 19.01.2015, 13:47
#13
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Offtop: Ха-ха-ха, Boxa-скромняга, так застенчиво намекал на штатные возможности, а у самого вон какой туз в рукаве
К сожалению попробовать не могу - КАД только 2011-й
А оффтоп - это потому что в шапке лисп?
skkkk вне форума  
 
Непрочитано 19.01.2015, 14:44
#14
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Offtop: Ну да, ведь тема про лисп.
Не было у меня туза, собрал по быстренькому из готовых шаблонов. Никогда раньше с xline не работал и в справке ничего нет. Любопытство победило.

Вложения
Тип файла: zip xline_pp_2011-2015.zip (17.5 Кб, 19 просмотров)

Последний раз редактировалось Boxa, 20.01.2015 в 09:27. Причина: Обновил архив
Boxa вне форума  
 
Непрочитано 19.01.2015, 19:48
#15
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,680


Boxa, похоже, я забыл отметить, что система у меня х64...
Не удалось загрузить сборку. Сведения об ошибке:
System.BadImageFormatException: Невозможно загрузить файл или сборку
"file:///C:\Users\Admin\Desktop\xline_pp_2011.dll" или один из зависимых от них
компонентов. Сборка создана в более поздней версии среды выполнения чем
текущая, и не может быть загружена.
Имя файла: "file:///C:\Users\Admin\Desktop\xline_pp_2011.dll"
в System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
в System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence
assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
в System.Reflection.Assembly.LoadFrom(String assemblyFile)
в Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
в loadmgd()
Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение
параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому
снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра
[HKLM\Software\Microsoft\Fusion!EnableLog].
Команда: AddXLineV
Неизвестная команда "ADDXLINEV". Для вызова справки нажмите F1.
skkkk вне форума  
 
Непрочитано 19.01.2015, 21:32
#16
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Offtop: Да, мой косяк. Сборки компилил с. Net 4.5, а для 2011 нужен 3.5
Завтра исправлю эту оплошность.

Обновил архив в 14 сообщении.

Последний раз редактировалось Boxa, 20.01.2015 в 09:28.
Boxa вне форума  
 
Непрочитано 20.01.2015, 18:58
#17
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611


Offtop: Продолжил некоторый эксперимент.

Переопределил имена команд и добавил еще парочку
Простая вставка : XLineV и XLineH
Вставка с предпросмотром: XLineJigV и XLineJigH

Код открытый, лежит тут: XLinePP.
Скомпиленный вариант во вложении.

ЗЫ.
Т.к. я не программер, то критику к коду хотелось бы услышать.
Вложения
Тип файла: zip xline_pp_2011-2015.zip (23.8 Кб, 22 просмотров)
Boxa вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите создать лисп, вызывающий команду ПРЯМАЯ с определенными параметрами



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите создать лисп выделяющий несколько объектов по шаблону Аристарх Северный LISP 13 15.08.2014 08:03