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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Вычертить pline с заданными характеристиками.

LISP. Вычертить pline с заданными характеристиками.

Ответ
Поиск в этой теме
Непрочитано 31.08.2019, 15:20 #1
LISP. Вычертить pline с заданными характеристиками.
f1moa
 
Регистрация: 31.08.2019
Сообщений: 11

Подскажите, новичку в этом деле, как в LISP-e прописать алгоритм действия, чтобы полилинию вычертить с заданным цветом, типом, толщиной и в нужном слое. И в конце слой и все характеристике вернулись по умолчанию (Слой "0", Тип линии по слою, Вес по слою, и Тип линии по слою в Автокаде. Заранее спасибо.
Просмотров: 4813
 
Непрочитано 31.08.2019, 16:24
#2
Семёныч


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


Под толщиной понимается ширина всех сегментов или вес линии?
Семёныч вне форума  
 
Автор темы   Непрочитано 31.08.2019, 19:11
#3
f1moa


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


Вес линии

----- добавлено через ~2 мин. -----
что то подобное интересует (пример вставки блока)

(defun C:блок ( / sp )
(setvar "CMDECHO" 0)
(setq sp (getpoint "\nТочка вставки:"))
(princ "\nУгол:")
(command "_.color" "7")
(command "_LAYER" "У" "блок" "")
(command "_-insert"
"блок.dwg"
sp
1
1
0)
(princ)
(command "_LAYER" "У" "0" "")
(command "_.color" "2")
)

----- добавлено через ~6 мин. -----
А вот с этим (вставка блока с поворотом) не получается вернуться в слой 0, остается слой по умолчанию блок1

(defun C:блок1 ( / sp NR tvt)
(setq oldLayer (getvar "CLAYER"))
(setq sblip (getvar "blipmode"))
(setq scmde (getvar "cmdecho"))

(setq sp (getpoint "\nТочка вставки реш "))
(setvar "blipmode" 0)
(setvar "cmdecho" 0)
(command "_.color" "7")
(command "_LAYER" "У" "блок1" "")
(command "_-insert" "блок1.dwg" sp 1 1 pause)

(setvar "blipmode" sblip)
(setvar "cmdecho" scmde)
(setvar "CLAYER" oldLayer)
(command "_LAYER" "У" "0" "")
(command "_.color" "2")
)

Последний раз редактировалось f1moa, 31.08.2019 в 19:18.
f1moa вне форума  
 
Непрочитано 01.09.2019, 02:00
1 | #4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от f1moa Посмотреть сообщение
(setvar "CLAYER" oldLayer)
(command "_LAYER" "У" "0" "")
это для надежности?) Первая строка устанавливает текущий слой уже.


Цитата:
Сообщение от f1moa Посмотреть сообщение
Тип линии по слою, Вес по слою,
CECOLOR
CELTYPE

и следите за областью видимости переменных: oldLayer, sblip, scmde являются глобальными, хотя им это совершенно не нужно, имхо.
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.09.2019, 08:43
#5
f1moa


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


(defun C:бл ( / sp NR tvt)
(setq sp (getpoint "\nТочка вставки реш "))
(command "_LWEIGHT" "0.15" "")
(command "_linetype" "_s" "continuous" "")
(command "_.color" "7")
(command "_LAYER" "У" "блок" "")
(command "_-insert" "блок" sp 1 1 pause)


как дописать команду что бы значения (вес, цвет, слой) вернулись изначальные в автокаде, а не те которые стоят перед вставкой блока.

...

(princ)
(command "_LAYER" "У" "0" "")
(command "_.color" "2")
)

вот так не выходит
f1moa вне форума  
 
Непрочитано 01.09.2019, 09:48
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


зачем использовать командные методы для восстановления, когда есть системные переменные?
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.09.2019, 10:44
#7
f1moa


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


и как это реализовать.
пример можно увидеть.
f1moa вне форума  
 
Непрочитано 01.09.2019, 10:46
#8
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


а как писали ранее setvar / getvar в коде. Имена переменных дал выше, про CLayer уже в курсе, насколько вижу.
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.09.2019, 12:25
#9
f1moa


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а как писали ранее setvar / getvar в коде. Имена переменных дал выше, про CLayer уже в курсе, насколько вижу.
мне об этом мало что известно, хотел бы наглядно увидеть результат.
f1moa вне форума  
 
Непрочитано 01.09.2019, 12:31
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Цитата:
хотел бы наглядно увидеть результат.
запусти и посмотри
trir вне форума  
 
