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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп, в котором при смене текущего масштаба аннотаций cannoscale так же менялся бы текущий масштаб типов линий celtscale

Лисп, в котором при смене текущего масштаба аннотаций cannoscale так же менялся бы текущий масштаб типов линий celtscale

Ответ
Поиск в этой теме
Непрочитано 13.10.2018, 12:51 #1
Лисп, в котором при смене текущего масштаба аннотаций cannoscale так же менялся бы текущий масштаб типов линий celtscale
Vitaliy_Bazanin
 
Регистрация: 21.11.2013
Сообщений: 11

Здравствуйте! Помогите, пожалуйста, создать код, в котором при смене текущего масштаба аннотаций cannoscale так же менялся бы текущий масштаб типов линий celtscale. Т.е. структура кода: ЕСЛИ cannoscale "1:200", ТО celtscale 200, но в качестве переменной, которая присваивается celtscale, бралось бы выражение n=Единицы чертежа/Единицы листа. Это нужно, чтобы работало не только на масштабах уменьшения, но и на масштабах увеличения. Например, cannoscale "1:200", celtscale 200/1=200; cannoscale 10:1, celtscale 1/10=0,1.
Похожую тему нашел тут https://forums.autodesk.com/t5/visua...e/td-p/2250297. В начале темы там похожий код:
Код:
[Выделить все]
 
(if
(= cannoscale "1/4\" = 1'-0")
(setvar "ltscale" 48)
) ; if
только привязка идет к названию аннотативного масштаба, а не к его единицам, т.е. это тогда нужно прописывать условие для всех аннотативных масштабов. Но даже в таком виде лисп не работает. Далее в обсуждении они уже перешли совсем к дургому коду.

Последний раз редактировалось Vitaliy_Bazanin, 14.10.2018 в 12:46.
Просмотров: 1388
 
Непрочитано 13.10.2018, 13:29
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Читаешь cannoscale, по названию в словаре ACAD_SCALELIST находишь запись, читаешь ее значения - и устанавливаешь celtscale или ltscale.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.10.2018, 19:35
#3
Vitaliy_Bazanin


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


К сожалению, не силен в написании лиспов, не могли бы Вы, пожалуйста, написать конкретно код?

----- добавлено через ~17 ч. -----
Нашел еще одну тему http://forums.augi.com/showthread.ph...nnoscale/page2.
Код вроде бы похож на то, что имел ввиду Алексей.
Код:
[Выделить все]
 
(defun c:SETDIMSCALE ()

(setq a (getvar "cannoscalevalue" )
(setq dhs
(	
cond
((= a (/ 1.0 192.0)) 30.0) ;1/16"
((= a (/ 1.0 128.0)) 30.0) ;3/32"
((= a (/ 1.0 96.0)) 20.0)	;1/8"
((= a (/ 1.0 64.0)) 15.0)	;3/16"
((= a (/ 1.0 48.0)) 10.0)	;1/4"
((= a (/ 1.0 24.0)) 7.0)	;1/2"
((= a (/ 1.0 16.0)) 5.0)	;3/4"
((= a 1.0) (/ 5.0 24.0))	;1:1
((= a (/ 1.0 240.0)) 50.0) ;1"=20'
((= a (/ 1.0 480.0)) 100.0) ;1"=40'
)
(setvar "dimscale" dhs)
)
Только не пойму, как список настроек аннотативных масштабов достать из словаря и как назначить выполнение лиспа не на команду, а всегда при выполнении команды cannoscale?
Vitaliy_Bazanin вне форума  
 
Непрочитано 15.10.2018, 14:02
#4
valerik88


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


Vitaliy_Bazanin, наверное реактор включить надо, который изменение системных переменных будет отслеживать :vlr-sysVarChanged
valerik88 вне форума  
 
Непрочитано 15.10.2018, 15:24
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Тупой вариант, без проверок (ну еще я и не очень понимаю, какое должно быть значение для масштаба, например, 1:30):
Код:
[Выделить все]
 (setvar "celtscale"
          (apply '/
                 (cdr
                   (assoc (getvar "cannoscale")
                          (mapcar (function
                                    (lambda (x) (setq x (entget (cdr x))) (mapcar '(lambda (a) (cdr (assoc a x))) '(300 141 140)))
                                    ) ;_ end of function
                                  (vl-remove-if-not '(lambda (x) (= (car x) 350)) (dictsearch (namedobjdict) "acad_scalelist"))
                                  ) ;_ end of mapcar
                          ) ;_ end of assoc
                   ) ;_ end of cdr
                 ) ;_ end of apply
          )
В реактор обертывать или в отдельную команду - это уже вопрос вкуса
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.10.2018, 15:42
#6
pan

добрый человек
 
Регистрация: 23.02.2004
Глушь
Сообщений: 971


Цитата:
Сообщение от Vitaliy_Bazanin Посмотреть сообщение
при смене текущего масштаба аннотаций cannoscale так же менялся бы текущий масштаб типов линий celtscale
Если речь про пространство модели, то для этого есть MSLTSCALE.
Надо только регенерировать, впрочем как и для LTSCALE.
__________________
Правильно сформулированный вопрос содержит 90% ответа.
pan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Лисп, в котором при смене текущего масштаба аннотаций cannoscale так же менялся бы текущий масштаб типов линий celtscale

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите уменьшить размер файла DWG AndroiD AutoCAD 2367 16.03.2024 08:40
Задание переменной для чертежа, что бы масштаб блоков или линий был или 0.5 или 1 или 2 Gotch AutoCAD 34 23.05.2019 15:33
Аннотивность типов линий ArchitectV AutoCAD 16 02.11.2017 18:06
Масштаб линий в видовых экранах esp1413 AutoCAD 2 23.03.2015 15:45
Лисп выдает ввиде текста масштаб видового экрана dextron3 LISP 3 21.11.2010 21:30