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

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

Как вставить один прямоугольник через лисп?

Ответ
Поиск в этой теме
Непрочитано 22.12.2022, 12:17
Как вставить один прямоугольник через лисп?
Jek30
 
Регистрация: 19.08.2022
Сообщений: 71

Может кто-нибудь сможет написать лисп для вставки прямоугольника (хотябы черновой вариан)!
На форумах искал подобное, но там всё не то.
В общем если кому-нибудь будет интересно, то суть будущего лиспа в следующем:
(Например есть трасса кабельной линии, а на пересечениях этой трассы с коммуникациями нужно прокладывать кабель в трубах, а пересечений всегда много). Так вот. На плане это выглядит так:
В виде кабеля имеется полилиния с множеством углов поворотов в различном направлении, а в некоторых местах на эту линию нужно вставить прямоугольнички разных длин (т.е. трубы через коммуникации) и естественно симметрично и параллельно данной поллилинии.
Нужно чтоб нажал кнопку лиспа и вышло бы например указание "Укажите точку вставки прямоугольника (трубы)"
После указания точки вставки указывается вторая точка, которая определяет длину (в данном случае половину длины) прямоугольника и его направление (по длинной стороне).
После указания этих двух точек (симметрично той поллилинии, на которой мы выбрали точку вставки), от первой указанной точки (точки вставки) у нас должен отрисоваться от собственного центра, один прямоугольник, в обе стороны от первой указанной точки, а длиной (т.е. половиной) и направлением по второй указанной точке.
Цвет прямоугольника-синий. Ширина - 0,4 мм (а длину и направление указываем второй точкой). Тип линии-пунктир . Толщина - 0,35 мм.
Данный Лисп думаю многим бы пригадился, тем кто прокладывает на "бумаге" различные сети. К тому же я думаю что ширину прямоугольника, толщину, тип и цвет линии каждый может потом сам переписать в коде лиспа под себя.
Заранее спасибо!!!

Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 99
Размер:	63.2 Кб
ID:	252193  

Просмотров: 4588
 
Непрочитано 28.12.2022, 12:16
#41
Krieger

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


Цитата:
Сообщение от Jek30 Посмотреть сообщение
Ну я попробовал дин блокам, оно конечно упрощает мою задачу, но это всё равно не то, слишком много лишних дополнительных действий, а вот в лиспе Nike эти лишние действия сведены к нулю (не, ну конечно и его наверное можно еще больше автоматизировать, но даже и в таком виде это намного лучше чем дин . блок)
По мне так наоборот. Ну да ладно.
Цитата:
Сообщение от Jek30 Посмотреть сообщение
П.С Кто-нибудь пожалуйста, поможет с решением проблемы "глобальной ширины" полилинии из поста #33 ?
Как сделать чтоб глобальная ширина полилинии учитывалась в последнем лиспе?
У меня ширина назначается, всё работает. В этот лисп надо добавить отключение привязок, иначе прямоугольники могут не получиться и прерывание команды, если точки не указаны.

----- добавлено через ~6 мин. -----
Цитата:
Сообщение от AMDen Посмотреть сообщение
- блоки разбивать не обязательно, полилинию можно также из блоков извлечь.
Каким образом?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 28.12.2022, 12:34
#42
Jek30


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
У меня ширина назначается, всё работает.
А ты говоришь точно про глобальную ширину а не про вес линии? Может ты путаешь?
Jek30 вне форума  
 
Непрочитано 28.12.2022, 13:11
#43
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Krieger Посмотреть сообщение
Каким образом?
Так
Миниатюры
Нажмите на изображение для увеличения
Название: Сохраненное изображение 2022-12-28_13-10-28.586.jpg
Просмотров: 28
Размер:	80.8 Кб
ID:	252300  
AMDen на форуме  
 
Непрочитано 28.12.2022, 17:54
#44
Krieger

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


Цитата:
Сообщение от Jek30 Посмотреть сообщение
А ты говоришь точно про глобальную ширину а не про вес линии? Может ты путаешь?
Setvar то срабатывает, только потом толщина устанавливается в функции command ("_W" "20" "20").

Код:
[Выделить все]
 (defun C:as ( / ptc dir wide ang high)
  (if (setq	ptc   (getpoint "\nТочка вставки : "))
    (if (setq dir (getpoint ptc "\nНаправление : "))
      (progn
	(setq    
		wide  (* 2 (distance ptc dir))
		ang (/ (* (angle ptc dir) 180) PI) 
		high  (getdist "\nШирина <0.4>: ")
	)
(if (= high nil)
    (setq high 0.4)
  )
  (setq	
	hwide (/ wide 2.0)
	hhigh (/ high 2.0)
	ptll  (list (- (car ptc) hwide) (- (cadr ptc) hhigh))
	ptur  (list (+ (car ptll) wide) (+ (cadr ptll) high))
  )
  
  (setvar "plinewid" 0)
  (command "_.PLINE"	   "_none" ptll	   "_W"	   "20"	   "20"	   ".X"
	   "_none" ptur	   ".Y"	   "_none" ptll	   "_none" ptur	   ".X"	   "_none" ptll	   ".Y"
	   "_none"ptur	   "_C"
	  )
  (command "_ROTATE" (entlast) "" "_none" ptc ang "")
  (command "_chprop" (entlast) "" "_layer" "0" "_color" 5 "_Lweight" 2 "_Ltscale" 2 "_Ltype" "ACAD_ISO02W100" "")
	)
      )
    )
)

Цитата:
Сообщение от AMDen Посмотреть сообщение
Так
Ну стоит галочка, дальше что?

Так-то я расчленил, чтобы показать автору, что он может воспользоваться своей программкой подсчёта длин, даже если пользуется блоками.
Миниатюры
Нажмите на изображение для увеличения
Название: 2022-12-28_214944.png
Просмотров: 21
Размер:	22.9 Кб
ID:	252307  
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 29.12.2022, 06:35
#45
Jek30


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


Цитата:
Сообщение от Krieger Посмотреть сообщение
Setvar то срабатывает, только потом толщина устанавливается в функции command ("_W" "20" "20").
О Спасибо!! А я и не знал даже.
Jek30 вне форума  
 
Непрочитано 29.12.2022, 09:53
1 | #46
AMDen

Инженер-проектировщик
 
Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 723


Цитата:
Сообщение от Krieger Посмотреть сообщение
Ну стоит галочка, дальше что?
Дальше выводится список полилиний (или прочего), содержащихся в блоках. И их уже можно считать, как если бы они были не в блоке.
AMDen на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как вставить один прямоугольник через лисп?

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эвакуация из категории А через категорию В проект 1234 Пожарная безопасность 1 02.06.2017 18:01
Изменить значение в таблице через Лисп kurstep LISP 5 14.08.2014 18:07
Цикл печати изображений в файл, через Лисп proektant-minsk LISP 7 26.09.2012 20:30
Через 25 лет стоимость эксплуатации превышает стоимость строительства ? Tyhig Архитектура 41 24.08.2011 11:00
Не могу скопировать файл один в другой через буфер обмена AnnaS AutoCAD 4 12.07.2010 22:25