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

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

LISP. Не отображается часть полки мультивыноски

Ответ
Поиск в этой теме
Непрочитано 13.05.2016, 21:58 #1
LISP. Не отображается часть полки мультивыноски
kacugu
 
начинающий инженер-гидротехник
 
Санкт-Петербург
Регистрация: 18.04.2010
Сообщений: 893

Всем добрый вечер.
На просторах интернета был найден лисп, создающий мультивыноску со значениями атрибутов блока. Сам лисп работает нормально, но возникает проблема с полкой мультивыноски:
если конец мультивыноски (в коде это pnt) лежит левее начала мультивыноски (в коде - pnt0), то мультивыноска строится как на картинке в приложении.
Если после отрисовки мультивыноски войти в режим редактирования текста, поменять в свойствах выравнивание или направление текста, то мвыноска приобретает нормальный вид.
Прошу помочь разобраться в чём причина такого поведения мвыноски.
Autocad 2014, 2015, 2017 rus.
Заранее спасибо.

Код:
[Выделить все]
 ;; http://www.theswamp.org/index.php?topic=45573.0

(defun c:att2ml ( / Npoz Name Kod ent enx pnt0 lst mld pnt)
	   (while
           (progn
               (setvar 'errno 0)
               (setq ent (car (entsel "\nВыберите блок <Выход>: ")))
               (cond
                   (   (= 7 (getvar 'errno))
                       (princ "\nМимо, попробуйте снова.")
                   )
                   (   (null ent)
                       nil
                   )
                   (   (/= "INSERT" (cdr (assoc 0 (setq enx (entget ent)))))
                       (princ "\nОбъект не является блоком.")
                   )
                   (   (/= 1 (cdr (assoc 66 enx)))
                       (princ "\nБлок не содержит атрибутов.")
                   )
                   (   (not
                           (and
                               (setq lst (vlax-invoke (vlax-ename->vla-object ent) 'getattributes)
                                     lst (mapcar '(lambda ( x ) (cons (strcase (vla-get-tagstring x)) x)) lst)
                               )
                               (setq Npoz (cdr (assoc "НОМЕР_ПОЗИЦИИ" lst)))
							   (setq Name (cdr (assoc "НАИМЕНОВАНИЕ" lst)))
							   (setq Kod (cdr (assoc "КОД" lst)))
                           )
                       )
				   (princ "\nБлок не содержит атрибут \"НОМЕР_ПОЗИЦИИ\".")
                   )
                   (   
					(setq 	pnt0 (getpoint  "\nВыберите начало мультивыноски >> \n")
							pnt (getpoint (trans pnt0 ent 1) "\nВыберите конец мультивыноски <Выход>: ")
					)
                    (setq mld
                         (vlax-invoke
                               (vlax-get-property (LM:acdoc)
                                   (if (= 1 (getvar 'cvport))
                                       'paperspace
                                       'modelspace
                                   )
                               )
                               'addmleader
                               (append (trans pnt0 ent 0) (trans pnt 1 0))
                               0
                           )
                    )
;; ;; Получаем перечень атрибутов блока с их значениями		    
(vla-put-textstring mld
						(if (= "" (vla-get-textstring Name))
									(strcat
											   "%<\\AcObjProp Object(%<\\_ObjId "
											   (LM:ObjectID Npoz)
											   ">%).TextString>%"
											   "\\P" 
											   "("
											   "%<\\AcObjProp Object(%<\\_ObjId "
											   (LM:ObjectID Kod)
											   ">%).TextString>%"
											   ")"									
									)
									(strcat 
											   "%<\\AcObjProp Object(%<\\_ObjId "
											   (LM:ObjectID Npoz)
											   ">%).TextString>%"
											   "\\P" 
											   "%<\\AcObjProp Object(%<\\_ObjId "
											   (LM:ObjectID Name)
											   ">%).TextString>%"
											   (if (= "" (vla-get-textstring Kod))
													""
													(strcat
													"\\P"
													"("
													"%<\\AcObjProp Object(%<\\_ObjId "
													(LM:ObjectID Kod)
													">%).TextString>%"
													")"
													)
											   )
									)						
						)					
)
						(vla-put-textrotation mld 0.0)
						(vla-put-TextJustify mld 2)
						(if (<= (car pnt) (car (trans pnt0 ent 1)))
                           (progn
                               (vla-setdoglegdirection mld 0 (vlax-3D-point (trans '(-1.0 0.0) 1 0 t)))
                               (vlax-invoke mld 'setleaderlinevertices 0 (append (trans pnt0 ent 0) (trans pnt 1 0)))
                           )
                           (vla-setdoglegdirection mld 0 (vlax-3D-point (trans '(1.0 0.0) 1 0 t)))
                       )
                       (vla-regen (LM:acdoc) acactiveviewport)
                       t
                   )
               )
           )
       )	   
(princ)
)
     
    ;; ObjectID  -  Lee Mac
    ;; Returns a string containing the ObjectID of a supplied VLA-Object
    ;; Compatible with 32-bit & 64-bit systems
     
    (defun LM:ObjectID ( obj )
       (eval
           (list 'defun 'LM:ObjectID '( obj )
               (if
                   (and
                       (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
                       (vlax-method-applicable-p (vla-get-utility (LM:acdoc)) 'getobjectidstring)
                   )
                   (list 'vla-getobjectidstring (vla-get-utility (LM:acdoc)) 'obj ':vlax-false)
                  '(itoa (vla-get-objectid obj))
               )
           )
       )
       (LM:ObjectID obj)
    )
     
    ;; Active Document  -  Lee Mac
    ;; Returns the VLA Active Document Object
     
    (defun LM:acdoc nil
       (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
       (LM:acdoc)
    )
     
    (vl-load-com) (princ)

Миниатюры
Нажмите на изображение для увеличения
Название: Для форума.png
Просмотров: 38
Размер:	19.5 Кб
ID:	170324  


Последний раз редактировалось kacugu, 16.05.2016 в 09:00. Причина: детали
Просмотров: 1787
 
Непрочитано 16.05.2016, 06:07
#2
skkkk


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


В данном случае хорошо бы уточнить версию Автокада. У меня на 2011-м такое иногда происходит, чаще всего, если не всегда - при обновлении поля в мультивыноске. Я это заметил давным-давно. Заметил также и что...
Цитата:
Сообщение от kacugu Посмотреть сообщение
Если после отрисовки мультивыноски поменять в свойствах выравнивание или направление текста, то мвыноска приобретает нормальный вид.
и что если войти режим редактирования текста, то тоже приобретает.
Цитата:
Сообщение от kacugu Посмотреть сообщение
в чём причина такого поведения мвыноски
В чем причина - не знаю. А лечу так: запускаю вместо обычной регенерации
Код:
[Выделить все]
 (vl-load-com)
(defun c:mleader-regen ( / ss n TargetObj jstf)					
	(if	(setq ss (ssget "_X" '((0 . "MULTILEADER"))))
		(repeat (setq n (sslength ss))
			(setq TargetObj (vlax-ename->vla-object (ssname ss (setq n (1- n))))
				  jstf (vla-get-TextJustify TargetObj)
			) ;_ end of setq
			(vla-put-TextJustify TargetObj 1)
			(vla-put-TextJustify TargetObj jstf)
		) ;_ end of repeat
	) ;_ end of if
	(command "_REGENALL")
)
В свете последних новостей также не забываем про это.
skkkk вне форума  
 
Автор темы   Непрочитано 16.05.2016, 08:52
#3
kacugu

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


Цитата:
Сообщение от skkkk Посмотреть сообщение
не забываем про это.
тему смотрел, но у меня 90-й код не меняется. Меняются - 10, 12 и 304.

----- добавлено через ~14 мин. -----
skkkk, спасибо, навели на мысль. Добавил после окончания while следующий код, и мвыноска получается теперь нормальной:
Код:
[Выделить все]
 (vla-put-TextJustify mld 1)
(vla-put-TextJustify mld 2)
kacugu вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Не отображается часть полки мультивыноски

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с написанием программы на Lisp Voyager LISP 9 07.04.2010 10:12
Проблема с ксероксом Canon PC860 _Oleg_ Разное 5 26.12.2007 10:18
Lisp - проблема с получением точки? Кулик Алексей aka kpblc LISP 3 08.09.2006 15:14
Проблема с присвоением значения (Lisp) DEM LISP 2 09.05.2006 17:39
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19