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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp изменение масштаба типов линий

Lisp изменение масштаба типов линий

Ответ
Поиск в этой теме
Непрочитано 14.12.2022, 06:27 #1
Lisp изменение масштаба типов линий
Nikilin
 
Регистрация: 28.10.2019
Сообщений: 51

Здравствуйте товарищи.
Подскажите существует ли способ изменить масштаб типов линии в активном чертеже.
Суть задачи такая. Есть некий чертеж где около 80 типов линии сделанных в 2 раза меньше чем нужно.
Хочу увеличить их именно кодом, чтобы в свойствах, в масштабе типа линии осталась единица.
Грубо говоря изначально делал под конкретны масштаб, а теперь хочу перевести все дело в аннотативность.
Благодарю за помощь.
Просмотров: 3047
 
Непрочитано 14.12.2022, 07:45
#2
Кулик Алексей aka kpblc
Moderator

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


Так, может, как раз с аннотативностью и надо играться, а не с масштабом типа линии?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.12.2022, 07:51
#3
name02


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


Если вопрос идет про масштаб типов линий у объектов то можно использовать этот лисп.
Конкретно этот меняет масштаб у всех отрезков, полилиний и 3Д-полилиний.
Код:
[Выделить все]
 (defun c:foo (/ ss i sn obj)
  (vl-load-com)
  (if (setq ss (ssget "_X" '((0 . "*LINE"))))
    (repeat (setq i (sslength ss))
      (setq sn (ssname ss (setq i (1- i))))
      (setq obj (vlax-ename->vla-object sn))
	  
	  ;Изменить тут на нужный масштаб (1 - нужный масштаб)
      (vla-put-LinetypeScale obj 1)
    )
  )
 (princ)
)

Последний раз редактировалось name02, 14.12.2022 в 07:56.
name02 вне форума  
 
Автор темы   Непрочитано 14.12.2022, 07:57
#4
Nikilin


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


Если бы работал один вообще бы не задумывался об этом.
Условно мои типы линий для 500 масштаба. Соответственно, для тысячного я бы задавал масштаб равное 2 и тому подобное.
Но для других это не совсем практично.
Дело в том, что в аннотативности допустим стоит масштаб 1:500 и включена функция масштабирования типа линии в модели листа. Сама линия на листе при этом стала в 2 раза меньше чем нужно.
Можно отключить функцию масштабирования типа линии в модели листа, но тогда надо контролировать размер типа линии вручную.
Изначально планировал делать только для себя, в итоге приходится подтягивать коллегам. Возникает гемор все адаптировать в человеческий варинат.
Плюс типы линий из чертежа используются как мастеры для других. Лиспом подтягивается файлы мастер со всеми стилями, типами линий и блоками, а потом через другие лиспы отрисовывается все что нужно.
Еще и мастер файл я использую при импорте из кредо.

----- добавлено через ~3 мин. -----
Цитата:
Сообщение от name02 Посмотреть сообщение
Если вопрос идет про масштаб типов линий у объектов то можно использовать этот лисп.
Конкретно этот меняет масштаб у всех отрезков, полилиний и 3Д-полилиний.
Код:
[Выделить все]
 (defun c:foo (/ ss i sn obj)
  (vl-load-com)
  (if (setq ss (ssget "_X" '((0 . "*LINE"))))
    (repeat (setq i (sslength ss))
      (setq sn (ssname ss (setq i (1- i))))
      (setq obj (vlax-ename->vla-object sn))
	  
	  ;Изменить тут на нужный масштаб (1 - нужный масштаб)
      (vla-put-LinetypeScale obj 1)
    )
  )
 (princ)
)
Тут скорей идет речь об изменения файла lin. Изменение всех размеров в нем в 2 раза. Но так как файла лин нету, то увеличиваться должны типы линий чертежа.
Как вариант думал выгрузить все типы линий из чертежа и потом вручную все увеличивать в 2 раза, но учитывая количество типов линий накопленных за 5 лет. В ручную выйдет весьма долгий процесс. Автоматизация был бы прекрасна. Но если такой возможности нет то сделаю вручную.
Сами типы линий содержат в себе тексты и формы.

Последний раз редактировалось Nikilin, 14.12.2022 в 08:02.
Nikilin вне форума  
 
Непрочитано 14.12.2022, 08:06
#5
Кулик Алексей aka kpblc
Moderator

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


Кажется, где-то на форуме был код, позволяющий выгружать типы линий в lin-файл.
Но вообще, конечно, странно - типов линий тьма, а файла с описаниями все еще нет
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.12.2022, 08:35
#6
name02


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


Я для саморазвития спрошу - может и мне когда пригодится.
Как понял из разъяснений автора - все штрихи, пропуски и масштабы форм в файле .lin увеличиваются в два раза.
Чем это отличается от изменения масштаба линии в чертеже?
Ведь если другие пользователи будут брать типы линий из мастера, то у них тоже отрисовка изменится?
name02 вне форума  
 
Автор темы   Непрочитано 14.12.2022, 10:44
#7
Nikilin


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Как понял из разъяснений автора - все штрихи, пропуски и масштабы форм в файле .lin увеличиваются в два раза.
Да именно такую операцию и необходимо провести.

Цитата:
Сообщение от name02 Посмотреть сообщение
Чем это отличается от изменения масштаба линии в чертеже?
Ведь если другие пользователи будут брать типы линий из мастера, то у них тоже отрисовка изменится?
Отличается только тем, что это необходимо будет контролировать постоянно или делать отдельную кнопку с автоматизацией.
По факту если увеличить все в файле lin, от этого гемороя можно было бы просто избавится.

Пример такой для объяснения:
Есть тип линии допустим 2-5, в чертеже он забит как 1-2.5. Тоесть уменьшенный в 2 раза, чтобы был сразу на 500 масштаб. Но в модели все так же стоит 1к 1. Мы уменьшили чертеж в 2 раза посадили на координаты и добавили масштаб 1:500. По итогу получили на листе линию именно 1-2.5, а не 2-5. Если заранее не изменили масштаб типа линии на 2, или не сняли галочку с пункта масштабировать тип линии.
В итоге у нас тип линии не по ГОСТ, так как линия уменьшена от необходимого.
Контролировать каждый раз типы линий не хотелось бы, так как если тип линии был изначально настроен как 2-5, то при смене масштабов все происходило бы автоматом и пропадал гемор с контролированием масштаба типа линии.
Возможно криво объяснил ситуацию, но решение пока вижу одно. Выгрузить типы линий и вручную все увеличить в 2 раза.
Если опять же нету такой возможности сделать все через лисп.

Последний раз редактировалось Nikilin, 14.12.2022 в 11:33.
Nikilin вне форума  
 
Непрочитано 14.12.2022, 12:20
#8
koMon


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


Цитата:
Сообщение от Nikilin Посмотреть сообщение
Выгрузить типы линий и вручную все увеличить в 2 раза.
самое простое - выгрузить типы линий сразу используя множитель.
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 14.12.2022, 16:12
#9
Nikilin


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


Цитата:
Сообщение от koMon Посмотреть сообщение
самое простое - выгрузить типы линий сразу используя множитель.
Если есть такое хотел бы ссылку. К сожалению не видел такого кода.
На форуме видел только такой lisp https://forum.dwg.ru/showthread.php?t=14359
Nikilin вне форума  
 
Непрочитано 15.12.2022, 06:04
#10
name02


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


Я все-таки не пойму, какая логика работы в Автокаде?
Вот как я понял - поправь если что не так.
  1. Все чертится в пространстве модели в одном файле.
  2. Весь чертеж - т.е. "как бы бумажный формат" смасштабирован во сколько-то раз.
  3. Инженер чертя чертеж, на разных элементах чертежа может вручную проставлять в свойствах объекта масштаб линий (с учетом общего масштаба "бумажного формата") - для объектов плана один, у узлов другие масштабы.
  4. Потом ты решил скопировать часть этого чертежа в другой файл и изменить масштаб этого фрагмента чертежа в Х раз. Соответственно штрихи (и др. элементы) линий изменятся в Х раз.
  5. И для линий в новом файле ты хочешь выгружать типы линий в .lin-файл, масштабировать там описание типов линий и использовать его для работы с новым файлом чертежа.

Опять-таки повторюсь - напиши понятно для тех, кто не видел твои чертежи, как вы организуете работу в них. Тебе, как человеку постоянно работающему с ними, многое очевидно, а нам нет.
Может файл-образец прикрепишь

Последний раз редактировалось name02, 15.12.2022 в 06:15.
name02 вне форума  
 
Автор темы   Непрочитано 16.12.2022, 05:28
#11
Nikilin


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Все чертится в пространстве модели в одном файле.
Да
Цитата:
Сообщение от name02 Посмотреть сообщение
Весь чертеж - т.е. "как бы бумажный формат" смасштабирован во сколько-то раз.
В основном в модели все привязано к координатам. Раньше, если была 500, то все в модели соответствовало 500.

Цитата:
Сообщение от name02 Посмотреть сообщение
Инженер чертя чертеж, на разных элементах чертежа может вручную проставлять в свойствах объекта масштаб линий (с учетом общего масштаба "бумажного формата") - для объектов плана один, у узлов другие масштабы.
Да

Цитата:
Сообщение от name02 Посмотреть сообщение
Потом ты решил скопировать часть этого чертежа в другой файл и изменить масштаб этого фрагмента чертежа в Х раз. Соответственно штрихи (и др. элементы) линий изменятся в Х раз.
Нет. По факту был мастер файл. Который кнопкой подгружался к новому чертежу. Потом через кнопки в чертеже обрисовывалось все что нужно, используя типы линий и блоки из ранее загруженного мастера.
Линии и блоки были настроены только на 500 масштаб. Встали задачи, редкие, но все же появились, автоматизировать работу с 200 и 1000 масштабом. Из за чего начались поиски путей решения.


Цитата:
Сообщение от name02 Посмотреть сообщение
И для линий в новом файле ты хочешь выгружать типы линий в .lin-файл, масштабировать там описание типов линий и использовать его для работы с новым файлом чертежа
Да по факту искал lisp который бы изменил описания типов линии увеличив все в 2 раза.
Сделал уже в ручную выгрузив через https://forum.dwg.ru/showthread.php?t=14359 и подправив вручную, что сломалось. Потом в 2 раза увеличил все заменив через замену и фильтры

Мастер файл выбрасывать на форум не стал из за задачи. Нету смысла скидывать конкретный файл, так как задача стояла именно в изменение масштаба описания типов линий. Просто в процессе внесения конкретики для чего я это делаю, внес большую смуту.
В настоящий момент задача решена вручную. Блоки сделал аннотативными, линии привел в формат 1:1000. Осталось решить задачу с мультилиниями. Их придется масштабировать все же в ручную. Думаю прикрутить кнопку, но не могу найти код для lisp, чтобы задать масштаб мультилинии.

Как вариант можно пойти другим путем и отказаться от аннатотивности.
Прикрутить кнопки с изменением масштабов.
Допустим сделать кнопку изменения масштаба на 1:1000 который должен изменять следующие вещи в чертеже:
PSLTSCALE=0
1.Выбрать текст текстового стиля допустим "G2" и задать для всего текста высоту "2"
2.Выбрать все отрезки, полилиний и 3Д-полилиний и задать масштаб 1.
3.Выбрать все мультилинии и задать масштаб 1.
Для М 1:500
PSLTSCALE=0
1.Выбрать текст текстового стиля допустим "G2" и задать для всего текста высоту "1"
2.Выбрать все отрезки, полилиний и 3Д-полилиний и задать масштаб 0.5.
3.Выбрать все мультилинии и задать масштаб 0.5.

Для М 1:200
PSLTSCALE=0
1.Выбрать текст текстового стиля допустим "G2" и задать для всего текста высоту "0.4"
2.Выбрать все отрезки, полилиний и 3Д-полилиний и задать масштаб 0.2.
3.Выбрать все мультилинии и задать масштаб 0.2.

В идеале добавить допник (Если команда была запущена до окончания начертания):
4. Установить масштаб типа линии для последующего начертания.
5. Установить масштаб вставляемых блоков. (С блоками думаю такое не возможно, тут скорей все же подойдет аннотативность блоков)
6. Установить масштаб мультилиний.
И добавить фильтр слоев Для команд 1,2,3. так изменяемые объекты лежат на слоях с одинаковым прификсом.

----- добавлено через ~10 мин. -----
Сколько раз сталкиваюсь со странными задачами и понимаю, что надо изучать Autolisp.

Последний раз редактировалось Nikilin, 16.12.2022 в 05:59.
Nikilin вне форума  
 
Непрочитано 16.12.2022, 10:53
#12
name02


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


Примерно понятно.
Может масштабировать линии с помощью изменения глобального масштаба линий - меню Формат-Типы линий-поле Глобальный масштаб (это переменная LTSCALE)?
Так же посмотри справку на переменную MSLTSCALE.

Все-таки мне кажется, что редактировать lin-файл для таких целей это через чур.
name02 вне форума  
 
Автор темы   Непрочитано 16.12.2022, 12:04
#13
Nikilin


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


Цитата:
Сообщение от name02 Посмотреть сообщение
Примерно понятно.
Может масштабировать линии с помощью изменения глобального масштаба линий - меню Формат-Типы линий-поле Глобальный масштаб (это переменная LTSCALE)?
Так же посмотри справку на переменную MSLTSCALE.

Все-таки мне кажется, что редактировать lin-файл для таких целей это через чур.
LTSCALE не подходит. Ведь это установит все типы линий. Без конкретики. Не отрицаю варианта, что другие люди при работе с моим файлом могут упустить значение этой перименной и отрисовать свои не верно.
Проще использовать предложенной вами Лисп и масштабировать типы линий.
За переменную MSLTSCALE спасибо. Забыл про нее совсем. Предыдущая установленная версия автокада ее не воспринимала. Забыл про это фунцию.

Тогда отпадает необходимость масштабировать типы линий и блоки.
Вопрос остался с мультилиниями. Разработчик как я понял аннототивность к ним вообще не сделал.
Не могу найти переменную отвечающую за масштаб у мультилинии для лиспа.
Nikilin вне форума  
 
Непрочитано 16.12.2022, 13:02
#14
koMon


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


CMLSCALE
для новых, старые поштучно
__________________
K Lisp
koMon вне форума  
 
Автор темы   Непрочитано 16.12.2022, 13:16
#15
Nikilin


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


С новыми все понятно. Вот со старми, что делать. Допустим в чертеже 20 мультилиний еще и на разных слоях. Можно про какуюнибудь и забыть случайно. Для уменьшения ошибки оператора хочу сделать лисп.
Выбрать все мультилинии в чертеже не проблема. А вот какую переменную менять для изменения масштаба найти не могу. (vla-put-???????
Цитата:
Сообщение от koMon Посмотреть сообщение
CMLSCALE
----- добавлено через ~10 мин. -----
Все отбой тревоги. Я нашел. vla-put-MlineScale
Nikilin вне форума  
 
Непрочитано 15.03.2023, 11:12
#16
gumel


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


Спрошу тут. Есть набор примитивов с разными типами линий и разными значениями Linetype Scale. Есть ли способ выполнить масштабирование этого набора, чтобы значение Linetype Scale для каждого примитива менялось в соответствии с новым масштабным коэффициентом?
gumel вне форума  
 
Непрочитано 15.03.2023, 12:43
#17
Ingpro


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


А можно в код из поста #3 добавить выбор линий и возможность выбрать масштаб?
Ingpro вне форума  
 
Автор темы   Непрочитано 15.03.2023, 13:22
#18
Nikilin


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


Как вариант
Код:
[Выделить все]
  
(defun c:foo (/ ss ms i sn obj)
  (vl-load-com)
  (if (setq ss (ssget "_:L" '((0 . "LWPOLYLINE"))))
    (repeat (setq i (sslength ss))
      (setq sn (ssname ss (setq i (1- i))))
      (setq obj (vlax-ename->vla-object sn))
      (initget 7 )(setq ms (getint "\nВведите масштаб типа линии: "))
      (vla-put-LinetypeScale obj ms)
    )
  )
 (princ)
)
Цитата:
Сообщение от gumel Посмотреть сообщение
Спрошу тут. Есть набор примитивов с разными типами линий и разными значениями Linetype Scale. Есть ли способ выполнить масштабирование этого набора, чтобы значение Linetype Scale для каждого примитива менялось в соответствии с новым масштабным коэффициентом?
Тут все сложней. Как я понимаю логика должна быть такая:
1 Запросить масштабный коэффициент
2 считать у объекта масштаб типа линии
3 изменить масштаб (Считаный масштаб*на коэффициент введённый ранее)
Все это применяется для всех объектов в чертеже. Если все верно понял то может на форуме кто то и поможет. Лично для меня такое сильно сложно.
Nikilin вне форума  
 
Непрочитано 15.03.2023, 14:06
#19
Ingpro


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


Код из поста #18 выбирает линии, но запроса ввести масштабный коэффициент нет, и ничего не меняется...
Ещё бы добавить в выбор окружности и дуги...
Ingpro вне форума  
 
Автор темы   Непрочитано 13.07.2023, 12:17
#20
Nikilin


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


Цитата:
Сообщение от Ingpro Посмотреть сообщение
Код из поста #18 выбирает линии, но запроса ввести масштабный коэффициент нет, и ничего не меняется...
Ещё бы добавить в выбор окружности и дуги...
Не видел сообщение ранее.
Если еще актуально, то лучше сделать так.
Код:
[Выделить все]
 (defun c:foo (/ ss ms i sn obj)
  (vl-load-com)
  (if (setq ss (ssget))
    (repeat (setq i (sslength ss))
      (setq sn (ssname ss (setq i (1- i))))
      (setq obj (vlax-ename->vla-object sn))
      (initget 7)
      (setq ms (getreal "\nEnter the linetype scale: "))
      (vla-put-LinetypeScale obj ms)
    )
  )
  (princ)
)
Выбирать можно любые объекты.
Nikilin вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp изменение масштаба типов линий

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аннотативность типов линий? Gedezuk5 AutoCAD 4 03.11.2023 03:10
AutoCAD 2018-2020. Разное отображение и печать стандартных типов линий с весом и без. Баг ли?? Александр К. AutoCAD 8 15.08.2019 06:30
Изменение масштаба типа линий в блоках. shartal Программирование 13 18.04.2014 08:19
Самопроизвольное изменение масштаба аннотаций видового экрана saa AutoCAD 6 27.09.2012 14:00
изменение толщины (веса) линий при печати, без редактирования чертежа lex0101 AutoCAD 6 01.12.2009 20:37