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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Требуется помощь,что бы Mleader не опускался

Требуется помощь,что бы Mleader не опускался

Ответ
Поиск в этой теме
Непрочитано 07.11.2008, 19:04 #1
Требуется помощь,что бы Mleader не опускался
Composter
 
Отопление и вентиляция
 
Москва
Регистрация: 31.10.2008
Сообщений: 445

я впервые столкнулся с 2009 автокадом и решил попробовать мультивыноски. активно ими пользовался и практически сразу заметил что определенные символы опускают текст на несколько миллиметров , у меня например а(русская прописная), a(английская прописная), и цифра 9, (наблюдается если использовать шрифт gost 2.304 type A , которым я пользовался).Это исправляется если в конце текста добавить 2 строку и изменить высоту этой строки. Так как мультивыносок много, то на исправление вручную уйдет несколько дней. Теперь о макросе.
Далее, собственно, как я вижу предстоящую программу:
-при щелканье на мультиссылке (я знаю что команда ddedit открывает текст мультиссылки для редактирования, хотя текст в мссылке мульти, а не однострочный) что бы в конце текста добавлялись определенные символы (в данном случае переход на другую строку с пробелом, измененной высоты)
Особые пожелания:
-что бы запрашивала прога какие я хочу символы добавлять
-что бы запрашивала прога высоту шрифта добавляемой строки
-что бы можно было сразу кучу мультиссылок исправлять таким образом, а не щелкать отдельно по каждой .
В общем, очень надеюсь на помощь специалистов, ради написания данной програмки сел изучать автолисп, но пока знание довольно сыроваты ) Заранее спасибо
---
Одно из возможных решений (спасибо VVA)

Последний раз редактировалось Кулик Алексей aka kpblc, 08.12.2012 в 22:33.
Просмотров: 30766
 
Непрочитано 08.11.2008, 07:07
#2
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Это объявление о тендере? Тогда кое-чего не хватает, учитывая "особые пожелания".
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 08.11.2008, 16:42
#3
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


нет это не тендер, насколько я понимаю это будет просто набор команд, 1 это ddedit
2 перемещение в конец текста (аналогичное нажатию клавиши end )
3 потом втавка нескольких символов
4 закрытие и сохранение текста
5 множественое выполнение ( как при преобразовании линий в полилинии с помощью pedit с добавкой m)

по моему все просто, хотя я могу заблуждаться.все таки надеюсь на помощь
Composter вне форума  
 
Непрочитано 08.11.2008, 22:36
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Откровенно говоря я не понял точно что нужно - но по моему примерно так:
Код:
[Выделить все]
(defun sstolist (ss / i lst); конвертирует набор в список
(setq i 0)
(if ss
(repeat (sslength ss)
(setq lst (append lst (list (ssname ss i))) i (1+ i))
));end of repeat & if
lst
);end of sstolist

(defun c:test ( / lst str)
(princ "Выберите выноски ")
(setq	lst (sstolist (ssget (list (cons 0 "MULTILEADER"))))
	str (strlen (cdr (assoc 304 (entget (car lst)))))
);end of setq
(command "_ddedit" (car lst) "")

(setq 	str (substr (cdr (assoc 304 (entget (car lst)))) str)
	lst (cdr lst)
);end of setq
(mapcar '(lambda (obj)
(entmod (subst (cons 304 (strcat (cdr (assoc 304 (entget obj))) str)) (assoc 304 (entget obj)) (entget obj)))
);end of lambda
lst)
nil
);end of test
Запускать командой тест.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 10.11.2008, 09:06
#5
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


Дима_ мож я не понял как именно пользоваться етим.я выделяю кучу mleaderов ,нажимаю ентер, он (lisp) произвольным образов открывает одну из mleaderов для редактирования текста.если ничего ни добавлять а закрыть, то добавиться по 1 символу ко всем выделеным mleaderам , причем етот символ последний в той мультивыноске которую он случайно выбрал для редактирования.
А можно сделать так что бы к всем выделеным мультивыноскам добавлялся текст из буфера?
Composter вне форума  
 
Непрочитано 10.11.2008, 10:38
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Он показывет 1 выбранный - добавляй в конец его нужные символы - аналогичное действие произойдет с остальными.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 10.11.2008, 14:04
#7
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


может быть я что то не так делаю, прикрепляю файл с результатами.во 2 поле я добавил только цифру 6, а втретьем поле я добавил вторую строку,уменьшенной высоты и смещенную вверх. посмотрите на мои результаты.изменяема ссылка была где надпись Ст.10
Вложения
Тип файла: dwg
DWG 2004
111.dwg (41.7 Кб, 1670 просмотров)
Composter вне форума  
 
