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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016

Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016

Ответ
Поиск в этой теме
Непрочитано 24.07.2020, 12:42 #1
Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016
sergius7900
 
Регистрация: 09.04.2011
Сообщений: 45

Может кто сможет написать и поделиться Lisp по такой задаче (низкий поклон):

Есть размер в котором будет отображаться количество шагов , шаг и результат произведения - 20х200=4000
4000 - не перебитый размер и меняется при перемещении ручки
200 (шаг) - который можно менять на любое другое положительное число.

ЦЕЛЬ: сделать так что бы при изменении числа 4000 менялось количество шагов

к примеру было: 20х200=4000 перетащили ручку размера и величина размера теперь 4800 и автоматически выражение принимает вид 24х200=4800, а также
что бы можно было ещё и поменять величину 200(шаг) на например на 400 и автоматически выражение принимает вид 12х400=4800

P.S. Предполагаю, как вариант, что размер будет создаваться уже из под кнопки LISP для размера с заведомо запрограммированными действиями, описанные выше. Но может будет легче реализовать сие кликнув уже по готовому размеру (тогда можно редактировать ранее выполненные чертежи)
Просмотров: 9899
 
Непрочитано 24.07.2020, 13:15
#2
Maksim7enov


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


Может легче сделать поле в текстовой части размера? Вставляем поле с формулой в текст размера и все.
Maksim7enov вне форума  
 
Непрочитано 24.07.2020, 13:53
1 | 1 #3
skkkk


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


Думаю, что тут нужно копать в сторону динамических блоков с полями. Непереопределенных размеров подобного формата в Автокаде я не припомню. Могу ошибаться, т.к. по роду деятельности они мне не нужны и я мог не углядеть.
По блоку - вот набросал прототип-концепт за пару минут в качестве примера.
Миниатюры
Нажмите на изображение для увеличения
Название: 2020-07-24 at 13-38-54.gif
Просмотров: 193
Размер:	1.46 Мб
ID:	228552  
Вложения
Тип файла: dwg
DWG 2010
Пример блока.dwg (95.8 Кб, 42 просмотров)
skkkk вне форума  
 
Непрочитано 24.07.2020, 14:03
1 | #4
skkkk


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


Maksim7enov, кстати, тоже вариант, что-то сразу не подумал, только менять шаг довольно трудоемко, или выводить его в отдельный текст со ссылкой поля на него.
В приложенном файле меняем содержимое красного текста на другое число и делаем _REGEN.
Если скопировать размер в паре со своим текстом, а не сам по себе, то эта пара начнет работать независимо.
Или вообще создать несколько разных размеров каждый со своим шагом.
Вложения
Тип файла: dwg
DWG 2010
Пример блока 2.dwg (81.0 Кб, 40 просмотров)
skkkk вне форума  
 
Непрочитано 24.07.2020, 14:10
1 | #5
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,096


sergius7900, этот вариант не подходит?
v.psk вне форума  
 
Непрочитано 24.07.2020, 14:44
| 1 #6
Maksim7enov


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


Цитата:
Сообщение от skkkk Посмотреть сообщение
В приложенном файле меняем содержимое красного текста на другое число и делаем _REGEN.
Я думал надо было получить, что-то типо этого!
Тогда лучше через блок с атрибутами, там задавать шаг для растягивания размера. Если использовать лисп то при измерении размера придется постоянно вызывать его и исправлять размер. Я бы для таких целей использовал лучше блок!
Вложения
Тип файла: dwg
DWG 2013
Размер с полем.dwg (39.5 Кб, 44 просмотров)
Maksim7enov вне форума  
 
Непрочитано 24.07.2020, 14:47
#7
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,096


Maksim7enov, зато лисп сработает с любым количеством размеров, в том числе параллельных и уже существующих.
v.psk вне форума  
 
Непрочитано 24.07.2020, 14:54
#8
Maksim7enov


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


