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

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

Ориентирование текста мультивыноски

Ответ
Поиск в этой теме
Непрочитано 26.03.2019, 09:48 #1
Ориентирование текста мультивыноски
nynokne
 
Регистрация: 17.02.2014
Сообщений: 50

Добрый день.
Возник вопрос, каким образом можно создать мультивыноску с ориентацией тектса слева от выноски (сама выноска должна быть перпендикулярна горизонту)?

Выноску создаю так:
Код:
[Выделить все]
 (cond 
					((not acdoc)
						(setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
					)
				)
				(setq model_spc
					(if (> (vla-get-activespace acdoc) 0)
						(vla-get-modelspace acdoc)
							(vla-get-paperspace acdoc)
					)
				)
					
				(setq mleader 
					(vla-addmleader
						model_spc
							(vlax-make-variant
								(vlax-safearray-fill
									(safearray vlax-vbdouble '(0 . 5))
									(apply 'append (list t_vun t_text))
								)
							)
						0
					)
				)
				
				(vlax-put-property  mleader 'textstring  text_itogo)
Создаётся выноска как нужно, но всегда текст в ней справа от выносной линии. Нужно через условие содержание текста часть выносок делать с левой ориентацией текста, часть - с правой.

Всё, что придумал:
Код:
[Выделить все]
 (if ....
(setq vunoska (entlast))
(command "._mirror" vunoska "" t_vun t_text "_y")
);end if
Есть ли нормальный способ (без command) либо сразу создать "левоориентированную" выноску либо менять свойство созданной?

Миниатюры
Нажмите на изображение для увеличения
Название: Снимок11.JPG
Просмотров: 25
Размер:	11.8 Кб
ID:	212273  

Просмотров: 1263
 
Непрочитано 26.03.2019, 10:30
#2
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 701


посмотрите метод SetDoglegDirection
kacugu вне форума  
 
Автор темы   Непрочитано 26.03.2019, 13:28
#3
nynokne


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


Цитата:
Сообщение от kacugu Посмотреть сообщение
посмотрите метод SetDoglegDirection
Спасибо за наводку.
Самостоятельно разобраться с этим методом не получается.

Код:
[Выделить все]
 
(if (< rasst_chislo 0)
      (progn							
		(vla-setdoglegdirection mleader 0 (vlax-3D-point '(-1 0 0)))
		(vla-put-TextJustify mleader acAttachmentPointMiddleRight)													
	);end progn
	(progn
		(princ "\nNo")
		(terpri)
		(princ)
	);end progn
);end if
В итоге получилось совсем не то, что нужно (см.скриншот).
Появилась мысль изменить координаты текста, но тоже ерунда получается.
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок22.JPG
Просмотров: 7
Размер:	11.1 Кб
ID:	212302  
nynokne вне форума  
 
Непрочитано 26.03.2019, 14:32
#4
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 701


nynokne, можете выложить код полностью?
kacugu вне форума  
 
Автор темы   Непрочитано 26.03.2019, 14:50
#5
nynokne


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


Цитата:
Сообщение от kacugu Посмотреть сообщение
nynokne, можете выложить код полностью?
Код:
[Выделить все]
 (DEFUN c:MMM (/) ; начало функции
	(vl-load-com)
		(command "_mirrtext" "0")
		(setvar 'dimzin 0)
		(setq p2 (getpoint "\Укажите базовую точку: "))
		(terpri)
		
			(while (setq p1 (getpoint "\Укажите точку вставки : "))
				(setq osm (getvar "osmode")); запоминаем привязки пользователя
				(setvar "osmode" 0); отключаем привязки
		
				(setq Y_p1 (nth 1 p1))
				(setq X_p1 (nth 0 p1))
				(setq Y_p2 (nth 1 p2))
				(setq X_p2 (nth 0 p2))
		
				(setq rasst (rtos (/ (- X_p1 X_p2) 5) 2 2)); расстояние по горизонтали между осью и точкой вставки в масштабе
				(setq rasst_chislo (atof rasst))
				(princ "\nРасстояние:")
				(princ rasst_chislo)
				(setq text_itogo (strcat "L - " rasst))
				(princ "\nТекст выноски: ")
				(princ text_itogo)
				(setq t_vun (list X_p1 Y_p1 0.0)); координаты точки вставки выноски
				(princ "\nКоординаты точки вставки выноски: ")
				(princ t_vun)
				(setq Y_text (+ Y_p1 4))
				(setq x_text x_p1)
					
				(setq t_text (list X_text Y_text 0.0)); координаты вставки текста выноски
				(princ "\nКоординаты точки вставки текста: ")
				(princ t_text)
				
				(cond 
					((not acdoc)
						(setq acdoc (vla-get-activedocument (vlax-get-acad-object)));
					)
				);end cond
				(setq model_spc
					(if (> (vla-get-activespace acdoc) 0);
						(vla-get-modelspace acdoc);
							(vla-get-paperspace acdoc);
					);end if
				);end setq
					
				(setq mleader 
					(vla-addmleader
						model_spc
							(vlax-make-variant
								(vlax-safearray-fill
									(safearray vlax-vbdouble '(0 . 5))
									(apply 'append (list t_vun t_text))
								)
							)
						0
					)
				)
				
				(vlax-put-property  mleader 'textstring  text_itogo)
				
				(setq sv_mleader (entget (entlast)))
					(if (< rasst_chislo 0)
						(progn
							(princ "\nYes")
							(terpri)
							(vla-setdoglegdirection mleader 0 (vlax-3D-point '(-1 0 0)))
							(vla-put-TextJustify mleader acAttachmentPointMiddleRight)
						);end progn
						(progn
							(princ "\nNo")
							(terpri)
							(princ);иначе "тихий" выход
						);end progn
					);end if
		
			); end while

		(setvar "osmode" osm); возвращает привязки пользователя
	);end defun
nynokne вне форума  
 
Непрочитано 26.03.2019, 16:04
1 | #6
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 701


После стр. 66 вставьте
Код:
[Выделить все]
 (vlax-invoke mleader 'setleaderlinevertices 0 (append p1 t_text))
kacugu вне форума  
 
Автор темы   Непрочитано 26.03.2019, 16:27
#7
nynokne


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


Цитата:
Сообщение от kacugu Посмотреть сообщение
После стр. 66 вставьте
Код:
[Выделить все]
 (vlax-invoke mleader 'setleaderlinevertices 0 (append p1 t_text))
Огромное спасибо!!
всё работает, как надо. Сам бы долго ещё искал этот метод.
nynokne вне форума  
 
Непрочитано 27.03.2019, 08:46
#8
koMon


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


Цитата:
Сообщение от kacugu Посмотреть сообщение
(append p1 t_text)
тут простым append никак не обойтись, массив надобен
koMon на форуме  
 
Непрочитано 27.03.2019, 10:11
#9
kacugu

начинающий инженер-гидротехник
 
Регистрация: 18.04.2010
Санкт-Петербург
Сообщений: 701


Offtop:
Цитата:
Сообщение от koMon Посмотреть сообщение
тут простым append никак не обойтись, массив надобен
Offtop: Почему оно тогда работает?
kacugu вне форума  
 
Непрочитано 27.03.2019, 10:48
#10
koMon


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


Offtop:
Цитата:
Сообщение от kacugu Посмотреть сообщение
Почему оно тогда работает?

Offtop: непорядок) надо ещё почитать) в смысле мне)
koMon на форуме  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Ориентирование текста мультивыноски

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Acad2017 не обновляется значение стиля для текста или мультивыноски при его смене через командную строку rand0m AutoCAD 2 26.10.2017 12:03
Преобразование текста и линий в мультивыноски (чохом) casaatik Программирование 2 04.12.2015 11:55
Экспорт текста из мультивыноски в word/excel Starex AutoCAD 3 28.07.2015 16:03
Как программно изменить выравнивание текста мультивыноски? mkung Программирование 6 19.06.2014 23:13
Не изменяется высота текста размера и мультивыноски из "Свойств" asii AutoCAD 3 12.04.2011 10:59