Непрочитано 11.11.2008, 06:15
#8
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Composter, я что-то не пойму этих шаманских танцев с бубном. Разве
Цитата:
Underline bottom line и в свойствах Line space style -> Exactly
не помогает?
Я в твоем файле так сделал - текст поднялся.
Вложения
Тип файла: dwg
DWG 2004
222.dwg (46.0 Кб, 1668 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Автор темы   Непрочитано 11.11.2008, 09:17
#9
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


уважаемый wetr , как вы до етого написали Underline bottom line и в свойствах Line space style -> Exactly , у меня почему то не выходит .у меня получаются мультивыноски разной высоты , может я что то не то делаю, подскажите, на всякий случай выкладываю 2 файла.
в первой рамке у мя at least во второй exactly
Миниатюры
Нажмите на изображение для увеличения
Название: 333.jpg
Просмотров: 312
Размер:	11.3 Кб
ID:	12069  
Вложения
Тип файла: dwg
DWG 2004
333.dwg (39.2 Кб, 1659 просмотров)
Composter вне форума  
 
Непрочитано 11.11.2008, 20:24
#10
Серёга - Bilder

проектирование гидротехнических сооружений
 
Регистрация: 20.02.2006
Москва
Сообщений: 5,022


Composter, кстати, поднял вопрос, который и меня интересовал. Я тоже обратил внимание на то, что текст то "сползает" ниже, то нормально встаёт. Победить эту ерунду рациональными способами так и не удалось
Цитата:
Это исправляется если в конце текста добавить 2 строку и изменить высоту этой строки.
- этот вариант мне кажется извращенством. Может есть какие-то нормальные способы наведения порядка в мультивыносках?
Серёга - Bilder вне форума  
 
Автор темы   Непрочитано 11.11.2008, 21:34
#11
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


еще есть один вариант,но он еще извращенистей, в 2009 автокаде в редактировании мульти текста есть кнопка paragraf , там выбрать line spacing .для моего 350 шрифта идеально подходит значение 0.725 .но ето еще дольше чем всталять 2 строку.я пытался развиить тему в http://forum.dwg.ru/showthread.php?t...hlight=mleader , но обычными средствами никто не смог помочь
Composter вне форума  
 
Непрочитано 12.11.2008, 02:18
#12
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Composter, наконец-то понял, что ты хочешь
Тебя смущает, что текст на разной высоте от полки? А я то примеряю на себя - для меня главной проблемой было прилипание к полке. А уж если отлипло - то бог с ним на какой высоте болтается этот текст, лиж бы читался. Да и в глаза мне не бросается, что он на разной высоте.
Про добавление текста внижней строке, солидарен с Серёга - Bilder,
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 02:30
#13
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от Composter Посмотреть сообщение
еще есть один вариант,но он еще извращенистей, в 2009 автокаде в редактировании мульти текста есть кнопка paragraf , там выбрать line spacing .для моего 350 шрифта идеально подходит значение 0.725...
странно, у меня почему-то
Цитата:
кнопка paragraf
в меню неактивна.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 12.11.2008 в 03:04.
wetr вне форума  
 
Непрочитано 12.11.2008, 03:19
#14
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


ОООООООООООООО!
ОТЛИЧНО!
Composter - респект! Нарыл такую настройку!
В окне форматирования текста нажимаем кнопку "Line spacing"-"More"-ставим галочку "paragraf line spacing", "Exactly"-"5". 5 у меня для текста высотой 6. Т.е. коэфициент получается примерно 0,83.
Вот это уже более корректно, нежели добавлять текст внизу. У меня например мекст состоит из 2 или 3 строк. А если внизу уже есть какой-то текст - то это бяка.
Еще плюс варианту от Composter - не надо выставлять "Underline bottom line". Можно и "Underline top line"
Вот если бы эту настройку назначать всем мультилидерам программно! Это было бы полезно многим
Миниатюры
Нажмите на изображение для увеличения
Название: текст_1.jpg
Просмотров: 387
Размер:	29.2 Кб
ID:	12120  Нажмите на изображение для увеличения
Название: текст_2.jpg
Просмотров: 410
Размер:	41.9 Кб
ID:	12121  Нажмите на изображение для увеличения
Название: текст_3.jpg
Просмотров: 521
Размер:	40.8 Кб
ID:	12122  
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 03:38
#15
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Диалог программы примерно такой
Введите междустрочный интервал параграфа:...
Выберете выноски <Все>: ...
ОК!
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 06:01
#16
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Продолжаю ковырять мультилидер.
Залез в свойства
Код:
[Выделить все]
((-1 . <Entity name: 78dd4500>) (0 . MULTILEADER) (330 . <Entity 
name: 7dc0ecf8>) (5 . 611B8) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 
_Выноски) (48 . 100.0) (100 . AcDbMLeader) (300 . CONTEXT_DATA{) (40 . 1.0) (10 
176352.0 4049.28 0.0) (41 . 3.0) (140 . 50.0) (145 . 2.0) (174 . 6) (175 . 6) 
(176 . 2) (177 . 0) (290 . 1) (304 . тарельчатый \Pдюбель) (11 0.0 0.0 1.0) 
(340 . <Entity name: 7dc0c7a0>) (12 176377.0 4052.37 0.0) (13 1.0 0.0 0.0) (42 
. 0.0) (43 . 0.0) (44 . 0.0) (45 . 1.0) (170 . 1) (90 . -1073741824) (171 . 3) 
(172 . 5) (91 . -1073741824) (141 . 0.0) (92 . 12634016) (291 . 0) (292 . 0) 
(173 . 0) (293 . 0) (142 . 0.0) (143 . 0.0) (294 . 0) (295 . 0) (296 . 0) (110 
176403.0 4087.76 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (297 . 0) (302 . 
LEADER{) (290 . 1) (291 . 1) (10 176379.0 4049.28 0.0) (11 -1.0 0.0 0.0) (90 . 
0) (40 . 0.0) (304 . LEADER_LINE{) (10 176403.0 4087.76 0.0) (91 . 0) (305 . }) 
(303 . }) (301 . }) (340 . <Entity name: 7dc20a98>) (90 . 17056836) (170 . 1) 
(91 . -1056964608) (341 . <Entity name: 7dc0eca0>) (171 . -2) (290 . 1) (291 . 
1) (41 . 0.0) (342 . <Entity name: 7dc0b770>) (42 . 50.0) (172 . 2) (343 . 
<Entity name: 7dc0c7a0>) (173 . 6) (95 . 6) (174 . 1) (175 . 2) (92 . 
-1056964608) (292 . 0) (93 . -1056964608) (10 1.0 1.0 1.0) (43 . 0.0) (176 . 0) 
(293 . 0) (294 . 0) (178 . 0) (179 . 3) (45 . 1.0))
Т.е. содержание м.текста содержится здесь
(304 . тарельчатый \Pдюбель)
если применить способ подымания/отрывания м.текста описанный в посте 14, то получается такое форматирование

Код:
[Выделить все]
 \pxse0.83333;тарельчатый 
\ps*;дюбель
Ставните с
Код:
[Выделить все]
тарельчатый \Pдюбель
Т.е. программа должна просто вставлять в м.текст дополнительные символы
Истина где-то рядом
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 06:33
#17
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Так выглядит однострочный м.текст с форматированием под м.лидер
Код:
[Выделить все]
\pxse0.83333;Текст
без форматирования
Код:
Offtop: блин, я уже как Supermax становлюсь - один на форуме общаюсь
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 08:58
#18
Кулик Алексей aka kpblc
Moderator

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


Удалено как полное фуфло.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 12.11.2008 в 09:07.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.11.2008, 09:01
#19
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


wetr а теперь объясни доступным языком, что ты хотел сказать последними 2 сообщениями?
Composter вне форума  
 
Непрочитано 12.11.2008, 09:08
#20
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Кулик Алексей aka kpblc, в 2008 тоже м.лидер есть
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 09:12
#21
Кулик Алексей aka kpblc
Moderator

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


wetr, я исправился. У меня пока не было необходимости работы с mleader'ом в 2008-м, почему я и вякнул #18.
---
Добавлено: а если попробовать смотреть ActiveX-представление объекта? Ну, например:
Код:
[Выделить все]
_$ (setq obj (vlax-ename->vla-object (car(entsel))))
#<VLA-OBJECT IAcadMLeader 1583ad44>
_$ (vlax-dump-Object obj)
; IAcadMLeader: AutoCAD Multi-Leader Interface
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>
;   ArrowheadBlock = ""
;   ArrowheadSize = 0.18
;   ArrowheadType = 0
;   BlockConnectionType = 0
;   ContentBlockName = ""
;   ContentBlockType = 6
;   ContentType = 2
;   Document (RO) = #<VLA-OBJECT IAcadDocument 01defc60>
;   DogLegged = 0
;   DoglegLength = 0.0
;   Handle (RO) = "28AB"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 1ab62afc>
;   LandingGap = 10.0
;   Layer = "_Ot_g_stoyaki_podp"
;   LeaderCount (RO) = 1
;   LeaderLineColor = #<VLA-OBJECT IAcadAcCmColor 1ad0fe60>
;   LeaderLineType = "ByBlock"
;   LeaderLineWeight = -2
;   LeaderType = 1
;   Linetype = "Continuous"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   ObjectID (RO) = 2120288344
;   ObjectName (RO) = "AcDbMLeader"
;   OwnerID (RO) = 2120310008
;   PlotStyleName = "ByLayer"
;   ScaleFactor = 1.0
;   StyleName = "Stoyaki"
;   TextBackgroundFill = 0
;   TextDirection = 5
;   TextFrameDisplay = 0
;   TextHeight = 350.0
;   TextJustify = 3
;   TextLeftAttachmentType = 7
;   TextLineSpacingDistance = 583.333
;   TextLineSpacingFactor = 1.0
;   TextLineSpacingStyle = 1
;   TextRightAttachmentType = 7
;   TextRotation = 0.0
;   TextString = "\\pxsm0.6;Cm.29{\\Fspds|c204;\\H0.14286x;\\Q0; }"
;   TextStyleName = "Funck"
;   TextWidth = 1102.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 1ad11060>
;   Visible = -1
Потом лезем в справку и смотрим там все свойства и методы объекта...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 12.11.2008 в 09:21.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.11.2008, 09:21
#22
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


wetr Line spacing неудобен если я уже почти доделал проект, и у меня множество таких опустившихся мультвыносок, а что бы ето исправить надо в каждую заходить, заходить в след меню, и там выставлять,проще в каждую добавить текст из буфера со строкой. если конечно можно с помощью комманд автокада сделать задание line spacing ,то ето намного облегчило редактирование, уже созданных мультвыносок
Composter вне форума  
 
Непрочитано 12.11.2008, 09:36
#23
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от Composter Посмотреть сообщение
wetr а теперь объясни доступным языком, что ты хотел сказать последними 2 сообщениями?
да это я просто сам пытаюсь дотумкать, как программу сделать.

Цитата:
Сообщение от Composter Посмотреть сообщение
wetr Line spacing неудобен если я уже почти доделал проект, и у меня множество таких опустившихся мультвыносок, а что бы ето исправить надо в каждую заходить, заходить в след меню, и там выставлять,проще в каждую добавить текст из буфера со строкой. если конечно можно с помощью комманд автокада сделать задание line spacing ,то ето намного облегчило редактирование, уже созданных мультвыносок
Дак нужна программа которая ты меняла Line spacing указкой на примитив или у всех м.лидеров чертежа. По крайней мере я ее так вижу.

Кулик Алексей aka kpblc, ActiveX я еще не секу. Я то в 10 функциях путаюсь. Все по книжке делаю. Мой единственный лисп - это колонна, по заданию VVA, из темы обучения чайников лиспу. Так что не понял ничего из твоего поста Мне бы что попроще.
Я думаю мне нужен
entsel, entget, assoc, cdr, - это я получу значение точечной пары 304
Потом не знаю. entmod наверное. Только примеров нету у меня по применению.
Цитата:
Функция entmod похожа на функцию entmake, но получает в качестве аргумента список, который содержит точечную пару с DXF-кодом -1 (т. е. имя существующего в рисунке примитива) и модифицирует примитив в соответствии с новым списком (в списке могут изменяться любые данные, кроме имени примитива, типа примитива и метки):

(entmake <список>)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 12.11.2008 в 09:45.
wetr вне форума  
 
Непрочитано 12.11.2008, 09:49
#24
Кулик Алексей aka kpblc
Moderator

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


wetr, приложи 1 файл с одним мультилидером, в котором будет большинство того, что тебе надо делать. Опиши, что надо менять (например, рядом скопированный тот же лидер, но измененный). Изменения вносить по одному. Исходник выделить, например, красным цветом. А я попробую что-нибудь сделать программно и выложить код.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 12.11.2008, 09:50
#25
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


Кулик Алексей aka kpblc а что делать с твои текстом написанным в сообщении #21 ?
Composter вне форума  
 
Непрочитано 12.11.2008, 09:54
#26
Кулик Алексей aka kpblc
Moderator

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


Да ничего. Это просто "дамп" (программное описание) существующего лидера, как пример.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2008, 10:12
#27
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


В файле написал в чем беда.

P.S. ActiveX-представление гораздо приятнее читать. Все понятно в этом "дампе".
Вложения
Тип файла: dwg
DWG 2004
Пример.dwg (36.7 Кб, 1189 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 12:24
#28
Кулик Алексей aka kpblc
Moderator

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


Вариант кода, без вычисления фактора смещения:
Код:
[Выделить все]
(defun test (factor                        /
             *error*                       selset
             _kpblc-string-clear-format    _kpblc-conv-string-to-list
             _kpblc-conv-list-to-string    _kpblc-conv-value-to-string
             _kpblc-conv-vla-to-list       _kpblc-conv-selset-to-ename
             )

            ;|
factor	выравнивание.
|;

  (vl-load-com)

  (defun *error* (msg)
    (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
    (princ msg)
    (princ)
    ) ;_ end of defun

  (defun _kpblc-conv-selset-to-ename (selset / tab item)
                                     ;|
*    Преобразование набора, полученного через ssget, в список ename-представлени
* примитивов.
*    Параметры вызова:
	selset	набор примитивов
*    Примеры вызова:
(_kpblc-conv-selset-to-ename (ssget))
|;
    (cond
      ((not selset) nil)
      ((= (type selset) 'pickset)
       (repeat (setq tab  nil
                     item (sslength selset)
                     ) ;_ end setq
         (setq tab (cons (ssname selset (setq item (1- item))) tab))
         ) ;_ end repeat
       )
      ((= (type selset) 'vla-object)
       (_kpblc-conv-vla-to-list selset)
       )
      ((listp selset) selset)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((listp value)
       (mapcar '_kpblc-conv-vla-to-list value)
       )
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (_kpblc-conv-vla-to-list (vlax-safearray->list value))
         ) ;_ end of if
       )
      ((and (member (type value) (list 'ename 'str 'vla-object))
            (setq value (_kpblc-conv-ent-to-vla value))
            (and (= (type value) 'vla-object)
                 (vlax-property-available-p value 'count)
                 ) ;_ end of and
            ) ;_ end of and
       (vlax-for sub (_kpblc-conv-ent-to-vla value)
         (setq res (cons sub res))
         ) ;_ end of vlax-for
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-string-clear-format (mtext / text str)
    (setq text "")
    (while (/= mtext "")
      (cond
        ((wcmatch (strcase (setq str (substr mtext 1 2))) "\\[\\{}]")
         (setq mtext (substr mtext 3)
               text  (strcat text str)
               ) ;_ end of setq
         )
        ((wcmatch (substr mtext 1 1) "[{}]")
         (setq mtext (substr mtext 2))
         )
        ((wcmatch (strcase (setq str (substr mtext 1 2))) "\\[LO`~]")
         (setq mtext (substr mtext 3))
         )
        ((wcmatch (strcase (substr mtext 1 2)) "\\[ACFHQTW]")
         (setq mtext (substr mtext (+ 2 (vl-string-search ";" mtext))))
         )
        ((or
           (wcmatch (strcase (substr mtext 1 4)) "\\PQ[CRJD],\\PXQ")
           (wcmatch (strcase mtext) "\\PXSE*;*,\\PS`*;*")
           ) ;_ end of or
         (setq
           mtext
            (substr mtext (+ 2 (vl-string-search ";" mtext)))
           ) ;_ end of setq
         ) ;_ end of cond
        ((wcmatch (strcase (substr mtext 1 2)) "\\P")
         (if (or (= " " (substr text (strlen text)))
                 (= " " (substr mtext 3 1))
                 ) ;_ end of or
           (setq mtext (substr mtext 3))
           (setq mtext (substr mtext 3)
                 text  (strcat text " ")
                 ) ;_ end of setq
           ) ;_ end of if
         )
        ((wcmatch (strcase (substr mtext 1 2)) "\\S")
         (setq str   (substr mtext 3 (- (vl-string-search ";" mtext) 2))
               text  (strcat text (vl-string-translate "#^\\" "/^\\" str))
               mtext (substr mtext (+ 4 (strlen str)))
               ) ;_ end of setq
         )
        (t
         (setq text  (strcat text (substr mtext 1 1))
               mtext (substr mtext 2)
               ) ;_ end of setq
         ) ;_ end of t
        ) ;_ end of cond
      ) ;_ end of while
    text
    ) ;_ end of defun

  (defun _kpblc-conv-string-to-list (string separator / i)
                                    ;|
*    Функция разбора строки. Возвращает список либо точечную пару.
*    Параметры вызова:
*	string		разбираемая строка
*	separator	символ, используемый в качестве разделителя частей
*    Примеры вызова:
(_kpblc-conv-string-to-list "1;2;3;4;5;6" ";")	;'(1 2 3 4 5 6)
(_kpblc-conv-string-to-list "1;2" ";")		;'(1 2)
*    За основу взяты уроки Евгения Елпанова по рекурсиям
|;
    (cond
      ((= string "") nil)
      ((setq i (vl-string-search separator string))
       (cons (substr string 1 i)
             (_kpblc-conv-string-to-list
               (substr string (+ (strlen separator) 1 i))
               separator
               ) ;_ end of _kpblc-conv-string-to-list
             ) ;_ end of cons
       )
      (t (list string))
      ) ;_ end of cond
    ) ;_ end of defun

  (defun _kpblc-conv-value-to-string (value /)
                                     ;|
*    конвертация значения в строку.
|;
    (if value
      (vl-princ-to-string value)
      ""
      ) ;_ end of if
    ) ;_ end of defun

  (defun _kpblc-conv-list-to-string (lst sep)
                                    ;|
*    Преобразование списка в строку
*    Параметры вызова:
	lst	обрабатываемй список
	sep	разделитель. nil -> " "
|;
    (setq lst (mapcar (function _kpblc-conv-value-to-string) lst)
          sep (if sep
                sep
                " "
                ) ;_ end of if
          ) ;_ end of setq
    (strcat (car lst)
            (apply (function strcat)
                   (mapcar
                     (function
                       (lambda (x)
                         (strcat sep x)
                         ) ;_ end of lambda
                       ) ;_ end of function
                     (cdr lst)
                     ) ;_ end of mapcar
                   ) ;_ end of apply
            ) ;_ end of strcat
    ) ;_ end of defun

  (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
  (if (and factor
           (setq selset (_kpblc-conv-selset-to-ename
                          (ssget "_:L" '((0 . "MULTILEADER")))
                          ) ;_ end of _kpblc-conv-selset-to-ename
                 ) ;_ end of setq
           ) ;_ end of and
    (foreach obj (mapcar (function vlax-ename->vla-object) selset)
      (vla-put-textstring
        obj
        (strcat
          "\\pxse"
          (vl-princ-to-string factor)
          ";"
          (_kpblc-conv-list-to-string
            (mapcar
              (function
                (lambda (x)
                  (_kpblc-string-clear-format x)
                  ) ;_ end of lambda
                ) ;_ end of function
              (_kpblc-conv-string-to-list
                (vla-get-textstring obj)
                "\\P"
                ) ;_ end of _kpblc-conv-string-to-list
              ) ;_ end of mapcar
            "\\P\\ps*;"
            ) ;_ end of _kpblc-conv-list-to-string
          ) ;_ end of strcat
        ) ;_ end of vla-put-textstring
      ) ;_ end of foreach
    ) ;_ end of if
  (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
  (princ)
  ) ;_ end of defun
Пример вызова:
Код:
[Выделить все]
(test (/ 2. 3.))
---
Добавлено: сделать для нескольких MLeader'ов в общем-то не проблема, только намекни
---
Добавлено 13.11.2008, 22:31
Намек получен и внедрен
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 13.11.2008 в 22:31.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2008, 15:40
#29
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


kpblc, чего-то не выходит.
Код:
[Выделить все]
Command: (test (/ 2. 3.))

Select object: nil
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 16:12
#30
Кулик Алексей aka kpblc
Moderator

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


Так а объект-то (который исходник) ткни и посмотри, как он изменится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2008, 16:41
#31
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Так а объект-то (который исходник) ткни и посмотри, как он изменится.
так я и тыкаю - ничего не происходит...
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 16:54
#32
Кулик Алексей aka kpblc
Moderator

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


Завтра напомни, попробую видео снять что и как делалось.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.11.2008, 17:12
#33
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


вот как я делаю
Вложения
Тип файла: rar Видео.rar (97.6 Кб, 119 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 12.11.2008, 23:27
#34
Кулик Алексей aka kpblc
Moderator

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


Код в #28 исправил (забыл одну функцию и объявление (vl-load-com))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.11.2008, 03:22
#35
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


УРРРА!!!
Все заработало.
Только функция прерывается после выбора примитива (намекаю )
Еще бы добавить возможность тыкать в несколько примитивов, выботр рамкой и опцию <Все>.
В твоем коде очень трудно разобраться. Чуствую где-то здесь надо "добавлять":
Код:
[Выделить все]
(setq obj (vl-catch-all-apply
                            '(lambda () (vlax-ename->vla-object (car (entsel))))
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 13.11.2008, 06:23
#36
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Что за ... этот мультитекст.
Алексей, не подскажешь, где можно покопаться?
В общем мультилидер ведет себя "неожиданно", выставляя текст на разной высоте. Закономерности какие-то есть, текст реагирует на различные символы, и в зависимости об этого ставит всю строку выше или ниже. Насколько я понял, от шрифта мало что зависит. Где можно посмотреть настройки мтекста, чтобы попробовать выявить закономерности "пляски" текста над полкой? Где-то читал, что это даже не полка а подчеркивание. В "дампе" текста очень мало свойств.
Код:
[Выделить все]
_$ (setq obj (vlax-ename->vla-object (car(entsel))))
(vlax-dump-Object obj)
#<VLA-OBJECT IAcadMText 130d6a7c>
; IAcadMText: AutoCAD MText Interface
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00cd63f8>
;   AttachmentPoint = 1
;   BackgroundFill = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 208c9f78>
;   DrawingDirection = 5
;   Handle (RO) = "269"
;   HasExtensionDictionary (RO) = 0
;   Height = 2.5
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 43bba44c>
;   InsertionPoint = (1416.22 699.236 0.0)
;   Layer = "_Тексты"
;   LineSpacingDistance = 3.33333
;   LineSpacingFactor = 0.8
;   LineSpacingStyle = 2
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 2116860040
;   ObjectName (RO) = "AcDbMText"
;   OwnerID (RO) = 2116852984
;   PlotStyleName = "ByLayer"
;   Rotation = 0.0
;   StyleName = "Standard"
;   TextString = "\\pxsm0.6;Кусок\r\\P\\ps*;строки\r\\Pвапр"
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 427941e0>
;   Visible = -1
;   Width = 41.4809
T
У мтекста есть еще какие-то коды
Mtext group codes
Из справки
Цитата:
44

Mtext line spacing factor (optional):

Percentage of default (3-on-5) line spacing to be applied. Valid values range from 0.25 to 4.00
Код 44 - это как раз тот самый коэфициент, который мы присваиваем. Ты своей программой его меняешь или в форматирование текста вставляешь?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 13.11.2008 в 06:31.
wetr вне форума  
 
Автор темы   Непрочитано 13.11.2008, 08:49
#37
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


ребята, о чем вы переписываетесь ? непонятно.если wetr радовался что у него заработало, то хотелось бы видеть конечный вариант лиспа ,что бы у меня тоже mleader нормально фунциклировал
Composter вне форума  
 
Непрочитано 13.11.2008, 09:08
#38
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Composter, давай вникай и присоединяйся. Вместе как-то легче разгребать конюшни AutoDESKa
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Автор темы   Непрочитано 13.11.2008, 09:14
#39
Composter

Отопление и вентиляция
 
Регистрация: 31.10.2008
Москва
Сообщений: 445


я б с удовольствием, но в лиспе не шарю. вот планирую на выходных почитать Света.мож тогда начну вас понимать
Composter вне форума  
 
Непрочитано 13.11.2008, 14:03
#40
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Кулик Алексей aka kpblc, в #18 лечение страшнее болезни.

Добавление дополнительных символов форматирования, да еще с численным аргументом приведет ко всяким нехорошим последствиям. Например, частенько используется извлечение числа из строки. Чтобы, например, сложить или перемножить строки. Вот и вылезет это число.

Регулировать надо все-таки через textlinespacingfactor.

Но здесь в основе всё-таки неправильный шрифт. Это явно из CS стандартный. У него описание некорректное. Я так думаю.
ShaggyDoc вне форума  
 
Непрочитано 13.11.2008, 15:32
#41
Кулик Алексей aka kpblc
Moderator

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


ShaggyDoc, ну в общем-то снесение форматирование именно здесь переписано частично (VVA предложение пока не отсылал). А что фонт может быть кривой - так я и не спорю...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.11.2008, 22:34
#42
Кулик Алексей aka kpblc
Moderator

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


Намек запущен. Проверяй
Цитата:
Сообщение от wetr Посмотреть сообщение
Что за ... этот мультитекст.
Алексей, не подскажешь, где можно покопаться?
В общем мультилидер ведет себя "неожиданно", выставляя текст на разной высоте. Закономерности какие-то есть, текст реагирует на различные символы, и в зависимости об этого ставит всю строку выше или ниже. Насколько я понял, от шрифта мало что зависит. Где можно посмотреть настройки мтекста, чтобы попробовать выявить закономерности "пляски" текста над полкой? Где-то читал, что это даже не полка а подчеркивание. В "дампе" текста очень мало свойств.
Код:
[Выделить все]
_$ (setq obj (vlax-ename->vla-object (car(entsel))))
(vlax-dump-Object obj)
#<VLA-OBJECT IAcadMText 130d6a7c>
; IAcadMText: AutoCAD MText Interface
; Property values:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00cd63f8>
;   AttachmentPoint = 1
;   BackgroundFill = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 208c9f78>
;   DrawingDirection = 5
;   Handle (RO) = "269"
;   HasExtensionDictionary (RO) = 0
;   Height = 2.5
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 43bba44c>
;   InsertionPoint = (1416.22 699.236 0.0)
;   Layer = "_Тексты"
;   LineSpacingDistance = 3.33333
;   LineSpacingFactor = 0.8
;   LineSpacingStyle = 2
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 2116860040
;   ObjectName (RO) = "AcDbMText"
;   OwnerID (RO) = 2116852984
;   PlotStyleName = "ByLayer"
;   Rotation = 0.0
;   StyleName = "Standard"
;   TextString = "\\pxsm0.6;Кусок\r\\P\\ps*;строки\r\\Pвапр"
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 427941e0>
;   Visible = -1
;   Width = 41.4809
T
У мтекста есть еще какие-то коды
Mtext group codes
Из справки

Код 44 - это как раз тот самый коэфициент, который мы присваиваем. Ты своей программой его меняешь или в форматирование текста вставляешь?
По идее 44 код тебе не требуется - см. свойства LineSpacingFactor и LineSpacingDistance. Кажется, их достаточно.
Я эти коды не меняю. Я меняю содержимое текстовой строки.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.11.2008, 02:47
#43
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
[url="http://forum.dwg.ru/member.php?u=28"]
Но здесь в основе всё-таки неправильный шрифт. Это явно из CS стандартный. У него описание некорректное. Я так думаю.
если вы про мой файл, то там шрифт mipgost.shx от VVA.
А вообще, по опыту использования мультилидера, изменение шрифта не спасает ситуацию. Да и людей уже очень много высказывалось, по поводу этой проблемы. Не думаю что у всех один шрифт. Получается все шрифты кривые? И как выход нужно сделать новый font спецально для мультилидера?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 14.11.2008, 02:49
#44
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Кулик Алексей aka kpblc,
Спасибо все работает.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 14.11.2008, 06:31
#45
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Получается все шрифты кривые? И как выход нужно сделать новый font спецально для мультилидера?
Нет, не все. Проблему с подчеркиванием верхней строки я заметил, только когда заменил в текстовом стиле simplex.shx на CS_Gost2304.shx. Этот шрифт более подходящий, да и дополнительные символы есть.

Потом, экспериментируя с разными шрифтами, убедился, что именно так. Можете попробовать. Только надо учитывать, что имеются одноименные шрифты разных разработчиков. Новый фонт делать, конечно не стоит, надо просто подобрать правильный. Конечно, авторы CS_Gost2304.shx не стремились сделать плохой шрифт, наоборот. Просто тогда еще мультивыносок не было.

У Аутодеск тоже рыльце в пушку. Мультивыноски себя иногда ведут непредсказуемо. Попробуйте, например, чуть-чуть перенести выноску за начало полки. Текст может приподняться. А может опуститься. Но не всегда.

Хорошего решения пока не нашлось. Эксперименты с LineSpacingDistance, LineSpacingFactor, LineSpacingStyle пока не дают однозначно правильного результата для любого шрифта. Не нашлось пока и правильного шрифта с полным набором символов, хотя и не искал специально.

Но и вставка в строку дополнительных тегов форматирования не выход, хотя это сделать проще всего. Выход все-таки в подборе шрифта. Тогда достаточно дать ему такое имя, какое есть в существующих чертежах и проблема будет решена без всяких махинаций.
ShaggyDoc вне форума  
 
Непрочитано 14.11.2008, 06:44
#46
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


ShaggyDoc, обалдеть!!! Вы как в воду глядели. Я тут в другой теме
начал эксперементировать. И вот что вышло - шрифт не должен содержать дуги.
Например txt - отображается изумительно!!!
Я для себя уже даже нашел поджодящий - GOST.shx от VetalBY. Даже не нашел - вспомнил Раньше я им лет 5 пользовался.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 17.11.2010, 11:59
#47
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 824


Кулик Алексей aka kpblc, wetr,
Объясните пожалуйста, что в лиспе нужно поменять чтобы Paragrapf Line Spacing (ссылка) стал равен 5. Если применить код как он есть, то у меня значении 4,666. Шрифт Simplex.
И еще если у меня текст с нижним индексом(дробный), например, А1, то после применения лиспа к мультивыноске, текст возвращается в исходное состояние, т.е. А^1.
Можно ли это сделать так что дробная часть не изменялась.
Astartes вне форума  
 
Непрочитано 17.11.2010, 19:12
#48
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Astartes,
Посмотри эту тему: Mеждустрочное расстояние в MTEXT
wetr, Я в опытном режиме использую старый (с дугами) шрифт mipgost, программно приподнимая шрифт с помощью форматирования \\pxse (см ссылку)
*** Добавлено
Перенесен старый вариант
Код:
[Выделить все]
;;;http://forum.dwg.ru/showthread.php?t=26548&page=3
;;; Где изменить значение междустрочного значения интервала параграфа
;;; в реакторе на мультилидер?
;;; искать строчку   (mtext-paragraph "\\pxse" 0.86667 (entlast))
;;; в ней менять число 0.86667 на нужное

(defun le-endCommand (CALL CALLBACK)
  (if (= (strcase (car CALLBACK)) "MLEADER")
  (mtext-paragraph "\\pxse" 0.86667 (entlast)) ;;;Здесь меняют значение междустрочного интервала параграфа !!!
 )
)

(defun gc:FieldCode (ent / foo elst xdict dict field str)
  ;; credits gile
  (defun foo (field str / pos fldID objID)
    (setq pos 0)
    (if (setq pos (vl-string-search "\\_FldIdx " str pos))
      (while (setq pos (vl-string-search "\\_FldIdx " str pos))
        (setq fldId (entget (cdr (assoc 360 field)))
              field (vl-remove (assoc 360 field) field)
              str   (strcat
                      (substr str 1 pos)
                      (if (setq objID (cdr (assoc 331 fldId)))
                        (vl-string-subst
                          (strcat "ObjId " (itoa (gc:EnameToObjectId objID)))
                          "ObjIdx"
                          (cdr (assoc 2 fldId))
                        )
                        (foo fldId (cdr (assoc 2 fldId)))
                      )
                      (substr str (1+ (vl-string-search ">%" str pos)))
                    )
        )
      )
      str
    )
  )
    ;; gc:EnameToObjectId (gile)
;; Returns the ObjectID from an ename
;;
;; Argument : an ename

(defun gc:EnameToObjectId (ename)
  ;; credits gile
  ((lambda (str)
     (hex2dec
       (substr (vl-string-right-trim ">" str) (+ 3 (vl-string-search ":" str)))
     )
   )
    (vl-princ-to-string ename)
  )
)
    ;;============================================================;;

;; hex2dec (gile)
;; convert an hexadecimal into a decimal (int)
;;
;; Argument : un hexadedimal (string)

(defun hex2dec (s / r l n)
  (setq	r 0 l (vl-string->list (strcase s)))
  (while (setq n (car l))
    (setq l (cdr l)
          r (+ (* r 16) (- n (if (<= n 57) 48 55)))
    )
  )
)
  ;;--------------------------------------------------------;;
  
  (setq elst (entget ent))
  (if (vlax-property-available-p (vlax-ename->vla-object ent) 'Textstring)
    (setq str (vla-get-TextString (vlax-ename->vla-object ent)))
    )
  (if (and
	(member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT" "MULTILEADER"))
	(setq xdict (cdr (assoc 360 elst)))
	(setq dict (dictsearch xdict "ACAD_FIELD"))
	(setq field (dictsearch (cdr (assoc -1 dict)) "TEXT"))
      )
    (setq str (foo field (cdr (assoc 2 field))))
  )
    str
)
(defun isFieldAvailable ( obj  / fc )
  (if (= (type obj) 'ENAME)
      (setq obj (vlax-ename->vla-object obj))
    )
  (and
    (setq fc (vla-GetExtensionDictionary  obj))
    (setq fc (vlax-vla-object->ename fc))
    (dictsearch fc "ACAD_FIELD")
    )
 )
(defun mtext-paragraph ( pat value obj / ss i mtext ent)
;;; MText Line Spacing
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Spacing
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора
  ;; pat "\\pxse" or "\\pxsm"
  ;; (setq value 0.86667)
  ;; (mtle 0.86667 (entlast))
  (vl-load-com)
  (setq value (rtos value 2 5))
  (if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
  (setq ent (vlax-vla-object->ename obj))
  (if (and (vlax-write-enabled-p obj)
        (vlax-property-available-p obj 'Textstring)
                 (or (not (vlax-property-available-p obj 'MTextAttribute))
                     (and (vlax-property-available-p obj 'MTextAttribute)
                          (eq (vla-get-MTextAttribute obj) :vlax-true)
                          )
                     )
                 )
          (progn
            (setq mtext (gc:FieldCode ent))
            (if (not(setq i (vl-string-search "\\PX" (strcase mtext))))
              (setq i 0)
              )
            (if (wcmatch (strcase (substr mtext (1+ i) 3)) "\\PX")  ;;;абзац и междустрочный интервал \\PX[QITSBA]
              (setq mtext
                  (strcat (if (not (zerop i))(substr mtext 1 i) "")
                  pat value ";"
                  (substr mtext (+ 2 (vl-string-search ";" mtext i))))
                    )
              (setq mtext (strcat pat value ";" mtext))
              )
            (vla-put-TextString obj mtext)
            (if (isFieldAvailable obj)
              (progn
                (vl-cmdf "_.updatefield" ent "")
                (entupd ent)
                )
              )
            )
        )
  )

(defun C:MTLS ( / ss i lst mtext ls *LS*)
;;; MText Line Spacing
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Spacing
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора  
  (vl-load-com)
  (if (zerop
      (setq
        *LS* (abs
               (atof (vl-princ-to-string (getcfg "AppData/MTEXTLS/LS")))
             ) ;_ end of abs
      ) ;_ end of setq
    ) ;_ end of zerop
  (setq *LS* 1)
) ;_ end of if
  (if (and
        (progn
          (initget 6)
          (princ "\nEnter line spasing value <")
          (princ *LS*)
          (princ ">: ")
          (if (setq ls (getreal))
            (progn
              (setq *LS* ls)
              (setcfg "AppData/MTEXTLS/LS" (rtos *LS* 2 2))
              )
            (setq ls *LS*)
            )
        )
        (setq lst nil ss (ssget "_:L" '((0 . "MTEXT,ATTDEF,INSERT,MULTILEADER"))))
        (repeat (setq i (sslength ss)) ;_ end setq
         (setq lst (cons (ssname ss (setq i (1- i))) lst))
         ) ;_ en
        )
    (progn
      (setq ss nil)
      (foreach itm lst
        (if (and itm (setq itm (vlax-ename->vla-object itm))
           (vlax-property-available-p itm 'Hasattributes)
	   (eq :vlax-true (vla-get-HasAttributes itm))
                 )
          (setq ss (append ss
                           (mapcar 'vlax-vla-object->ename
                           (append (vlax-invoke itm 'Getattributes)(vlax-invoke itm 'Getconstantattributes))
                                   )
                           )
                )
		  )
        )
      (setq lst (append lst ss))
      (foreach itm lst (mtext-paragraph "\\pxsm" ls itm))
    )
    )
  (princ)
)
(defun C:MTLE ( / ss i lst mtext ls *LE*)
;;; MText Line Equal
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Equal
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора  
  (vl-load-com)
  (if (zerop
      (setq
        *LE* (abs
               (atof (vl-princ-to-string (getcfg "AppData/MTEXTLS/LE")))
             ) ;_ end of abs
      ) ;_ end of setq
    ) ;_ end of zerop
  (setq *LE* 1)
) ;_ end of if
  (if (and
        (progn
          (initget 6)
          (princ "\nEnter line spasing (equal) value <")
          (princ *LE*)
          (princ ">: ")
          (if (setq ls (getreal))
            (progn
              (setq *LE* ls)
              (setcfg "AppData/MTEXTLS/LE" (rtos *LE* 2 2))
              )
            (setq ls *LE*)
            )
        )
        (setq lst nil ss (ssget "_:L" '((0 . "MTEXT,ATTDEF,INSERT,MULTILEADER"))))
        (repeat (setq i (sslength ss)) ;_ end setq
         (setq lst (cons (ssname ss (setq i (1- i))) lst))
         ) ;_ en
        )
    (progn
      (setq ss nil)
      (foreach obj lst
        (if (and obj (setq obj (vlax-ename->vla-object obj))
           (vlax-property-available-p obj 'Hasattributes)
	   (eq :vlax-true (vla-get-HasAttributes obj))
                 )
          (setq ss (append ss
                           (mapcar 'vlax-vla-object->ename
                           (append (vlax-invoke obj 'Getattributes)(vlax-invoke obj 'Getconstantattributes))
                                   )
                           )
                )
		  )
        )
      (setq lst (append lst ss))
      (foreach itm lst (mtext-paragraph "\\pxse" ls itm))
    )
    )
  (princ)
)
  
  

(defun C:VLR_MTLE_ON ()
  (vl-load-com)
  (or *vlr-MTLE
     (setq *vlr-MTLE (vlr-command-reactor nil '((:vlr-commandEnded . le-endCommand)))))
  (princ "\nMtex Line Equal Reactor ON")
  (setvar "MODEMACRO" (strcat "*LE* "(VL-STRING-LEFT-TRIM "*LE* " (getvar "MODEMACRO"))))
  (princ)
)


;;  Turn the reactors off
(defun C:VLR_MTLE_OFF ()
  (and *vlr-MTLE (vlr-added-p *vlr-MTLE) (vlr-remove *vlr-MTLE))
  (setvar "MODEMACRO" (VL-STRING-LEFT-TRIM "*LE* " (getvar "MODEMACRO")))
  (princ "\nMtex Line Equal Reactor OFF")
  (princ)
)
(princ "\nType MTLE, MTLS, VLR_MTLE_ON, VLR_MTLE_OFF in command line")
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 31.05.2011 в 20:19.
VVA вне форума  
 
Непрочитано 18.11.2010, 02:03
#49
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, а если реактором это сделать, чтобы пользователь даже ничего не знал про этот глюк?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 18.11.2010, 05:23
#50
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 824


VVA, Спасибо большое, то что нужно.
Astartes вне форума  
 
Непрочитано 18.11.2010, 20:20
3 | #51
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Astartes Посмотреть сообщение
VA, а если реактором это сделать, чтобы пользователь даже ничего не знал про этот глюк?
Цитата:
Сообщение от wetr Посмотреть сообщение
Диалог программы примерно такой
Введите междустрочный интервал параграфа:...
Выберете выноски <Все>: ...
ОК!
Вот что по быстрому наваял. За основу взял команду MTLS по ссылке из #48
4 команды
MTLS - изменяет междустрочный интервал, режим "несколько" (форматирование \\pxsm)
MTLE - изменяет междустрочный интервал, режим "точно" (форматирование \\pxse)
VLR_MTLE_ON - стартует (активирует) реактор на мультилидер
VLR_MTLE_OFF - останавливает (деактивирует) реактор
Признаком активности реактора - строчка *LE* в modemacro (если кому не понятно - слева внизу экрана)

Добавлено форматирование для опускания 2-го параграфа (см #61)
Код:
[Выделить все]
;;;http://forum.dwg.ru/showthread.php?t=26548&page=3
;;; Где изменить значение междустрочного значения интервала параграфа
;;; в реакторе на мультилидер?
;;; искать строчку   (mtext-paragraph  0.86667 0.25 (entlast))
;;; в ней менять число 0.86667 на нужное
;;;Если нужно активизировать реактор при загрузке уберите ;;; из последней строчки ;;;(C:VLR_MTLE_ON)
(defun le-endCommand (CALL CALLBACK)
  (if (= (strcase (car CALLBACK)) "MLEADER")
  (mtext-paragraph 0.86667 0.25 (entlast)) ;;;Здесь меняют значение междустрочного интервала параграфа !!!
 )
)
(defun C:MTLE ( / ss i lst mtext ls *LE*)
;;; MText Line Equal
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Equal
;;; http://forum.dwg.ru/showthread.php?t=26548&page=3 
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; http://www.cadtutor.net/forum/showthread.php?54332-make-objects-as-block/page2
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора  
  (vl-load-com)
  (if (zerop
      (setq
        *LE* (abs
               (atof (vl-princ-to-string (getcfg "AppData/MTEXTLS/LE")))
             ) ;_ end of abs
      ) ;_ end of setq
    ) ;_ end of zerop
  (setq *LE* 1)
) ;_ end of if
  (if (and
        (progn
          (initget 6)
          (princ "\nEnter line spasing (equal) value <")
          (princ *LE*)
          (princ ">: ")
          (if (setq ls (getreal))
            (progn
              (setq *LE* ls)
              (setcfg "AppData/MTEXTLS/LE" (rtos *LE* 2 2))
              )
            (setq ls *LE*)
            )
        )
      ;;;  (setq lst nil ss (ssget "_:L" '((0 . "MTEXT,ATTDEF,INSERT,MULTILEADER"))))
       (setq lst nil ss (ssget "_:L" '((0 . "MULTILEADER"))))
        (repeat (setq i (sslength ss)) ;_ end setq
         (setq lst (cons (ssname ss (setq i (1- i))) lst))
         ) ;_ en
        )
    (progn
      (setq ss nil)
      (foreach obj lst
        (if (and obj (setq obj (vlax-ename->vla-object obj))
           (vlax-property-available-p obj 'Hasattributes)
	   (eq :vlax-true (vla-get-HasAttributes obj))
                 )
          (setq ss (append ss
                           (mapcar 'vlax-vla-object->ename
                           (append (vlax-invoke obj 'Getattributes)(vlax-invoke obj 'Getconstantattributes))
                                   )
                           )
                )
		  )
        )
      (setq lst (append lst ss))
      (foreach itm lst (mtext-paragraph  ls 0.25 itm))
    )
    )
  (princ)
)
  
(defun C:MTLS ( / ss i lst mtext ls *LS*)
;;; MText Line Spacing
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Spacing
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора  
  (vl-load-com)
  (if (zerop
      (setq
        *LS* (abs
               (atof (vl-princ-to-string (getcfg "AppData/MTEXTLS/LS")))
             ) ;_ end of abs
      ) ;_ end of setq
    ) ;_ end of zerop
  (setq *LS* 1)
) ;_ end of if
  (if (and
        (progn
          (initget 6)
          (princ "\nEnter line spasing value <")
          (princ *LS*)
          (princ ">: ")
          (if (setq ls (getreal))
            (progn
              (setq *LS* ls)
              (setcfg "AppData/MTEXTLS/LS" (rtos *LS* 2 2))
              )
            (setq ls *LS*)
            )
        )
        (setq lst nil ss (ssget "_:L" '((0 . "MTEXT,ATTDEF,INSERT,MULTILEADER"))))
        (repeat (setq i (sslength ss)) ;_ end setq
         (setq lst (cons (ssname ss (setq i (1- i))) lst))
         ) ;_ en
        )
    (progn
      (setq ss nil)
      (foreach itm lst
        (if (and itm (setq itm (vlax-ename->vla-object itm))
           (vlax-property-available-p itm 'Hasattributes)
	   (eq :vlax-true (vla-get-HasAttributes itm))
                 )
          (setq ss (append ss
                           (mapcar 'vlax-vla-object->ename
                           (append (vlax-invoke itm 'Getattributes)(vlax-invoke itm 'Getconstantattributes))
                                   )
                           )
                )
		  )
        )
      (setq lst (append lst ss))
      (foreach itm lst (mtext-paragraph ls nil itm))
    )
    )
  (princ)
)  

(defun C:VLR_MTLE_ON ()
  (vl-load-com)
  (or *vlr-MTLE
     (setq *vlr-MTLE (vlr-command-reactor nil '((:vlr-commandEnded . le-endCommand)))))
;;;  (or *vlr-CC
;;;     (setq *vlr-CC (vlr-command-reactor nil '((:vlr-commandCancelled . cancelCommand)))))
  (princ "\nMtex Line Equal Reactor ON")
  (setvar "MODEMACRO" (strcat "*LE* "(VL-STRING-LEFT-TRIM "*LE* " (getvar "MODEMACRO"))))
  (princ)
)

;;  Turn the reactors off
(defun C:VLR_MTLE_OFF ()
  (and *vlr-MTLE (vlr-added-p *vlr-MTLE) (vlr-remove *vlr-MTLE))
  (setvar "MODEMACRO" (VL-STRING-LEFT-TRIM "*LE* " (getvar "MODEMACRO")))
  (princ "\nMtex Line Equal Reactor OFF")
  (princ)
)
(defun isFieldAvailable ( obj  / fc )
  (if (= (type obj) 'ENAME)
      (setq obj (vlax-ename->vla-object obj))
    )
  (and
    (setq fc (vla-GetExtensionDictionary  obj))
    (setq fc (vlax-vla-object->ename fc))
    (dictsearch fc "ACAD_FIELD")
    )
 )
(defun mip-conv-to-str (dat)
      (cond ((= (type dat) 'INT) (setq dat (itoa dat)))
            ((= (type dat) 'REAL) (setq dat (rtos dat 2 12)))
            ((null dat) (setq dat ""))
            (t (setq dat (vl-princ-to-string dat)))
      ) ;_ end of cond
    ) ;_ end of def

(defun mtext-paragraph (value abz obj / ss i mtext ent pat)
;;; MText Line Spacing
;;; Изменить межстрочный интервал мтекста и многострочных аттрибутов
;;; Change Line Spacing
;;; http://forum.dwg.ru/showthread.php?t=54857
;;; Измените значение системной переменной ATTIPE на 1 и будет
;;; в редакторе многострочных атрибутов полноценный вариант редактора
;;; value - значение междустрочного интервала параграфа ( положительное - форматирование \\pxse, отрицательное - форматирование \\pxsm ) или nil - нет
;;; abz - значение абзаца (форматирование \\pxa ) или nil - нет
  (vl-load-com)
  ;;(setq value (rtos value 2 5))
  (setq pat (strcat "\\px"
                              (if abz (strcat "a"(VL-STRING-RIGHT-TRIM "0" (mip-conv-to-str abz))",") "")
                              "se" (VL-STRING-RIGHT-TRIM "0" (mip-conv-to-str value))";"))
  (if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
  (setq ent (vlax-vla-object->ename obj))
  (if (and (vlax-write-enabled-p obj)
        (vlax-property-available-p obj 'Textstring)
                 (or (not (vlax-property-available-p obj 'MTextAttribute))
                     (and (vlax-property-available-p obj 'MTextAttribute)
                          (eq (vla-get-MTextAttribute obj) :vlax-true)
                          )
                     )
                 )
          (progn
            (setq mtext (bg:FieldCode ent))
            (if (not(setq i (vl-string-search "\\PX" (strcase mtext))))
              (setq i 0)
              )
            (if (wcmatch (strcase (substr mtext (1+ i) 3)) "\\PX")  ;;;абзац и междустрочный интервал \\PX[QITSBA]
              (setq mtext
                  (strcat (if (not (zerop i))(substr mtext 1 i) "")
                  pat  
                  (substr mtext (+ 2 (vl-string-search ";" mtext i))))
                    )
              (setq mtext (strcat pat mtext))
              )
            (vla-put-TextString obj mtext)
            (if (isFieldAvailable obj)
              (progn
                (vl-cmdf "_.updatefield" ent "")
                (entupd ent)
                )
              )
            )
        )
  )

(defun bg:FieldCode (ent / foo elst xdict dict field str)
  ;; credits gile gc:FieldCode
  (defun ObjIdxStr (fld / pos)
  (setq pos (vl-string-search "ObjIdx " (cdr (assoc 2 fldId)) 0))
  (substr fld (1+ pos) (- (vl-string-search ">%" fld pos) pos))
  )
  (defun foo (field str / pos fldID objID)
    (setq pos 0)
    (if (setq pos (vl-string-search "\\_FldIdx " str pos))
      (while (setq pos (vl-string-search "\\_FldIdx " str pos))
        (setq fldId (entget (cdr (assoc 360 field)))
              field (vl-remove (assoc 360 field) field))
        (setq
              str   (strcat
                      (substr str 1 pos)
                      (if (setq objID (cdr (assoc 331 fldId)))
                        (vl-string-subst
                          ;;; (strcat "ObjId " (itoa (gc:EnameToObjectId objID))) ;;; VVA 2015-12-07
                          (strcat "ObjId " (bg:GetObjectIDString objID))
                          ;;; "ObjIdx" ;;; rem VVA 2015-12-07
                          (ObjIdxStr (cdr (assoc 2 fldId))) ;;; add VVA 2015-12-07
                          (cdr (assoc 2 fldId))
                        )
                        (foo fldId (cdr (assoc 2 fldId)))
                      )
                      (substr str (1+ (vl-string-search ">%" str pos)))
                    )
        )
      )
      str
    )
  )
  (setq elst (entget ent))
  (if (vlax-property-available-p (vlax-ename->vla-object ent) 'Textstring)
    (cond ((= (cdr(assoc 0 elst)) "MULTILEADER")
           (setq str (cdr(assoc 304 elst)))
           )
          ((and ;;; MTEXT ATTRIB ADD VVA 2011-20-27
             (member (cdr(assoc 0 elst)) '("ATTRIB"))
             (member '(101 . "Embedded Object") elst)
             )
           (setq str (apply 'strcat (append (bg:massoc 3 elst)(bg:massoc 1 (member '(101 . "Embedded Object") elst)))))
           )
          
          ((member (cdr(assoc 0 elst)) '("TEXT" "MTEXT" "ATTRIB"))
           (setq str (apply 'strcat (append (bg:massoc 3 elst)(bg:massoc 1 elst))))
           )
          (t (setq str (vla-get-TextString (vlax-ename->vla-object ent))))
    )
    )
  (if (and
	(member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT" "MULTILEADER"))
	(setq xdict (cdr (assoc 360 elst)))
	(setq dict (dictsearch xdict "ACAD_FIELD"))
	(setq field (dictsearch (cdr (assoc -1 dict)) "TEXT"))
      )
    (setq str (foo field (cdr (assoc 2 field))))
  )
    str
)
(defun bg:GetObjectIDString ( obj / *util* )
  (if (eq (type obj) 'ENAME)
    (setq obj (vlax-ename->vla-object obj))
    )
  (setq *util* (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object))))
  (if  (vlax-method-applicable-p *util* 'GetObjectIdString)
    (vla-GetObjectIdString *util* obj :vlax-false)
    (itoa (vla-get-ObjectId obj))
  )
 )
(defun bg:massoc (key alist)
  ;;;lib:massoc mip_lib.lsp
  (mapcar 'cdr (vl-remove-if-not (function (lambda (x) (= key (car x)))) alist)))

(princ "\nType MTLE, MTLS, VLR_MTLE_ON, VLR_MTLE_OFF in command line")(princ)
;;;Если нужно активизировать реактор при загрузке уберите ;;; из последней строчки
;;;(C:VLR_MTLE_ON)

PS Старый вариант перенесен в пост #48
PPS Обновлено (теперь сохраняет поля в мтексте) см. http://forum.dwg.ru/showthread.php?p...56#post1480456
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 08.12.2015 в 19:02. Причина: Новая версия выбор только MULTILEADER
VVA вне форума  
 
Непрочитано 19.11.2010, 02:01
#52
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,536
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, работает!
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 19.11.2010, 08:00
#53
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 824


VVA, А можно сделать, чтобы при загрузке автокада рекатор автоматом включался. Т.е. сам реактор.лсп у меня в автозагрузке, но потом приходится набирать VLR_MTLE_ON.
Astartes вне форума  
 
Непрочитано 19.11.2010, 10:05
1 | #54
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Astartes, Или
1. В Автозагрузку вставь строчку после загрузки лиспа (C:VLR_MTLE_ON)
2. Вставь эту строчку в конец самого лисп файла
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.11.2010, 11:02
#55
Astartes

Котло- и реакторостроение
 
Регистрация: 25.02.2010
Барнаул
Сообщений: 824


VVA, Шикарно.
Спасибо.
Astartes вне форума  
 
Непрочитано 29.11.2010, 15:39
#56
Sokolov_Art


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


Так намного лучше!

Поработав несколько часов, нашёл неточность:

Я добавил строчку (C:VLR_MTLE_ON) в конец файла LISP и добавил файл в автозагрузку.
при каждом открытии нового чертежа *LE* прибавлялось в левом нижнем углу (см. рис) *LE**LE**LE**LE**LE* - 5 открытых файлов

Решил проблему добавлением в файл LISP-a строчки: (C:VLR_MTLE_OFF)
перед строчкой (C:VLR_MTLE_ON)

(setvar "MODEMACRO" (VL-STRING-LEFT-TRIM "*LE* " (getvar "MODEMACRO")))
(princ "\nMtex Line Equal Reactor OFF")
(princ)
)
(princ "\nType MTLE, MTLS, VLR_MTLE_ON, VLR_MTLE_OFF in command line")
(C:VLR_MTLE_Off)
(C:VLR_MTLE_ON)


При каждом новом чертеже он выключает то что было до него и включает один раз... Наверняка можно как-то умнее.
Просто хотел обратить внимание.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок.JPG
Просмотров: 215
Размер:	41.8 Кб
ID:	49086  

Последний раз редактировалось Sokolov_Art, 29.11.2010 в 17:05.
Sokolov_Art вне форума  
 
Непрочитано 06.12.2010, 19:22
#57
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Sokolov_Art Посмотреть сообщение
Наверняка можно как-то умнее.
Просто хотел обратить внимание.
Спасибо Sokolov_Art, только сейчас заметил. Обновил #51. Должно работать. Изменения выделил синим.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.03.2011, 17:12
#58
Liam

Бумагомаратель
 
Регистрация: 02.11.2007
Пермь
Сообщений: 1,542


VVA, спасибо за полезный лисп.
А как можно применить эту команду ко всем уже существующим мультивыноскам в чертеже?
Liam вне форума  
 
Непрочитано 31.03.2011, 19:40
#59
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Liam Посмотреть сообщение
А как можно применить эту команду ко всем уже существующим мультивыноскам в чертеже?
Читать #51 команда MTLE значение коэффициента 0.86
Кстати, такие же проблемы и с китайским языком (требуетя регистрация). Код #51 так же помог.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 31.03.2011, 22:46
#60
Liam

Бумагомаратель
 
Регистрация: 02.11.2007
Пермь
Сообщений: 1,542


Цитата:
Сообщение от VVA Посмотреть сообщение
Читать #51 команда MTLE значение коэффициента 0.86
Кстати, такие же проблемы и с китайским языком (требуетя регистрация). Код #51 так же помог.
Это всё здорово, конечно, но если использовать значение 0.86, то вторая строка текста, которая под выносной линией пишется поднимается вверх и получается обратный эффект...
Кроме того, если вызвать команду MTLE и выбрать существующие выноски, то спец. символы в них (значки швеллера, треугольнички и т.п.) превращаются в "?" (использую mipgost). =(
Liam вне форума  
 
Непрочитано 01.04.2011, 10:02
#61
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Liam Посмотреть сообщение
Это всё здорово, конечно, но если использовать значение 0.86, то вторая строка текста, которая под выносной линией пишется поднимается вверх и получается обратный эффект.
По ссылке из #59 есть вариант как отодвинуть 2 строчку вниз. Посмотри п.4

How to find the desired value formatting \ \ pxse?
1. Draw mleader with text height = 1

2. Use Line Spacing formatting

3. Find the value of paragraph line spacing. It will be <1

4. For mleader with a few lines I use paragraph spacing to omit 2 and subsequent lines

Цитата:
Кроме того, если вызвать команду MTLE и выбрать существующие выноски, то спец. символы в них (значки швеллера, треугольнички и т.п.) превращаются в "?" (использую mipgost). =(
Я тоже использую mipgost. Вопрос требует доп. исследований
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.04.2011, 11:01
#62
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Смотрю, что топик, по теме очень большой... (((
Если примитив имеет такие недочёты, может пока он не доведён до ума автодеском лучше вместо стандартной автокадовской мультивыноски создать свой аннотативный динамический блок и использовать его?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 01.04.2011, 16:24
#63
Sokolov_Art


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


С блоком пробовали...
Ничего хорошего не вышло. По крайней мере у меня.
Так как я при работе с чертежом постоянно использую функцию stretch.
Ей очень удобно все размеры и выноски таскать "туда-сюда".
А когда выноска сделана блоком - ее невозможно таким образом перетаскивать. Когда выноска одна - это не проблема, но когда хочется разом 20 выносок переместить куда-то - тогда возникают трудности. Приходится по одной их перемещать.
Надеюсь понятно объяснил
Sokolov_Art вне форума  
 
Непрочитано 21.04.2011, 17:18
#64
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Liam Посмотреть сообщение
А как можно применить эту команду ко всем уже существующим мультивыноскам в чертеже?
MTLE

Цитата:
Сообщение от Sokolov_Art Посмотреть сообщение
Это всё здорово, конечно, но если использовать значение 0.86, то вторая строка текста, которая под выносной линией пишется поднимается вверх и получается обратный эффект...
Кроме того, если вызвать команду MTLE и выбрать существующие выноски, то спец. символы в них (значки швеллера, треугольнички и т.п.) превращаются в "?" (использую mipgost). =(
Исправил версию в #51 должно работать. Тестируй
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 05.05.2011, 12:38
1 | #65
Volodich

проектировщик-электрик
 
Регистрация: 20.12.2007
Челябинск
Сообщений: 475


Прошу прощения, но я, кажется, что-то недопонял. Почитав топик понял как проблема решается, но не понял, как правильно пользоваться лиспом.
Загружаю его, пишу в командной строке MTLE. Меня спрашивают: "enter line spacing (equal)". Я же топик читал, ввожу 0,866666. Дальше предлагают выбрать выноску. Выбираю. Текст в выноске встает на место.
Но ведь не может такого быть, чтобы было рассчитано - вручную нажимать на все мультивыноски, программисты же как правило самые ленивые (в хорошем смысле) люди на земле!
Но я не понял, как сделать, так чтоб запустил программу, а она сама все сделала во всех мультивыносках?

Добавлено: Кажется понял: пишем MTLE, указываем значение (0,85 - например), выделяем весь чертеж и готово! Правильно?

Да, кстати, огромное спасибо разработчику (VVA) и всем принимавшим участие!!!
__________________
Неважно, что что-то идет неправильно. Возможно, это хорошо выглядит...

Последний раз редактировалось Volodich, 05.05.2011 в 12:48.
Volodich вне форума  
 
Непрочитано 05.05.2011, 13:01
#66
Sokolov_Art


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


Цитата:
Сообщение от Volodich Посмотреть сообщение
выделяем весь чертеж и готово! Правильно?
Правильно
Sokolov_Art вне форума  
 
Непрочитано 05.05.2011, 17:28
#67
Вовочка

пищевая технология
 
Регистрация: 02.06.2009
Киев
Сообщений: 283
<phrase 1=


VVA, можете пояснить более доходчиво когда использовать MTLS, а когда MTLE. Спасибо.
Вовочка вне форума  
 
Непрочитано 05.05.2011, 17:47
1 | #68
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Использовать MTLS
К теме данного топика не имеет никакого отношения.
MTLE и VLR_MTLE_ON использовать, если текст с твоим шрифтом в мультивыноске прилипает к полке.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.01.2012, 10:08
#69
Josh


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


VVA, отличная работа!
Josh вне форума  
 
Непрочитано 16.08.2012, 13:53
#70
vporsh


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


Отличная работа
У меня текст прилип к полке после того как в тексте появилась ссылка(field)
после обработки этим лиспом ссылки того-потерялись
а в остальном все хорошо
это мона исправить?
__________________
я Конструктор - вот Чертеж
ACAD 2011 eng 32
vporsh вне форума  
 
Непрочитано 16.08.2012, 14:31
#71
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от vporsh Посмотреть сообщение
ссылки того-потерялись
Если имеются ввиду поля, то код из #51 у меня их не "теряет".
Нужен файлик с примером
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 16.08.2012, 16:40
#72
vporsh


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


поле- ссылка на подшивку
Вложения
Тип файла: zip ВОТ.zip (1.12 Мб, 71 просмотров)
__________________
я Конструктор - вот Чертеж
ACAD 2011 eng 32

Последний раз редактировалось vporsh, 16.08.2012 в 16:50. Причина: неправильное вложение
vporsh вне форума  
 
Непрочитано 17.08.2012, 10:34
#73
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


vporsh, Поле на подшивку возвращается правильно
Твое
Цитата:
"1 {\\Ftxt|c204;(}%<\\AcSm Database(\"E:\\Щелково-дом\\MUSSOR_SHELLK\\ВОТ\\KM_142T.dst\").SheetSet(\"gDC0137F8-3FDF-4C7D-98DB-B8B183437B1E\").Component(\"gF7E9E975-85AE-4972-B55F-C73349646D2C\").Number \\href \"E:\\Щелково-дом\\MUSSOR_SHELLK\\ВОТ\\1-13s3.dwg#,7-15##1\">%)"
MTLS
Цитата:
"\\pxa0.25,se0.86;1 {\\Ftxt|c204;(}%<\\AcSm Database(\"E:\\Щелково-дом\\MUSSOR_SHELLK\\ВОТ\\KM_142T.dst\").SheetSet(\"gDC0137F8-3FDF-4C7D-98DB-B8B183437B1E\").Component(\"gF7E9E975-85AE-4972-B55F-C73349646D2C\").Number \\href \"E:\\Щелково-дом\\MUSSOR_SHELLK\\ВОТ\\1-13s3.dwg#,7-15##1\">%)"
Почему при обновлении содержимого слетают поля - не знаю
Это все легко можно поправить ручками
1. В редакторе мультивыноски в настройках абзаца (3 кнопка слева во 2 ряду, там еще знак пи) выставь междустрочный интервал в абзаце "ТОчно" значение как 0.86H, где Н - твоя высота текста. В твоем случае 0.86 x 3.5 = 3.01
2. Командой копирования свойств ( _matchprop ) обнови свойства в других мультивыностах) В опции "Настройки" сними все чек-боксы, кроме мультивыноски
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.08.2012, 12:25
#74
vporsh


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


спешил. забыл пропургенить
что такое чек-боксы?
__________________
я Конструктор - вот Чертеж
ACAD 2011 eng 32
vporsh вне форума  
 
Непрочитано 17.08.2012, 13:25
#75
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Там где птички ставятся
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 08.12.2015, 19:05
#76
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от VVA Посмотреть сообщение
Почему при обновлении содержимого слетают поля - не знаю
Проблема исправлена для полей кроме ссылок на подшивку (надеюсь) Обновил #51
Тестировал без фанатизма на 32 и 64 разрядных Автокадах
По поводу примера из #72 заметил такой нюанс, что если вызвать команду _ddedit, указать мультивыноску и, ничего не меняя, завершить команду, то текст на мультивыноске поднимается
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 08.12.2015 в 19:15.
VVA вне форума  
 
Непрочитано 04.12.2018, 15:37
#77
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


Цитата:
Сообщение от VVA Посмотреть сообщение
1. В Автозагрузку вставь строчку после загрузки лиспа (C:VLR_MTLE_ON)
Можно спросить как это сделать?
gest вне форума  
 
Непрочитано 04.12.2018, 16:53
#78
skkkk


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


https://dwg.ru/pub/9
Там ниже раздел Автозагрузка.
skkkk вне форума  
 
Непрочитано 04.12.2018, 17:06
#79
gest

GEODATA Engineering S.p.A.
 
Регистрация: 11.02.2005
Монино
Сообщений: 692


В автозагрузку lisp добавил, непонятно как прописать "вставь строчку после загрузки лиспа (C:VLR_MTLE_ON)"
gest вне форума  
 
Непрочитано 04.12.2018, 18:03
#80
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


gest, Человек грузил отдельно лисп. Если скопируешь код из #51, то в последних 2 строках найдешь
Код:
[Выделить все]
;;;Если нужно активизировать реактор при загрузке уберите ;;; из последней строчки
;;;(C:VLR_MTLE_ON)
Убери комментарии (символы ;;;) и все. При загрузке lsp файла реактор будет запускаться
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Требуется помощь,что бы Mleader не опускался



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется восстановить ригель Куртан Конструкции зданий и сооружений 4 13.09.2008 12:05
Требуется ли дымоудаление irwave Прочее. Архитектура и строительство 1 18.03.2007 08:46