Цитата:
Сообщение от v.psk Посмотреть сообщение
любым количеством размеров
Да, но стоит изменить размер после выполнения лиспа и все!
Maksim7enov вне форума  
 
Непрочитано 24.07.2020, 15:11
#9
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,096


Maksim7enov, ну это проблема еще раз запустить лисп... это не тяжело.
кроме того, предполагаю что эти размеры нужны скорее всего для полей дополнительного армирования итп...
тогда дополнительное удобство заключается в не кратной целому числу привязке поля, и выбранные в одну кучу размерные цепочки будут обрабатываться по разному - некратные целому размеры будут оставаться без изменений, кратные - переписываться.
если я угадал, и размерная цепочка нужна для доп армирования - проще тогда ее встроить в динамический блок доп. армирования
v.psk вне форума  
 
Непрочитано 24.07.2020, 15:21
#10
Maksim7enov


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


Он же не работает с размерами у которых уже изменено текстовое поле.
Если изменять 1 раз и потом не менять размер, конечно с полями и не стоит возиться.
Того 3 варианта, кому какой приглянулся.
Maksim7enov вне форума  
 
Непрочитано 24.07.2020, 16:02
#11
skkkk


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


Цитата:
Сообщение от v.psk Посмотреть сообщение
этот вариант не подходит?
v.psk, проверил лисп. При изменении уже обработанных размеров он их повторно не обрабатывает. Нужно сначала убирать лишние символы (кроме значения самого размера) - тогда работает. Это, конечно, нетрудно исправить. В целом да, хороший способ. Даже, пожалуй лучше блоков или размеров с полями. Потому что используется штатный функционал по-максимуму в том смысле, что можно использовать ассоциативность, строить размеры стандартно тоже удобнее, нежели возиться с блоками, полями, ибо с ними что-то можно легко напутать и т.д.
skkkk вне форума  
 
Непрочитано 24.07.2020, 16:07
#12
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


можно вариант #2 с формулой сделать в виде лиспа с выбором точки выносной линии размера, которую тянуть, с назначением кратного коэффициента и переформатированием размерного текста с обновлением поля в формуле.
koMon вне форума  
 
Непрочитано 24.07.2020, 16:35
#13
skkkk


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


Цитата:
Сообщение от koMon Посмотреть сообщение
вариант #2 с формулой сделать в виде лиспа с выбором точки выносной линии размера, которую тянуть, с назначением кратного коэффициента и переформатированием размерного текста с обновлением поля в формуле
На мой взгляд, оптимальнее подправить код по ссылке из #2, чтобы он сначала сносил переопределение, а затем обрабатывал по новой. Поля всё-таки довольно сильно загружают чертеж, если их много.
skkkk вне форума  
 
Непрочитано 24.07.2020, 16:36
#14
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,096


Цитата:
Сообщение от skkkk Посмотреть сообщение
. Это, конечно, нетрудно исправить.
Да, или лисп, или в свойствах размера удалить данные (для перебитых размеров в поле "текстовая строка"), тогда вернется вычисленное значение
v.psk вне форума  
 
Непрочитано 24.07.2020, 16:50
#15
koMon


 
Блог
 
Регистрация: 26.09.2017
Сообщений: 1,665


skkkk, ну если только не перегружать! а так будешь постоянно думать какой размер обработал, а какой нет и потом если куда уйдёт...
koMon вне форума  
 
Непрочитано 24.07.2020, 17:12
#16
skkkk


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


koMon, я в таких случаях для контроля обычно добавляю в код изменение цвета обработанных примитивов.
Offtop: Вообще, прикольно у нас тут
Сами порешали всё за ТС'a, подобрали оптимальный вариант, уже чуть ли не к реализации вплотную подошли, а сейчас окажется какая-то ма-а-а-аленькая мелочь в ТЗ, которая перевернет всё с ног на голову
skkkk вне форума  
 
Автор темы   Непрочитано 24.07.2020, 17:57
#17
sergius7900


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


