|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как вставить один прямоугольник через лисп?
Регистрация: 19.08.2022
Сообщений: 71
|
||
Просмотров: 5103
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А почему не использовать дин.блок?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Во-первых у этих прямоугольников всегда разные длины (а строить несколько блоков как-то неудобно).
Во-вторых мне потом надо будет как-то быстро посчитать длины этих прямоугольников (а считаю я их через лисп, "ELEN"), в блоках же дину не извлечешь лиспом "ELEN". |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Блок - один. С дин.параметром "растягивание". А длины можно посчитать через тот же _.dataextraction
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013
|
Как вариант - вставка блока с поворотом и масштабированием
(setq Point1 (getpoint "\nТочка 1 (вставки): ")) (setq Point2 (getpoint "\nТочка 2 (направление): ")) (setq Ang (/ (* (angle Point1 Point2) 180) pi)) (setq Sca (* (distance Point1 Point2) 2)) (vl-cmdf "_.-insert" "block" Point1 Sca 1 Ang "") Последний раз редактировалось Nike, 22.12.2022 в 13:09. |
|||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013
|
(DEFUN c:as (/ Point1 Point2 Ang Sca)
(setq Point1 (getpoint "\nТочка 1 (вставки): ")) (setq Point2 (getpoint "\nТочка 2 (направление): ")) (setq Ang (/ (* (angle Point1 Point2) 180) pi)) (setq Sca (* (distance Point1 Point2) 2)) (vl-cmdf "_.-insert" "block" Point1 Sca 1 Ang "") ----- добавлено через ~2 мин. ----- А не проще будет не прямоугольником, а мультилинией? |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Имеешь ввиду полилинией?,
Цитата:
----- добавлено через ~47 мин. ----- Люди а вы знаете как вот эту строчку, в таком виде↓ ^C^C_-insert;Название чертежа(без формата и без пробелов);\1;1;0;_EXPLODE;_last;_-purge;_Blocks;"Название чертежа(без формата и без пробелов)";_No;;; Как ее прописать вместо "block" из этой строчки↓ (vl-cmdf "_.-insert" "block" Point1 Sca 1 Ang "") Но что бы в лиспе это читалось!??? Я короче подумал что это должно сработать. Но не уверен |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Ну тогда надо вычислить координаты 4 точек на расстоянии 0,4/2 от точек привязки задавая угол +-pi/2 к углу оси трубы. Когда координаты 4 точек будут вычислены, по этим координатам надо построить полилинию и потом замкнуть её. Это не сильно сложно. Непонятно только какой командой надо строить полилинию на ЛИСП.
|
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Цитата:
----- добавлено через ~1 мин. ----- _pline?? или _rectang?? |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Прямоугольник всегда строится вдоль осей X и Y. Задать поворот прямоугольнику нельзя. Надо получить координаты 4 точек и потом по этим точкам построить замкнутую полилинию. На VBA для этого есть команда addLWPLine, а на ЛИСП какая для этого используется команда? Вроде бы эта команда называется vla-addLightweightPolyline. Надо найти примеры с использованием этой команды
|
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Цитата:
(command "_.PLINE" z '(0 297) '(0 297) v "_C") где "z" и "v" (setq z (getpoint "\nУкажите базовую точку : ")) (setq v (getpoint "\nУкажите базовую точку : ")) А как координаты прописать по другому, чтоб "необходимый мне" прямоугольник построился, я не знаю. ;0 |
|||
![]() |
|
||||
Регистрация: 14.12.2008
Сообщений: 1,134
|
Что это обозначает?
Если строить через командную строку, то лучше использовать команду _rectang. Через указанные две точки находится длина прямоугольника и угол поворота. Далее строится прямоугольник заданной длины и высоты (0,4) и потом поворачивается на вычисленный угол. Можно сделать команду построения прямоугольника заданной длины, а потом повернуть его "вручную" (setq Point1 (getpoint "\nТочка 1 (вставки): ")) (setq Point2 (getpoint "\nТочка 2 (направление): ")) (setq Length (* (distance Point1 Point2) 2)) (command "_rectang @" Length "0.4") Последний раз редактировалось МишаИнженер, 23.12.2022 в 10:24. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Для создания полилинии - либо vla-addlightweightpolyline, либо entmake / entmakex.
Для вычисления координат - polar.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Nike, про привязки забыл. И вообще, на фига пользоваться командами, когда можно и без оных обойтись? ))
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Вот это, Да! Все работает как я и хотел! Спасибо Большое!!
А могу ли я тебя попросить пожалуйста еще добавить в лисп такие фишки, чтоб можно было бы менять слой, толщину, цвет и тип линии прямоугольника? (всмысле чтобы эти фишки были только в самом коде лиспа и все, в автокаде не нужны (для этого всплывающие (рамки-спрашивалки))) ![]() |
|||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013
|
Не за что. Самому подобная фигня была нужна, поэтому и ввязался.
Цитата:
![]() Цитата:
![]() |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
А ты что тоже какие-то сети проектируешь?
Цитата:
А ты что с Талдыка чтоли? ![]() Жаль что нет желания мою доработку сделать, так бы ваще лисп огонь получился бы. Ну ладно тогда просто можно в автокаде выставить нужные текущий слой, цвет... и прямоугольник построится в нужном стиле. Спасибо еще раз большое!!! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Да, тоже хороший, правда он чертит не от середины, а от края до края прямоугольника.
Вот бы еще закинуть бы как то эти строчки в лисп "Nike"↓ (list (cons 8 "ИмяСлоя") ; (cons 6 "ИмяЗагруженногоТипаЛинии") (cons 62 2) ; номер цвета (cons 370 aclnwt200) ; вес линии (cons 48 1) ; масштаб линии (cons 43 0) ; установленная глобальная ширина полилинии ) ![]() ----- добавлено через ~6 мин. ----- Автокад почему то пишет : "Не верно сформированный список на входе" |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Jek30, советую попробовать разобраться самостоятельно. Подсказка: если использовать код от Nike, то работать с системными переменными.
Nike, кажется, ты забыл про "/" в параметрах команды.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Цитата:
И всех остальных тоже благодарю: МишаИнженер и Nike. Спасибо!!! |
|||
![]() |
|
||||
Шаражпроектхалтурмонтаж Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013
|
Цитата:
(command "_chprop" (entlast) "" "_layer" "0" "_color" 5 "_Lweight" "2" "_Ltscale" 2 "_Ltype" "ACAD_ISO02W100" "") и черточку в параметрах команды (defun C:as ( / ptc dir wide ang high) Код:
|
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Всё заработало! Полностью прям как я и хотел! Большое спасибо!
|
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Цитата:
Спасибо! ----- добавлено через ~19 ч. ----- Цитата:
В общем еще важнное свойство для меня. В восемнадцатой строке твоего кода "(setvar "plinewid" 0.0)" , когда меняешь значение "глобальной ширины" например на "2" (в самом коде лиспа), и запускаешь лисп, то это свойство почему-то игнорируется и вообще ни как не учитывается. Как можно сделать чтобы оно учитывалось? P/S Читающие это, если кто знает подскажите тоже пожалуйста! Спасибо! |
|||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Извращенцы
![]() Динблоки же есть... Решается штатными средствами за 5 мин: https://youtu.be/wjORRrnRBQU Хотя, согласен, написать прогу по отрисовке прямоугольника, при изучении LISP должен каждый.
__________________
Делай хорошо, плохо само получится. |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Цитата:
Ну выделить то ладно, хоть это и долгий способ но можно через "быстрый выбор", по параметру "имя" блока. А общую длину то всех труб как узнать? Последний раз редактировалось Jek30, 28.12.2022 в 07:02. |
|||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Если вопрос только про футляры (они могут и не только прямоугольником изображаться), то не надо их рисовать ни "прямоугольниками", ни полилиниями, ни динамическими блоками.
Надо сделать обычный блок единичной длины с точкой вставки в начале футляра. И микропрограмма для вставки - Начало футляра - Конец футляра. Единичный блок вставляется в точку начало футляра под углом Начало-Конец и с масштабом по Х равным расстоянию между указанными точками. Этот масштаб и будет длиной футляра. Сумму этих длин также легко извлечь. |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Цитата:
![]() Ну а общую длину всех футляров то, как извлечь? |
|||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Цитата:
Выбрать можно по названию блока или по слою. Получить длину - Dataextraction, там даже выбирать не нужно. Всегда можно расчленить, выбрать искомые отрезки и уже твоей программой определить их длину.
__________________
Делай хорошо, плохо само получится. |
|||
![]() |
|
||||
Инженер-проектировщик Регистрация: 07.07.2016
Санкт-Петербург
Сообщений: 765
|
Цитата:
- суммарную ячейку можно сразу в извлечении добавить; - блоки разбивать не обязательно, полилинию можно также из блоков извлечь. |
|||
![]() |
|
||||
Регистрация: 19.08.2022
Сообщений: 71
|
Ну я попробовал дин блокам, оно конечно упрощает мою задачу, но это всё равно не то, слишком много лишних дополнительных действий, а вот в лиспе Nike эти лишние действия сведены к нулю (не, ну конечно и его наверное можно еще больше автоматизировать, но даже и в таком виде это намного лучше чем дин . блок)
П.С Кто-нибудь пожалуйста, поможет с решением проблемы "глобальной ширины" полилинии из поста #33 ? Как сделать чтоб глобальная ширина полилинии учитывалась в последнем лиспе? |
|||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Цитата:
Цитата:
----- добавлено через ~6 мин. ----- Каким образом?
__________________
Делай хорошо, плохо само получится. |
|||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
Цитата:
Код:
Ну стоит галочка, дальше что? Так-то я расчленил, чтобы показать автору, что он может воспользоваться своей программкой подсчёта длин, даже если пользуется блоками.
__________________
Делай хорошо, плохо само получится. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Эвакуация из категории А через категорию В | проект 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 |