|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Нужен LISP для суммы длин отрезков линни
Москва
Регистрация: 20.01.2004
Сообщений: 154
|
||
Просмотров: 144387
|
|
||||
Регистрация: 20.01.2004
Москва
Сообщений: 154
|
|
|||
![]() |
|
||||
Регистрация: 14.10.2003
Москва
Сообщений: 25
![]() |
|
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
А вот и еще... http://www.autocad.ru/docs/doc_3098.htm
Подсчитывает общую длину указанных примитивов (не только линий, но полилиний, дуг и т.д.). Впрочем приведу код здесь: Код:
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Машиностроение, Проектирование Регистрация: 15.09.2003
Москва
Сообщений: 1,113
![]() |
|
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Цитата:
Модератору (или кто там за это отвечает): зачем прикрепили эту тему? Если кому нужно и интересно - есть поиск. С прикрепленными темами - перебор (ИМХО). Я в них даже не лажу (может и зря), надоедает читать одно и то же...
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
сисадмин Регистрация: 26.08.2003
Самара
Сообщений: 1,022
![]() |
Найдите (defun и гляньте, что написано дальше....
Если нечто вроде (defun entLen .... - то для запуска нужно набрать в командной строке (entLen) - именно так, со скобками, хотя регистр символов не имеет значения. Если нечто вроде (defun C:SUMLINES .... - то для запуска нужно набрать в командной строке SUMLINES - без скобок Если Вы имели в виду что то другое - то уточните проблему |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Kos> Твой лисп почти не имеет изъянов. Кроме одного. Если в Selection set попадает, например, блок, то он ругается и не желает считать. Получается, что надо специально готовить экран для работы программы. Поясню на своем примере. На плане этажа в разных направлениях проходят, огибая препятствия, множество труб для электричества, закладываемых в бетон перекрытия. Трубы нескольких диаметров и заканчиваются они кружком, полым или сплошным, показывающим куда выводить конец трубы-вверх или вниз. Эти кружки-блоки. Каждый диаметр расположен в своем слое. Итак, надо подсчитать погонную длину, например, труб диам. 1 дюйм. Выделяю этот слой и получаю здесь линии, дуги и блоки. Далее, прежде чем применить лисп для подсчета суммарной длины (а это можно сделать рамкой всего за 2 щелчка) надо временно удалить блоки. (А в другом случае надо и другие детали удалять). Можно ли сделать так, чтобы программа игнорировала все, что она не умеет считать и выдавала бы сообщение: я подсчитала сумму того и сяго only!
|
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Цитата:
Цитата:
Цитата:
И я буду 8)
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Машиностроение, Проектирование Регистрация: 15.09.2003
Москва
Сообщений: 1,113
![]() |
Цитата:
![]() |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Цитата:
Бум смотреть. А в каком Автогаде? Писал под 2004.
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Я только одного не пойму. В первом сообщении пишет, что лисп загрузился успешно. Это понятно. А где запуск функции? Что, вот так сразу сообщение об ошибке?
Может впереди еще Код:
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Цитата:
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
На домашнем 2005 вариант от 20 сент. работает, на работе на 2004 нет. Попробую перенести из дома. Возможно, у меня некорректно выполнилось CTRL+C/V. Там русского яз. нет, но должно было работать с вопросительными знаками вместо комментариев на русском или с моим переводом. (все знаки при переводе я оставлял как было, предыдущая версия работала) Хорошо, что умеет считать в любых единицах. Результат доложу
|
|||
![]() |
|
||||
Сообщений: n/a
|
;******************************************************************************
; ; Lsum -функция определяет суммарные длинну и площадь набора линий и полилиний ; ;****************************************************************************** (defun C:lsum (/ cmdold nabor nl i j prima sum_line sum_pline asum_pline pt_list) (vl-load-com) (setq cmdold (getvar "cmdecho")) (setvar "cmdecho" 0) (princ "\n Выберите линии и 2D-полилинии:\n") (if (eq nil (setq nabor (ssget '((-4 . "<OR") (0 . "line") (0 . "lwpolyline") (-4 . "OR>") ) ) ) ) (progn (princ "***** Среди указаных объектов ни линий, ни 2D-полилиний НЕТ! *****\n")(textscr)(princ) ) (progn (setq nl (sslength nabor)) (setq i nl j 0 sum_line 0 sum_pline 0 asum_pline 0) (while (< 0 i) (setq i (1- i)) (setq prima (ssname nabor i)) (if (eq "LWPOLYLINE" (cdr (assoc 0 (entget prima)))) (progn (command "_AREA" "_o" (ssname nabor i)) (setq sum_pline (+ sum_pline (getvar "Perimeter"))) (if (or (eq 1 (cdr (assoc 70 (entget prima)))) (equal (assoc 10 (entget prima)) (assoc 10 (reverse (entget prima)))) ) (setq asum_pline (+ asum_pline (getvar "Area"))) ) ) (progn (setq sum_line (+ sum_line (vla-get-length (vlax-ename->vla-object prima)))) (setq pt_list (append pt_list (cdr (assoc 10 (entget prima))) (cdr (assoc 11 (entget prima))))) (setq j (1+ j)) ) ) ) (setvar "cmdecho" cmdold) (textscr) (princ " Выбрано: Линий - ")(princ j)(princ "; Полилиний - ")(princ (- nl j))(princ ".\n") (princ " Сумма длин линий - ")(princ sum_line)(princ "\n") (princ " Суммарный периметр полилиний - ")(princ sum_pline)(princ "\n") (princ " Сумма площадей \"замкнутых\" полилиний - ")(princ asum_pline)(princ "\n") (princ) ) ) ) (princ "\n Загружена утилита Lsum,\n") (princ " вычисляющая сумму длин линий и суммарный периметр полилиний,\n") (princ " для \"замкнутых\" полилиний вычисляется сумма площадей.\n") (princ " Для работы с утилитой введите в командной строке Lsum.\n") (textscr) (princ) |
|||
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
2 kos
Для книги "САПР на базе AutoCAD. Как это делается" был написан набор функций для подсчёта периметра примитивов. Ссылка на головную библиотечную функцию: http://www.kurganobl.ru/cad/book.jsp...=793&tn=main#b Это библиотечные функции - для создания программы, головная, естественно, должна быть "обёрнута" интерфейсной. |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Alaspher, а почему http://www.kurganobl.ru/cad/book.jsp...=793&tn=main#b адресуется только мне? Остальным тоже должно быть интересно...
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Регистрация: 11.10.2004
e•burg
Сообщений: 755
|
Цитата:
А по ссылке, естественно, может сходить каждый, кому это интересно, она-ж не запаролена. Т.е., это не: "2 kos only" :-) |
|||
![]() |
|
||||
Сообщений: n/a
|
По наводке Fantomasa
Цитата:
|
|||
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Цитата:
Цитата:
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Engineer Регистрация: 05.09.2003
New-York
Сообщений: 10,288
|
Proekt> Автокад это сплошной велодром, здесь много есть такого, что можно изобрести. LISP от KOS для подсчета суммарной длины отрезков, полилиний, дуг, сплайнов, окружностей и многоугольников, то есть всего линейного, очень хорош. Если грамотно расположить те элементы, что надо будет измерить, по слоям, или выбрать их Qselect, то эта программа моментально все просуммирует и сообщит, сколько объектов она обработала и сколько из них обсчитала, отбраковав нелинейные.
|
|||
![]() |
|
||||
Регистрация: 13.01.2005
Сообщений: 2
|
Цитата:
Подскажите пожалуйста! |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Ну что еще попробуем?
![]() Код:
|
|||
![]() |
|
||||
инженер Регистрация: 13.12.2004
Минск
Сообщений: 496
|
>>Fantomas
А мы поступили следующим образом, навесили на кнопку макрос Код:
![]() |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>Apelsinov
Спасибо исправил! Совсем забыл про мультилинию. С мультилинией вопрос сложный... Что мерять? Сумму длинн составляющих её линий или осевую линию как у тебя или самую длинную линию :?: Пока я её не включаю поскольку специалисты в разных областях могут получать некорректные результакты. |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,202
![]() |
Цитата:
Для не посвященных: от предыдущего моего отличается присутствием предварительного выбора и, наверное, скоростью....может быть ![]() А чем отличается от Фантомасовского непосвященным знать не судьба, разьве что среднюю линию для мульти считает, и еще хрень всякую... Код:
|
|||
![]() |
|
||||
Design Регистрация: 27.10.2004
Kiev
Сообщений: 57
|
Я нашел в форуме Лисп считающий сумму площадей, а мне нужен список площадей объектов в порядке их выбора :?
Apelsinov сделал удобную вещицу для списка длин линий ![]() Код:
весь лисп на второй странице этой темы можно прицепить такой же вагончик к подсчету площадей? ![]() |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>Georg
Глянь, может приблизително подойдет http://dwg.ru/forum/viewtopic.php?t=3312 . Эта прога выводит отдельные площади, правда еще плюс габариты и "габаритные" площади. Габаритные прамоугольники и надписи можно и не чертить (опция), а если они начерчены то удаляются одной командой. |
|||
![]() |
|
||||
проектировщик ОВ и ТМ Регистрация: 16.08.2005
Ростов-на-Дону
Сообщений: 106
|
Цитата:
Select objects: ; error: no function definition: RU-GEOM-GET-PERIMETER :?: :?:
__________________
Between... |
|||
![]() |
|
||||
Регистрация: 11.05.2007
Одесса
Сообщений: 2
|
Работаю в ACAD 2007
Сохранил тект от kos`а со второй странице этой темы, подгрузил, но: Command: _appload entLen.lsp successfully loaded. Command: Command: Command: entLen Unknown command "ENTLEN". Press F1 for help. методом научного тыка определил, что выполняется только один лисп : Код:
|
|||
![]() |
|
||||
Регистрация: 18.04.2007
Самара
Сообщений: 9
|
Простенько считает длину линий и выдает результат в командной строке, вдруг подойдет, (не хочу показаться навязчивым грузим ap... команда summline)
![]() (defun C:summline ( / mnv l i td p1 p2) (setq mnv (ssget) i 0 td 0) (setq l (if (null mnv) 0 (sslength mnv))) (repeat l (setq sp (entget (ssname mnv i)) i (1+ i)) (if (= (cdr (assoc 0 sp)) "LINE" ) (progn (setq p1 (cdr (assoc 10 sp)) p2 (cdr (assoc 11 sp))) (setq td (+ (distance p1 p2) td)) )) ) (princ "\nL=") (princ td) (prin1) ) |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
> you_you: лисп kos'a вызывать как (entlen), то есть со скобками. Если хочешь вызывать без скобок, замени строку
Код:
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>novichok7
Отредактированный вариант Код:
EntLEN - суммирует длинны выбранных объектов с учетом поправочного коэффициента MM - устанавливает параметры: - поправочный коэфициент - точность округления - высоту текста LP - печатает разультат. Сам результат хранится в глобальной переменной *MIP-LENGTH*. Можно посмотреть, набрав !*MIP-LENGTH* в командной строке *** Добавлено 28.04.2008 Версия команды LP с разделителем запятой Код:
Вариант с реакторами Последний раз редактировалось VVA, 10.09.2017 в 12:16. Причина: Вариант с реакторами |
|||
![]() |
|
||||
Регистрация: 19.04.2007
WWW.OTTUDA.RU
Сообщений: 3
|
Спасибо.
Одно только уточнение. А как мне сделать, чтобы значение из переменной MIP-LENGTH попало в буфер обмена Windows. Суть - я потом в Excel эти значения копирую и считаю. Т.е. сейчас мышью или клавиатурой выделяю полученное значение, потом Ctrl+C, перехожу в Excel, Ctrl+V. |
|||
![]() |
|
||||
инженер (КМ) Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837
|
[quote=novichok7]
Цитата:
![]() У меня попало ![]() Сделал так: Качаешь DOSLib вот от сюда: http://www.en.na.mcneel.com/doslib.htm Устанавливаешь, и в итоге у тебя появится "c:\Program Files\DOSLib 7.5\DOSLib17.arx" Этот DOSLib17.arx кидаешь в автозагрузку, а в коде из поста 62, после строчки Код:
Код:
|
|||
![]() |
|
||||
проектировшик Регистрация: 01.01.2007
СССР
Сообщений: 5,149
|
Цитата:
__________________
инженер проектировшик с опттом программа авто гад образование высшие |
|||
![]() |
|
||||
проектировшик Регистрация: 01.01.2007
СССР
Сообщений: 5,149
|
Цитата:
__________________
инженер проектировшик с опттом программа авто гад образование высшие |
|||
![]() |
|
||||
проектировшик Регистрация: 01.01.2007
СССР
Сообщений: 5,149
|
Цитата:
чтобы выдавала если у тебя так 290385, то выдает так 290.39 метров т.е. округляет до двух знаков после запятой, остальное просто не нужно пусть будет просто универсальный лисп а дальше уже каждый будет тюнинговать по своему VVA спасибо за ЛИСП про массивы :roll: :roll: :roll:
__________________
инженер проектировшик с опттом программа авто гад образование высшие |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
либо меняй luprec, либо использовать строку
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
проектировшик Регистрация: 01.01.2007
СССР
Сообщений: 5,149
|
VVA
1) Спасибо все работет только слово "МЕТРОВ" не пишет ![]() 2) Как можно чтобы этот ЛИСП общую длинну делил на 200, количество укруглял до целого в большую сторону, а результат копировал в буфер в виде целого числа Допустим измерели: 2398472 Результат: 11993 в буфере ну и естественно в командной строке предварительно выврдился в таком виде 11993 шт.
__________________
инженер проектировшик с опттом программа авто гад образование высшие |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Отредактированный вариант лиспа из поста №62
Добавлено: 1. Копирование результата в clipboard Windows. Библиотеки Doslib не требуется. 2. При печати "Выбрано примитивов и т.п. ..." не печатался коэффициент 3. Для тех, кто хочет, чтобы печатались единицы измерения нужно найти строчку Код:
Пример для метров Код:
Код:
Последний раз редактировалось VVA, 19.09.2015 в 12:04. Причина: Версия copyToclipboard без создания объекта IE |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>dextron3
1. см. п.3 В начало по прежнему добавь эти строки Код:
Цитата:
Код:
Было Код:
Код:
|
|||
![]() |
|
||||
проектировшик Регистрация: 01.01.2007
СССР
Сообщений: 5,149
|
VVA
какойто вирусованный лисп N75, автокад сразу вылетает предварительно минут пять повисев что то тут не так [ATTACH]1182170952.JPG[/ATTACH]
__________________
инженер проектировшик с опттом программа авто гад образование высшие |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>dextron3
Разберись со своим антивирусом или файерволлом. В автокаде с помощью ActiveX создается копия internet explorera, чтобы с помощью его методов занести данные в clipboard. Вот 4 сточки. Заносит строку ZZZ в буфер 1. Создаем объект IE Код:
Код:
Код:
Код:
|
|||
![]() |
|
||||
проектировшик Регистрация: 01.01.2007
СССР
Сообщений: 5,149
|
спасибо VVA
Но можешь без буфера простой лисп выложить, помнишь который подсчитывает длину, делит длину на 200 и округляет в большую сторону и выдает в шт. заранее благодарен clipboard что то меня не устраивает ![]() ![]() и на этом лиспе данная тема будет исчерпана :arrow:
__________________
инженер проектировшик с опттом программа авто гад образование высшие |
|||
![]() |
|
||||
Строительство Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
![]() |
Всем привет!!!
Я вот пользуюсь программой который сделал автор Крыс. Спасибо ему огромное!!!!! 8) Код:
Можно переделать программу чтоб она считала отрезки, полилинии , только ВКЛЮЧЕННЫХ слоев и выдавала список. Например: Слой 1 – общая длина ХХ Слой 11 – общая длина ХХХ Спасибо. Джек. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
>Джек Так чего остановился на mlen2? далее есть и mlen3 от Евгения Елпанова.
LISP. Подсчет длины линий на определенном слое Последний раз редактировалось VVA, 02.07.2010 в 14:24. |
|||
![]() |
|
||||
проектировшик Регистрация: 01.01.2007
СССР
Сообщений: 5,149
|
VVA
протестировал по полной спасибо лисп работает так, как и хотелось, :wink: :wink: :wink: :wink: :wink: :wink: и за лисп с массивами отдельное спасибоспасибо
__________________
инженер проектировшик с опттом программа авто гад образование высшие |
|||
![]() |
|
||||
Строительство Регистрация: 03.09.2003
Нижний Новгород
Сообщений: 81
![]() |
VVA спасибо за совет!
Но хотелось не много по другому!!!!!! Хотелось чтоб программа считала отрезки, полилинии , только ВКЛЮЧЕННЫХ слоев и выдавала список. :roll: Например: Слой 1 – общая длина ХХ Слой 11 – общая длина ХХХ Спасибо. Джек. |
|||
![]() |
|
||||
Oxypropane welder Регистрация: 29.01.2008
Unix
Сообщений: 770
|
Что делать с этими кодами, что-бы суммарную длинну выделенных линий посчитать?
Нельзя, что-нибудь без программирования для пользователя выложить? Последний раз редактировалось МИНЗДРАВ, 12.02.2008 в 19:34. Причина: Глупые умники достают!!! |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Что делать: dwg.ru/art/8
Без программирования: нет. Ну или руками выписывать на бумажку длины и потом складывать.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Последний раз редактировалось Dym, 12.02.2008 в 23:59. |
||||
![]() |
|
||||
Oxypropane welder Регистрация: 29.01.2008
Unix
Сообщений: 770
|
Прочитал. Применил. Но ни один код не работает!
Что-то пишет там, шевелится. Но заветного числа, я не вижу (ничего похожего в наборе символов там нет). Подскажите где это самое число видно должно быть? Может оно где, в специальном укромном файле сохраняется? |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Что применил-то? Советую #89
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Highway Design Регистрация: 16.09.2007
Tver
Сообщений: 27
|
Последний раз редактировалось Mikha, 15.02.2008 в 17:14. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
А ты сходи по ссылке из #83 на последнюю страничку и почитай про mlen4 и mlen41
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, подскажите пожалуйста, как поменять в вашем лиспе с поста 62 точку на запятую в результате?
МИНЗДРАВ, А для непрямой полилинии есть возможность обойтись встроенными средствами??Расскажите пожалуйста) VVA, и еще просьба....подскажите, как записать ответ в готовый текст (оверрайт вроде), предварительно приплюсовав к нему число....Заранее спасибо:-) Последний раз редактировалось Кулик Алексей aka kpblc, 26.04.2008 в 14:31. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
skkkk,
1. Добавил код в #62 3. Там такой возможности не предусматривалось. Быстро можно взять код с поста #366 И воспользоваться командой sumTE. Правда настройка разделителя (точка или запятая) будет в новой версии. Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
и невозможно предусмотреть?
![]() Разметил, долго думал, как разбить потом полилинию в местах разметки точками, пришел к тому, что на эти точки реагирует привязка "узел". А нельзя проще их делить, например взорвать полилинию как-нибудь в местах разметки? |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Команда LP переименована в LPN (Length Print to New text)
Добавлена команда LPE (Length Print to Existing text) В качестве "приемника" подсчитанной длины может выступать текст, мтекст, размер, ячейка таблицы, атрибут блока Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, огромное спасибо! Работает!! Только хотелось бы так:
ввожу "_entLen", выбираю примитивы, enter, кликаю текст для вставки. Реально? И тут нужна точка в разделителе. Забыл сразу сказать ![]() ![]() Код:
А вот с #104 такой вариант не прошел. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Ты сам то не запутаешься где точка, а где нет?
Точка на запятую меняется здесь Код:
Код:
Цитата:
^C^CENTLEN;LPE; Или команду Код:
![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Спасибо,VVA.А я разобрался, как переделать лисп из #104.
Код:
Последний раз редактировалось skkkk, 05.05.2008 в 12:17. Причина: Исправление неточностей |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, а почему если вставить
Код:
![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Как правило округление происходит с помощью функции rtos, а на ее поведение влияет системная переменная dimzin
Перед вызовом лиспа установи dimzin в 0 (setvar "dimzin" 0), а еще лучше запомни предыдущее состояние, устанви в 0, сделай что нужно и восстанови dimzin обратно. Кстати здесь в #409 выдложен лисп для суммировани и округления текстов. Команда TORK так и делает: запрашивает кол-во знавок округления и подавлять или нет незначащие 0. Команды sumTE и sumTN будут суммировать тексты и оставлять незначащие 0, если перед их вызовом установить dimzin в 0.
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, а почему Вы считаете:
Цитата:
Она влияет еще на что-то кроме подавления нулей?? Мне бы наоборот надо чтоб она равнялась нулю, а она часто меняется сама на 8, вроде при открытии другого файла, но я не уверен. Я даже кнопку себе вывел: Код:
И подскажите пожалуйста, какая переменная отвечает за значение точности в меню Формат->Единицы? |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Нет, кроме подавления нулей ни на что не влияет. Но давит нули и в размерных стилях тоже.
LUPREC - точность LUNITS - Тип единиц
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Можно ли как-нибудь вот эти действия заставить выполняться посредством лиспа, а не из командной строки:
Код:
Хотелось бы их добавить в нужный лисп, назначив, видимо, кнопке макрос Код:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Непонятно зачем в командной строке было _setvar использовать - имени переменной вполне хватает. В лиспе это выглядит (setvar "dimzin" 0) (setvar "luprec" 2).
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Дима_, с этим:
Цитата:
Код:
![]() ![]() А насчет: Цитата:
![]() Последний раз редактировалось skkkk, 15.05.2008 в 02:34. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, я успешно пользуюсь кодом с поста #107. Но вот возникла мысль, а можно ли его зациклить? То есть, нажимаю кнопку вызова лиспа, выбираю объекты, правая кнопка(=enter), кликаю текст для вставки, и тут же снова появляется приглашение программы выбрать объекты(без повторного вызова команды), и так по кругу с выходом по esc. Пробовал манипуляции с макросом с поста #106(^C^CENTLEN;LPE
![]() ![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Оставь лисп #107 как есть и добавь к нему этот кусочек
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, спасибо.............
![]() ![]() Эта тема, кстати, меня и заинтересовала изменением цвета текста лиспом. Хочется, чтобы при выборе мтекста для вставки результата, результат записывался белым цветом, при том, что исходный мтекст был другого цвета...Ну понимаете, для того, чтоб было видно, ЧТО я уже обработал, а что - нет. И хотелось бы более ли менее универсальный совет, т.е. чтоб я мог добавить, допустим, код и в другой лисп, например для суммы мтекстов....... Пробовал как-то совмещать лиспы с кодом из вышеуказанной ссылки, но знаний пока маловато... |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
skkkk,
Модифицировал код из поста №107 Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, дай Бог Вам детишек смышленных и веселых
![]() ![]() ![]() |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, а реально лиспом сделать следующее? Есть некое количество вертикальных отрезков. Под каждым снизу с небольшим смещением расположены вертикально ориентированные мтексты. Выделить скопом все отрезки, затем выделить все тексты. И чтобы длина каждой линии отобразилась с коэффициентом в "своем", т.е. близлежащем тексте. Расстояние между отрезками разное.
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
dwg.ru/art/8
+ FAQ
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
skkkk, Читай здесь Связь графических объектов и текста
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
См.подпись VVA.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
На один пост вверх посмотри.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Цитата:
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Руководитель проектной организации Регистрация: 15.09.2009
Москва
Сообщений: 90
|
У меня lisp с этой команды начинается. Kos об этом позаботился.
http://forum.dwg.ru/showpost.php?p=24124&postcount=42 Последний раз редактировалось Shish, 10.12.2009 в 13:47. |
|||
![]() |
|
||||
Самое быстрое и простое решение в данном случае - переустановка автокада...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Руководитель проектной организации Регистрация: 15.09.2009
Москва
Сообщений: 90
|
Блин, плохо... Кнопочки, цвета, крестики, все ж опять настраивать... Можно все настройки каким-нибудь одним файлом сохранить? Понимаю, что можно и F1 нажать, но... лень.
Жень, спасибо за помощь! Переустановил, все работает. Рабочее пространство сохранил мастером переноса пользовательских настроек. Последний раз редактировалось Shish, 11.12.2009 в 13:32. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 03.10.2010
Сообщений: 31
|
Добрый день! Подскажите пожалуйста.
Есть чертеж, схема сети, на ней разными слоями нанесены емкости кабелей. Необходимо сосчитать их суммарную длину и умножить на некий коэффициент, который соответствует реальному расстоянию. Можно это как то сделать автоматически? На первой взяд lips, он отлично считает выбеленные отрезки, но может быть как-то можно выделить сразу все отрезки одного слоя на модели? Спасибо большое! |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Остальные варианты LISP. Подсчет длины линий на определенном слое Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 24.06.2011
Сообщений: 4
|
Всем привет.
Нужна программа на LISP, которая будет подсчитывать количество примитивов в каждом слое и потом записывать все это в XLS файл. Заранее Большое Спасибо. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
_.qselect, выписать на бумажку, вбить в ексль.
Большое Пожалста.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Есть пара встречных вопросов:
1. А как быть с примитивами, которые находятся внутри блоков или внешних ссылок? 2. Что сделано самостоятельно и на чем спотык?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
AutoS, Команду MLEN41 из #150 смотрел?
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Vilen, А этот вариант не подойдет?
Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Всем привет. Есть рельеф земли в виде полилинии, нужно посчитать расстояние по рельефу. То есть на каждом участке суммировать с предыдущим. Смотрел здесь http://forum.dwg.ru/showpost.php?p=734502&postcount=19 но что то никак не выбрал нужную. Подскажите, пожалуйста. 4 км считать вручную через свойства тяжко
![]() |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Рyslan, после просмотра файла сложилось впечатление, что Вам ведь не посчитать суммарную длину нужно (такого рода скриптов море), а вывести расстояние от начальной точки, до конца каждого отрезка, строго соблюдая последовательность и рельеф. А это несколько другая задача.
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Да да, на каждом участке рельефа сумма предыдущего и данного участка 0, 0+20, 0+20+30, 0+20+50 и так далее. И участки могут быть разной длины. Вообще рельеф идет одной полилинией. Я просто разбил ее, хотел считать вручную. Потом стал искать лисп. Пока что в Веткаде спецкалькулятором тренируюсь. Но тут текст еще корректировать нужно, поворачивать его . Но он действительно суммирует длины по участкам, уже легче
![]() |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
Я бы попробовал без всякого программирования, порезанные отрезки загнать в ексель (_DATAEXTRACTION), с длиной и координатой Х начальной точки, отсортировал бы по координате и потом бы, в нижних ячейках просуммировал бы длины как нужно и вставил бы таблицу в акад, растянув и задав соответствующее форматирование.
Прошу прощения, стандартный DATAEXTRACTION координаты вершин полилинии не возващает. Последний раз редактировалось Boxa, 24.05.2017 в 08:29. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Есть расстояния между объектами (линейные), есть расстояние по рельефу. Да нужны "наклонные полилинии", причем еще рельеф (полилинию) разбить нужно по участкам)
Вот сейчас спецкалькулятором один профиль посчитал по рельефу, конечно быстрее чем через свойства, но...может можно еще быстрее ![]() Последний раз редактировалось Рyslan, 24.05.2017 в 09:10. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Рyslan, набросал наскоро, бегло потестировал, вроде полет нормальный.
Сначала (временно) убираем в сторону все вертикальные объекты, не то обработает все не так, как надо (не стал делать их обработку). Затем указываем точку, от которой берется Y-координата для вставки текстов, затем указываем начальную точку (самую первую вершину первой линии, где 0.000). Код:
----- добавлено через ~6 мин. ----- LISP. Разорвать объекты в точках пересечения. BreakObjects. ----- добавлено через ~22 мин. ----- Посмотрел скрин-пример в #169 - стало ясно, что не нужно везде делать префикс "0.000+", да и два знака после запятой там. Исправил Последний раз редактировалось skkkk, 24.05.2017 в 12:51. |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Рyslan, а как? С выбранного места она считает с любого, но первое число - 0. Как проге "объяснить", сколько было до этого линий, и какая стартовая длина? В число первых запросов добавить выбор объекта (текстового) из которого возьмется начальная длина? Или просто запросить число?
|
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Ладно, что-то я наглею ))) Пусть так останется. Вот у меня например 3 профиля, первый я разбил и от 0 посчитал. Вторую полилинию стыкую с первой, также разбиваю, убираю подсчет от 0 и заново уже две линии считаю, точно также с третьей. Тогда все цифры получаются по порядку, просто их потом на разные профиля раскидал.
![]() ![]() ![]() |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Ладно уж, это ж мелочи
![]() Добавил запрос стартовой длины. Если на этот запрос нажать Enter, то будет ноль. Обновил в #172. Если будет удобнее, можно вместо ввода длины взять ее с текста. Это несложно. ----- добавлено через ~8 мин. ----- Тут есть еще один момент. Надо, чтобы направление полилинии, обозначающей поверхность земли, до разбивки на куски по 20 м (по горизонтали) было слева направо. Проверить можно, выбрав полилинию и потыкать пункт "Вершины" в свойствах. Обратить - с помощью _PEDIT. Просто прога сканирует у каждого куска (разбитой полилинии) вершины от левой к правой (от начальной к конечной), берет новый кусок справа, ставит его длину - и так, пока не кончатся куски. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
http://www.cadtutor.net/forum/showth...l=1#post405249
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
VVA, никак не возьму в толк: что значит "по часовой". С замкнутыми - ясно, а вот у меня строго горизонтальная полилиния с направлением обхода слева на право. Она - по часовой или против в данном контексте? Или сверху вниз - она как? Как-то пытался связаться с этим "клоквайзом", чтобы определить угол поворота полилинии - влево или вправо по ходу движения (кажется, нашел функцию Евгения Елпанова) - сломал весь мозг, с моей логикой она не увязалась, и я сделал по-другому. Попробовал коды из твоей ссылки - еще больше сбился с толку. PL-CW вообще ничего не делает, а PL-CCW меняет направление на обратное. А как сделать по-любому слева направо, так и не понял.
Рyslan, кстати, ты пока нет-нет да и проверяй результаты. Выбери все полилинии до какого-то текста с их суммой и проверь суммарную длину (думаю, знаешь, как). Мало ли чего. ----- добавлено через ~21 мин. ----- Только сейчас увидел эту дописку. Разница в 0.01 - это старая как мир (программирования) проблема - результат вычислений над числами с плавающей запятой. Ты в первый раз скорее всего прогнал прогой весь профиль, а второй - по частям, вводя на началах разбитых фрагментов длину с клавиатуры с двумя знаками после запятой. В первом случае третий знак после запятой не пишется, но участвует в расчетах. И в сумме он может дать, например, 0.004 или 0.005. При округлении до двух знаков третий знак теряется, и не складывается далее с последующими, округляясь по математическим правилам: 0.04 -> 0.0, а 0.05 -> 0.1. Во втором случае третий знак потерялся, и не просуммировался с последующими значениями, поэтому и разница в 0.1. Чтобы этого избежать, надо в расчетах брать не все знаки после запятой, а переводить обратно в число строку, которая вписывается в текст. Конечно, тысячная метра для геодезии - фигня, но осадок остается, и некоторые придирчивые проверялы прям потирают ручки при виде подобных оплошностей. Подправлю по возможности, вместе с обработкой направления полилиний, когда пойму, как это сделать. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Цитата:
По поводу PL-CW, PL-CCW - в основе код Евгения Елпанова, корни нужно искать на caduser'e и там, по моему, для точного определения направления нужно 3 точки. Значит считается, что обход линии идет по часовой и нет необходимости реверсировать линию Значит считается, что обход линии идет по часовой и нужно реверсировать линию
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Цитата:
![]() Где я и что делаю не так? В контексте последнего кода подумываю над тем, чтобы просто проверять, на каждой новой полилинии в цикле, начало ли полилинии "нащупалось", и если нет, то просто реверсировать ее. |
|||
![]() |
|
||||
Регистрация: 09.10.2006
Санкт-Петербург
Сообщений: 99
|
По-моему, что-то вы перемудрили. Исходная задача какая: есть единая полилиния рельефа, и надо записать в графе профиля расстояния по ней с определённым шагом по пикетажу. Это можно сделать в одном цикле, и не надо ничего рвать и выбирать каждый раз новую полилинию. Направление исходной, конечно, надо проверить.
В общем, какой-то такой функционал получается: Код:
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
Вообще-то - да. Хотя, я бы сказал, "недомудрил". Вообще ничего не продумывал особо. Поэтому и сразу назвал команду "TEST". Полилинию, конечно, можно не разбивать. Просто в файле с исходной задачей она была уже разорванна в клочья. Я подумал, что это результат работы какой-то программы, поэтому не стал вдаваться в подробности и сделал применительно к файлу-задаче. К тому моменту, как я прочитал (что надо еще и разрывать), добрая часть кода уже родилась
![]() Я подумал вот что. Надо дать Рyslan'у немного поработать "в бою", может, он еще что выявит. И в случае необходимости, чтобы код стал действительно рабочим, надо будет чуток доработать его с учетом: 1. Не бить линию на куски. 2. Добавить проверку направления обхода вершин. 3. Добавить обработку плавающей точки. Вот тут момент спорный. Если сделать, чтобы результат обработки линий по частям (за два-три захода со вводом вместо нуля предыдущего значения) совпадал с результатом обработки цельной полилинии, то в итоге конечная цифра будет до нескольких десятых метра расходится с длиной линии в свойствах. Даже и не знаю, как тут правильно поступить. Может, разумнее будет вводить стартовую длину до трех знаков после запятой? Или запрашивать не число, а линию и брать длину с нее? Вопрос еще в том, насколько эта программа перейдет в разряд необходимых, может, это просто разовая (двух-) задача? ----- добавлено через 58 сек. ----- P.S.: P_S, кстати, у Вас теряется последний текст. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Всем привет! Спасибо за помощь! Я полилинию разбивал, чтобы через свойства посчитать длину. Но если можно будет не разбивая посчитать, то это вообще шикарно! skkkk я результаты подсчета после твоей программы не проверял )))) надеюсь там все ок ))))
|
|||
![]() |
|
||||
Регистрация: 20.03.2008
Сообщений: 2,680
|
В том файле, на котором я делал, было все ОК. Это я имел в виду, что вдруг на других рабочих файлах какая из полилиний как-то "обратилась" к лесу задом. Хотя, если начальная была слева направо, то и результирующие куски будут такими же.
Вообще, конечно, я считаю, надежнее будет использовать алгоритм от P_S. Даже если не уследил за направлением полилинии, косяк незамеченным точно не останется - ноль справа будет. Единственное, что я еще заметил, что тексты там расставляются не строго по центру каждый над своей линией, а со смещением влево на пол высоты текста. Выравнивание у текстов - слева вверх. Если, это, конечно, важно. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
P_S, skkkk Привет! Спасибо, последнюю программу посмотрел, все работает. Вопрос, а если полилиния (рельеф) разбит не на равные участки, шаг текста не получится задать одной цифрой. Можно сделать чтобы текст выставлялся над точками полилинии (без ввода шага)?
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
А, может, все же в отдельную тему?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Здесь уже ничего - не станешь же фильтровать посты...
А так - сумма длин кривых и расстановка текста разные задачи. Создай новую тему, задай там вопрос, упомяни, что "начало обсуждения там-то, создал отдельную тему по просьбе модератора" - и все будет хорошо.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 25.07.2007
Сообщений: 2,518
|
Вообще-то этот текст и есть сумма длин кривых и программа та же. Чего плодить тему. Я думал ты хочешь эти программы вынести в другую тему. Типа "Подсчет расстояний в профиле по рельефу земли" для оформления подвала чертежа продольного профиля трубопровода
|
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Можно. Редактируй.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
Уважаемые форумчане, подскажите, как изменить ЛИСП из 104 сообщения, чтобы при выполнении он вписывал существующее значение переменной, а при нажатии на Enter принимал это же значение
Пытался сделать так, текущее значение получаю, но после нажатия Enter число не принимается, и приходится все равно вручную вбивать нужную цифру. Код:
Последний раз редактировалось Loolik, 23.04.2018 в 11:25. |
|||
![]() |
|
||||
Цитата:
Код:
Последний раз редактировалось koMon, 23.04.2018 в 15:43. |
||||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
Спасибо koMon, код работает!
Пытаюсь модифицировать ЛИСП из поста 104 и сделать две команды (но в идеале одну):
Если есть возможность помогите с "однокомандной хотелкой" Len2TX . Код:
Последний раз редактировалось Loolik, 24.04.2018 в 01:01. |
|||
![]() |
|
||||
Loolik, если коротенько обобщить, то длину каких примитивов нужно считать и в какие вставлять? По мне, так лучше выстругать новые грабли)
|
||||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
koMon, постараюсь перефразировать)
Собственно, взят код из поста 104. Добавляю в конце команду: Len2ET - вставка результата функции EntLen в существующий Текст/МТекст/Ячейку таблицы/Атрибут/МВыноску. Эта команда работает как положено, за исключением вставки текста в ячейку таблицы с пустым текстом. Своими силами исправить ошибку не смогу Код:
Интуитивно понимаю, что не работает эта часть кода Код:
|
|||
![]() |
|
||||
Вот. Вы Entlen-ом суммарную длину каких-то определённых примитивов считаете, ну там отрезок, полилиния..? Потому как Entlen из #104, по ходу, будет считать всё, что считается.
|
||||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Добавлена опция "Точка"
Код:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 27.04.2018 в 10:55. Причина: Добавлена мультивыноска ("MULTILEADER") |
|||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
Спасибо, но результат выполнения "Точка для пустой ячейки" создает новый текстовый примитив.
А возможно реализовать вставку текста именно в пустую ячейку таблицы, причем без дополнительного выбора в контекстном меню? Т.е. чтобы TTC_Paste понимала, что я выбрал либо текстосодержащий объект (МТекст, Текст, Артибут, ЯчейкуТаблицыСТекстом), либо ПустуюЯчейкуТаблицы? |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Проблема как понять, что ты выбрал пустую ячейку? Ведь в ней ничего нет, соответственно выбрать ничего нельзя.
Ну так и ткни им в пустую ячейку и посмотри на результат
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
Происходит создание текста поверх таблицы. В содержимое ячейки ничего не вписывается. Проверял на AutoCAD 2009x86, AutoCAD 2015x64.
Последний раз редактировалось Loolik, 25.04.2018 в 14:27. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
VVA, спасибо за помощь, работает отлично.
Осталась последняя хотелка, но затыкаюсь в одном месте. Программингом не владею, делаю свою команду по подобию, которая будет делать следующее:
Код:
Код:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Loolik, Так не пойдет. Я обновил #205 еще раз. Добавил возможность передать параметр "Точка" (почитай коментарии в начале)
Соответственно для вставки в ячейку таблицы своя команда Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Регистрация: 10.10.2008
Сообщений: 26
|
Цитата:
Вдруг кому пригодится результат - запускать командой LEN2TX Код:
Последний раз редактировалось Loolik, 27.04.2018 в 11:07. Причина: Добавлена обработка МВыносок |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Когда писалась эта программа мультивыносок не было как класса. Обновил #205 Правки минимальные (добавить "MULTILEADER" в перечень)
Цитата:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Loolik,
я-таки, в промежутках между, выстругал альтернативные к-рабли)... ![]() |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
Loolik,
Happy husing!-) Хочу отметить, что проверок на заблокированность текущего слоя, слоёв объектов, выбранных для вставки суммы не производится, то есть вполне возможно аварийное завершение команды. Новый текст вставляется в кликнутую точку с в текущем слое с текущим стилем и высотой 5 единиц. Последний раз редактировалось koMon, 26.05.2018 в 15:55. |
||||
![]() |
|
||||
Оснащение проходки горных выработок, ПОС, нормоконтроль, КР, АР Блог Регистрация: 30.01.2008
Ленинград
Сообщений: 19,476
|
На мой взгляд это был самый лучший вариант от Mike - lisp для суммирования длин линий отрезков полилиний и т.п.
Сколько же вы тут написали... Ключевые слова. Макрос, длина линий, длина отрезков, длина полилиний, Lsum , Mike - lisp , tyhig (мой ник только ключевое слово для поиска). Цитата:
;****************************************************************************** ; ; Lsum -функция определяет суммарные длинну и площадь набора линий и полилиний ; ;****************************************************************************** (defun C:lsum (/ cmdold nabor nl i j prima sum_line sum_pline asum_pline pt_list) (vl-load-com) (setq cmdold (getvar "cmdecho")) (setvar "cmdecho" 0) (princ "\n Выберите линии и 2D-полилинии:\n") (if (eq nil (setq nabor (ssget '((-4 . "<OR") (0 . "line") (0 . "lwpolyline") (-4 . "OR>") ) ) ) ) (progn (princ "***** Среди указаных объектов ни линий, ни 2D-полилиний НЕТ! *****\n")(textscr)(princ) ) (progn (setq nl (sslength nabor)) (setq i nl j 0 sum_line 0 sum_pline 0 asum_pline 0) (while (< 0 i) (setq i (1- i)) (setq prima (ssname nabor i)) (if (eq "LWPOLYLINE" (cdr (assoc 0 (entget prima)))) (progn (command "_AREA" "_o" (ssname nabor i)) (setq sum_pline (+ sum_pline (getvar "Perimeter"))) (if (or (eq 1 (cdr (assoc 70 (entget prima)))) (equal (assoc 10 (entget prima)) (assoc 10 (reverse (entget prima)))) ) (setq asum_pline (+ asum_pline (getvar "Area"))) ) ) (progn (setq sum_line (+ sum_line (vla-get-length (vlax-ename->vla-object prima)))) (setq pt_list (append pt_list (cdr (assoc 10 (entget prima))) (cdr (assoc 11 (entget prima))))) (setq j (1+ j)) ) ) ) (setvar "cmdecho" cmdold) (textscr) (princ " Выбрано: Линий - ")(princ j)(princ "; Полилиний - ")(princ (- nl j))(princ ".\n") (princ " Сумма длин линий - ")(princ sum_line)(princ "\n") (princ " Суммарный периметр полилиний - ")(princ sum_pline)(princ "\n") (princ " Сумма площадей \"замкнутых\" полилиний - ")(princ asum_pline)(princ "\n") (princ) ) ) ) (princ "\n Загружена утилита Lsum,\n") (princ " вычисляющая сумму длин линий и суммарный периметр полилиний,\n") (princ " для \"замкнутых\" полилиний вычисляется сумма площадей.\n") (princ " Для работы с утилитой введите в командной строке Lsum.\n") (textscr) (princ)
__________________
"Безвыходных ситуаций не бывает" барон Мюнхаузен Последний раз редактировалось Tyhig, 19.12.2022 в 17:14. |
|||
![]() |