Цитата:
Сообщение от v.psk Посмотреть сообщение
sergius7900, этот вариант не подходит?
Подхотит (только можно ещё напильником подработать, чуть)

Можно во 2-м приближении сделать так , что бы шаг можно было бы менять в уже "обработанном" размере LISP-ом

НАПРИМЕР:
4х400=1600 - (выражение обработано Вашим LISP-ом)

Захожу в редактор размера и меняю 400 на 200 (при этом чтобы связка 8х200=1600 оставалась рабочей!!! ) после редактирования. То есть чтобы я мог и в дальнейшем скопировать этот размер и использовать на другом фрагменте, перебивая ШАГ.

Последний раз редактировалось sergius7900, 27.07.2020 в 08:59.
sergius7900 вне форума  
 
Автор темы   Непрочитано 24.07.2020, 18:16
#18
sergius7900


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


Цитата:
Сообщение от skkkk Посмотреть сообщение

DWG 2010 Пример блока 2.dwg (81.0 Кб, 3 просмотров)
к посту #4
Можно перебить на тип ПОВЁРНУТЫЙ РАЗМЕР (сам не смог), но имея на руках 2-3 варианта можно выбрать наилучший...

Lisp приложение если коллега (v.psk) допилит и Ваш (skkkk) дополненный вариант - будем посмотреть/испытывать.
Вложения
Тип файла: dwg
DWG 2010
Вот пример для чего размер.dwg (149.1 Кб, 38 просмотров)
sergius7900 вне форума  
 
Непрочитано 24.07.2020, 21:29
1 | #19
StupidDuck


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


Код:
[Выделить все]
 (defun c:dim+spacing ( / spacing selection)
(vl-load-com)
(vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
(initget 7)
(setq spacing (getint "\nВведите шаг:"))
(if (setq selection (ssget "_:A:L" '((0 . "DIMENSION"))))
(progn
(foreach x (mapcar (function vlax-ename->vla-object)
			  (vl-remove-if 'listp (mapcar 'cadr (ssnamex selection))))
(vla-put-TextOverride x
  (strcat 			      
	"%<\\AcExpr ("
  	"%<\\AcObjProp Object(%<\\_ObjId " (GET-OBJECTID-x86-x64 x) ">%).Measurement \\f \"%lu2%pr0\">%" "/"
	(itoa spacing)
				") \\f \"%lu2%pr0\">%" "x" (itoa spacing) "=<>")))
(vl-cmdf "_.UPDATEFIELD" selection "")
(princ "\nВсе нормуль...")
)
(princ "\n×Чтото не то...")
  )
(vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
(princ)
)
GET-OBJECTID-x86-x64 нужно скачать на форуме

Последний раз редактировалось StupidDuck, 26.07.2020 в 20:18. Причина: (initget 7)
StupidDuck вне форума  
 
Непрочитано 24.07.2020, 21:44
#20
v.psk

конструктор
 
Регистрация: 14.08.2014
Псков
Сообщений: 7,096


StupidDuck, спасибо, пока не проверить...
// если что, на всякий случай, лисп выше не мой, его написал ув. VVA.
v.psk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужен LISP на "обычный" размер n х ШАГ= ПРОИЗВЕДЕНИЕ в Autocad 2016

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autocad 2019. Не работает справка по Visual LISP (Autocad 2019 Help: Developer Documentation) modest-bp AutoCAD 3 24.07.2020 00:02
Максимальный возможный размер экрана интерфейса AutoCAD Малюк AutoCAD 7 01.07.2019 14:26
Проблема создания связи таблиц в AutoCAD 2016 с MS Excel 2016 alterfiesta AutoCAD 15 27.06.2019 12:29
lisp из autocad 2004 некорректно выполняется в autocad 2008 sid_geo LISP 13 11.10.2012 11:20
Произведение нескольких чисел на чертеже? Нужен Lisp по типу sum.lsp UnAtom LISP 2 24.11.2010 20:18