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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Почему сбрасывается межстрочный интервал MLEADER после entmod?

Почему сбрасывается межстрочный интервал MLEADER после entmod?

Ответ
Поиск в этой теме
Непрочитано 27.05.2022, 08:25 #1
Почему сбрасывается межстрочный интервал MLEADER после entmod?
name02
 
Регистрация: 10.01.2020
Сообщений: 171

Ситуация следующая.
Вручную создал мультивыноску, занес туда многострочные данные, в палитре свойств установил межстрочный интервал отличный от 1.
Затем применил следующий код
Код:
[Выделить все]
 (defun c: qq ( / l l1 )
	;Выбираем МУЛЬТИВЫНОСКУ
	(setq l (entget (car entsel)))
	
	;Определяем ее текстовое содержимое
	(setq l1 (assoc 304 l))
	
	;И не меняя содержимого обновляем
	(entmod l1 l1 l)

	(princ)
)
Как видно, мы обновляем мультивыноску теми же данными что в ней были. Однако у меня в Автокаде 2011 сбрасывается межстрочный интервал на 1.
Почему так происходит?
Просмотров: 2083
 
Непрочитано 27.05.2022, 08:31
#2
Кулик Алексей aka kpblc
Moderator

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


1. Почему меняется группа 304, а не 45 (по-моему, именно в ней хранится межстрочный интервал)?
2. А разве в entmod можно передавать несколько аргументов?
3. По-моему, забыт entupd
4. И можно попробовать через ActiveX поиграться
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.05.2022, 09:03
#3
name02


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


1. Я взял 304 группу (в ней текст мультивыноски). 45 группу не трогаю.
2 и 3. Ошибку не заметил. Вот поправил код, но результат все тот же
Код:
[Выделить все]
 (defun c:qq ( / l l1 )
	;Выбираем МУЛЬТИВЫНОСКУ
	(setq l (entget (car (entsel))))
	
	; Определяем ее текстовое содержимое
	(setq l1 (assoc 304 l))
	
	; И не меняя содержимого обновляем
	(entupd
		(entmod 
			(subst l1 l1 l)	
		)
	)
	
	(princ))
4 ActiveX можно сделать. Но вопрос остается - почему сбрасывается межстрочный интервал даже в случае, что я никак не трогаю 45 пару? Я даже вообще ничего кроме 304 пары со значением текстовой строки не трогаю.
name02 вне форума  
 
Непрочитано 27.05.2022, 09:33
#4
Кулик Алексей aka kpblc
Moderator

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


Offtop: Нейминг (я про переменные), бессмысленный и беспощадный. Уже иногда готов бить за переменные с именем типа l, l1, I, I1l, ll1, l1l - найти в них по-быстрому отличия
Попробуй нечто типа
Код:
[Выделить все]
 (defun _kpblc-ent-modify-autoregen (ent bit value ent_regen / ent_list old_dxf new_dxf layer_dxf70)
                                   ;|
*    Функция модификации указанного бита примитива
*    Параметры вызова:
  entity     примитив, полученный через (car (entsel)), (entlast) etc
  bit        dxf-код, значение которого надо установить
  value      новое значение
  ent_regen  выполнять или нет регенерацию примитива сразу. t/ nil
*    Примеры вызова:
(_kpblc-ent-modify-autoregen (entlast) 8 "0" t)  ; перенести последний примитив на слой 0
(_kpblc-ent-modify-autoregen (car (entsel)) 62 10 nil)  ; установить выбранному примитиву цвет 10
*    Возвращаемое значение:
*  примитив с модифицированным dxf-списком. Примитив перерисовывается в
* зависимости от значения ключа ext_regen
|;
  (if (not (and (or (= (strcase (cdr (assoc 0 (entget ent))) nil) "STYLE")
                    (= (strcase (cdr (assoc 0 (entget ent))) nil) "DIMSTYLE")
                    (= (strcase (cdr (assoc 0 (entget ent))) nil) "LAYER")
                ) ;_ end of or 
                (= bit 100)
           ) ;_ end of and 
      ) ;_ end of not 
    (progn (setq ent_list (entget ent)
                 new_dxf  (cons bit
                                (if (and (= bit 62) (= (type value) 'str))
                                  (if (= (strcase value) "BYLAYER")
                                    256
                                    0
                                  ) ;_ end of if 
                                  value
                                ) ;_ end of if 
                          ) ;_ end of cons 
           ) ;_ end of setq 
           (if (not (equal new_dxf (setq old_dxf (assoc bit ent_list))))
             (progn (entmod (if old_dxf
                              (subst new_dxf old_dxf ent_list)
                              (append ent_list (list new_dxf))
                            ) ;_ end of if 
                    ) ;_ end of entmod
                    (if ent_regen
                      (progn (entupd ent) (redraw ent))
                    ) ;_ end of if
             ) ;_ end of progn 
           ) ;_ end of if 
    ) ;_ end of progn 
  ) ;_ end of if 
  ent
) ;_ end of defun
Проверил на ACAD2020 - межстрочный интервал не меняется.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.05.2022, 10:03
#5
name02


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


Попробовал твой код. В Автокаде 2011 интервал сбрасывается. Видимо что-то в самом Автокаде еще делается.
Буду значит делать изменение межстрочного интервала...
name02 вне форума  
 
Непрочитано 27.05.2022, 10:56
#6
Кулик Алексей aka kpblc
Moderator

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


Обновления все установлены на ACAD2011? А винда какая? Сторонние приложения типа SPDS Extension / СПДС GraphiCS / ... случайно не установлены?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 27.05.2022, 14:56
#7
name02


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


На компьютере Windows 7 Профессиональная x64 Service Pack 1

Версия Автокад 2011 E.49.0.0.
Насчет обновлений ничего сказать не могу - сисадмин ставит приложения на рабочие компьютеры.
В Автокаде еще установлен СПДС Graphics 7 x64
name02 вне форума  
 
Непрочитано 27.05.2022, 17:59
#8
skkkk


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Почему меняется группа 304, а не 45 (по-моему, именно в ней хранится межстрочный интервал)?
А разве межстрочный интервал не в форматировании мтекста задается?

Требуется помощь,что бы Mleader не опускался
skkkk вне форума  
 
Непрочитано 27.05.2022, 21:13
#9
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
А разве межстрочный интервал не в форматировании мтекста задается?

Требуется помощь,что бы Mleader не опускался
Необязательно. Особенно в отношении мультивыноски
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Почему сбрасывается межстрочный интервал MLEADER после entmod?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования Tyhig Технология и организация строительства 117 25.11.2021 17:38
Почему автокад 2016 после установки автокада 2018 не работают? Arraders AutoCAD 1 16.04.2018 08:55
Почему скрываются геометрические и размерные зависимости после повторного открытия файла? pan AutoCAD 3 12.01.2017 15:18
Почему после печати в файл чертёж имеет очень тусклые линии? Genesis AutoCAD 8 11.12.2011 01:37
Word нумеровнный список после достижения 10 пункта увеличивает интервал dextron3 Прочее. Программное обеспечение 3 08.05.2011 13:10