Непрочитано 01.09.2019, 12:37
1 | #11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Сохраняете значение
Цитата:
Сообщение от f1moa Посмотреть сообщение
(setq oldLayer (getvar "CLAYER"))
....


Восстанавливаете значение в конце
Цитата:
Сообщение от f1moa Посмотреть сообщение
(setvar "CLAYER" oldLayer)
И пробуйте, пробуйте.. Вы не станок с ЧПУ дорогостоящий программируете - ошибаться можно и нужно, только учиться на этих ошибках и не повторять их снова)
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.09.2019, 14:42
#12
f1moa


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


Вы меня не поняли текущий слой 0, блок вставляется в слой блок, и текущий слой снова 0 , а не слой блок.
(setq oldLayer (getvar "CLAYER")) - вначале , (setvar "CLAYER" oldLayer) - в конце, в результате блок находится в слое 0.
f1moa вне форума  
 
Непрочитано 01.09.2019, 14:53
1 | #13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от f1moa Посмотреть сообщение
Вы меня не поняли текущий слой 0, блок вставляется в слой блок, и текущий слой снова 0 , а не слой блок.
(setq oldLayer (getvar "CLAYER")) - вначале , (setvar "CLAYER" oldLayer) - в конце, в результате блок находится в слое 0.
Если нужно, чтобы блок встал на свой слой - вызовете в коде перед вставкой блока (_insert) установку нужного слоя (setvar "CLAYER" %Имя слоя для блока%). Поскольку команда Insert вставляет блок в текущий слой.
Сергей812 вне форума  
 
Непрочитано 01.09.2019, 16:02
#14
Семёныч


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


Автору темы надо было вычертить полилинию, но тут вцепились в какой-то бессмысленный блок и хоть ты тресни.
Цитата:
Сообщение от f1moa Посмотреть сообщение
мне об этом мало что известно
Если мало известно, то надо учить матчасть, в частности, хотя бы познакомиться с системными переменными AutoCAD.
Семёныч вне форума  
 
Непрочитано 01.09.2019, 16:09
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


Цитата:
Сообщение от Семёныч Посмотреть сообщение
Автору темы надо было вычертить полилинию, но тут вцепились в какой-то бессмысленный блок и хоть ты тресни.
а какая разница при работе командными методами?)
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.09.2019, 16:13
#16
f1moa


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


как я не старался ни чего и не выходит. при вставке блока без поворота
(command "_-insert" "имя блока.dwg" sp 1 1 0), все возвращается на своё место,
а при вставке с подворотом (command "_-insert" "имя блока.dwg" sp 1 1 pause) остается.
Так же и выходит с полилинией
(defun C:имялинии ( / sp )
(command "_LAYER" "У" "имя линии" "")
(command "_.color" "82")
(command "_LWEIGHT" "0.3" "")
(command "_linetype" "_s" "имя линии" "")
(command "_.pline")
(princ)
(command "_LAYER" "У" "0" "")
(command "_.color" "2")
(command "_LWEIGHT" "0.15" "")
)

----- добавлено через ~4 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а какая разница при работе командными методами?)
набирая на клавиатуре имя команды хотелось вычертивать разные с характеристиками ( вес, тип, цвет и имя слоя) линии, а не меняя в ручную или рисовать через политру.
f1moa вне форума  
 
Непрочитано 01.09.2019, 16:27
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


1. Пользуйтесь тегами для оформления кода (следующая кнопка после кнопки с решеткой).
2. А вы уверены, что выполнение кода доходит до восстановления? Вставьте вывод какого то слова в комстроку через princ перед командами восстановления.
3. Еще раз - зачем использовать командные методы, где можно работать через системные переменные?
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.09.2019, 17:14
#18
f1moa


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
. Еще раз - зачем использовать командные методы, где можно работать через системные переменные?
это как ?
f1moa вне форума  
 
Автор темы   Непрочитано 01.09.2019, 17:16
#19
f1moa


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


(princ) не даёт результата
f1moa вне форума  
 
Непрочитано 01.09.2019, 17:23
| 1 #20
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,004


добро пожаловать на грабли командных методов работы)
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Вычертить pline с заданными характеристиками.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Как в ActiveX выдернуть координаты полилинии? Как задавать атребуты блока через LISP? wpww LISP 31 16.08.2016 14:17
Lisp. Вывод MTEXT с заданными параметрами. kpectoff LISP 3 07.05.2014 12:22
LISP. MLINE по координатам PLINE dreadnoult LISP 12 03.09.2013 02:03
Координаты точки пересечения line и pline (LISP) paradoxvaha LISP 3 10.07.2007 13:04