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

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

Радиус сопряжения полилиний зависит от слоя объекта.

Ответ
Поиск в этой теме
Непрочитано 26.04.2013, 17:10 #1
Радиус сопряжения полилиний зависит от слоя объекта.
shartal
 
Регистрация: 12.08.2009
Сообщений: 464

Возможно ли заложить в лисп, чтоб радиуса сопряжения зависел от слоя объекта ?
Например: для Слой 1 -20
для Слой 2 -30
Просмотров: 3384
 
Непрочитано 26.04.2013, 17:16
#2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Сопряжение - это FILLET? Возможно. Варианты решений, которые приходят в голову:
1. Предвыбор-обработка-сопряжение.
2. Командный реактор на FILLET.
Do$ вне форума  
 
Автор темы   Непрочитано 26.04.2013, 17:35
#3
shartal


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


Реактор может быть на определенный слой?
Радиус должен подставляться после выбора объекта. Команда пошла- указали объект- сопряглось с нужным радиусом.
shartal на форуме  
 
Непрочитано 26.04.2013, 18:13
#4
skkkk


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


Цитата:
Сообщение от shartal Посмотреть сообщение
Команда пошла- указали объект- сопряглось с нужным радиусом
Объект или все же два объекта? А если они на разных слоях? То программа должна брать слой первого или ругаться, что, мол, объекты на разных слоях? Опыт показывает, что во избежание разночтений желательно приложить файл с примером.
Плюс создание слоев должно быть в какой-то мере стандартизированным. Ошибка в одном символе имени слоя - и программа не сработает. А так - задачка довольно проста: вводится переменная (радиус), которая принимает значение в зависимости от слоя выбранного объекта и подставляется в (command "_.fillet" ......) на запрос радиуса.
skkkk вне форума  
 
Непрочитано 26.04.2013, 18:52
1 | #5
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от skkkk Посмотреть сообщение
(command "_.fillet" ......) на запрос радиуса.
можно просто менять системную переменную FILLETRAD
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 26.04.2013, 19:59
#6
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от shartal Посмотреть сообщение
Реактор может быть на определенный слой?
Реактор на запуск команды FILLET. Не вариант, судя по знаниям
Do$ вне форума  
 
Автор темы   Непрочитано 29.04.2013, 14:44
#7
shartal


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


В качестве объектов всегда будут участвовать сегменты полилинии, поэтому вопрос о разности слоев стоять не будет. Слои абсолютно стандартизированы.
Но моих знаний на написание кода не хватает, особенно как взять имя слоя с объекта.
shartal на форуме  
 
Непрочитано 29.04.2013, 15:12
1 | #8
Дима_

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


Цитата:
Сообщение от shartal Посмотреть сообщение
Но моих знаний на написание кода не хватает, особенно как взять имя слоя с объекта.
ну если только в этом проблема:
Код:
[Выделить все]
 (defun lay-name(ent)(cdr (assoc 8 (entget ent))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 30.04.2013, 17:54
1 | #9
skkkk


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


Цитата:
Сообщение от shartal Посмотреть сообщение
Возможно ли заложить в лисп, чтоб радиуса сопряжения зависел от слоя объекта ?
Например: для Слой 1 -20
для Слой 2 -30
Код:
[Выделить все]
(defun C:FilletRadByLayer ( / ent lay-name rad)
	(while (null ent) 
		(setq ent (car (entsel "\nВыберите 2D полилинию: "))) 
		(if (and ent (not (eq (cdr (assoc 0 (entget ent))) "LWPOLYLINE")))
			(progn
				(setq ent nil)
				(princ "Выбранный объект не является 2D полилинией")
			)
			ent
		)
	)
	(setq lay-name (cdr (assoc 8 (entget ent))))
	(cond 
		((eq lay-name "Слой 1")(setvar "FILLETRAD" 20.0))
		((eq lay-name "Слой 2")(setvar "FILLETRAD" 30.0))
		((princ "\nНе тот слой!")
		 (initget 4)
		 (or
			(setq rad (getreal (strcat "\nРадиус сопряжения: <" (rtos (getvar "FILLETRAD") 2 1) ">")))
			(setq rad (getvar "FILLETRAD"))
		 )
		 (setvar "FILLETRAD" rad)
		)

	)
	(command "_.fillet" "_P" ent)
	(princ)
)
Значения, которые надо поменять на свои, выделены зеленым. По аналогии можно добавить/убрать сколько угодно имен слоев и значений радиуса, добавляя/удаляя строку:
Код:
[Выделить все]
((eq lay-name "<Имя слоя>")(setvar "FILLETRAD" <Радиус сопряжения>))
Если полилиния не принадлежит ни к одному из перечисленных слоев, значение радиуса запросится у пользователя.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Радиус сопряжения полилиний зависит от слоя объекта.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
LISP. Программа сопряжения отдельных сегментов полилиний или отрезков без объединения Profan Готовые программы 20 30.03.2010 18:23
VBA. Размораживание слоя, построение объекта в нем, замораживание слоя = ошибка Alexey_02 Программирование 3 06.03.2009 22:33