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

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

Как переместить текст в размере

Ответ
Поиск в этой теме
Непрочитано 15.06.2010, 18:19 #1
Как переместить текст в размере
oktilon
 
Регистрация: 17.02.2010
Сообщений: 3

Есть функция для автоматической простановки размерной цепочки (Dimlinear) на LISP. Каждый размер вставляется через (vl-cmdf "_DimLinear" ...) затем через entlast/entget/entmod/entupd меняются его слой на слой "РАЗМЕРЫ", там же пытаюсь заменить точку привязки размера (DXF код 11) но LISP ее не принимает. Может кто знает как изменить положение текста в размере?

Фрагмент кода программы:
ptS, ptE - точки между которыми ставится размер (они выровнены по горизонтали или вертикали)
dimclayer - имя нужного слоя.
Не срабатывает выделенная красным строка

Код:
[Выделить все]
(setq rDist (distance ptS ptE)
	  alfa (angle ptS ptE)
	  ang (+ alfa (/ pi 2))
	  ptMd (polar ptS alfa (/ rDist 2))
	  ptTx (polar ptMd ang 100)
)
(vl-cmdf "_DimLinear" ptS ptE (polar ptS ang 100))
(setq entDim (entlast)
	  lstDim (entget entDim)
	  lstDim (subst (cons 8 dimclayer) (assoc 8 lstDim) lstDim)
	  lstDim (subst (cons 11 ptTx) (assoc 11 lstDim) lstDim)
)
(ssadd entDim ssDimLine)
(entmod lstDim)
(entupd entDim)
Просмотров: 2617
 
Непрочитано 16.06.2010, 09:43
1 | #2
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Можно использовать vla:
Код:
[Выделить все]
(defun dim-put-text-position (ent_dim pt)
  ;; ent_dim - ename размера
  ;; pt - точка в ПСК, новое положение текста размера
  ;; Пример вызова: (dim-put-text-position (car (entsel "\nРазмер:")) (getpoint "\nНовое положение текста:"))
  (if (not vlax-ename->vla-object)
    (vl-load-com)
  ) ;_ end of if
  (not (vl-catch-all-error-p
	 (vl-catch-all-apply
	   '(lambda ()
	      (vla-put-TextPosition
		(vlax-ename->vla-object ent_dim)
		(vlax-3d-point (trans pt 1 0))
	      ) ;_ end of vla-put-TextPosition
	    ) ;_ end of lambda
	 ) ;_ end of vl-catch-all-apply
       ) ;_ end of vl-catch-all-error-p
  ) ;_ end of not
) ;_ end of defun
Do$ вне форума  
 
Автор темы   Непрочитано 16.06.2010, 12:20
#3
oktilon


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


Спасибо что показал как обходить ошибки VBA в LISP. Я только из-за частых ошибок в VBA не использовал vl* функции.
А для чего используется Лямбда функция?
Чем плох вариант :
Код:
[Выделить все]
(vl-catch-all-apply
	'vla-put-TextPosition
	(list
		(vlax-ename->vla-object entDim)
		(vlax-3D-point ptTx)
	)
)
oktilon вне форума  
 
Непрочитано 16.06.2010, 12:51
1 | #4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Да ничем не плох, просто работает по-другому немного.
В таком варианте защищено от ошибки только выполнение функции vla-put-TextPosition со списком, а если, к примеру, будут неправильные типы переменных entDim и ptTx - возникнет ошибка. То есть ошибки при формировании списка не отлавливаются.
В варианте с лямбдой защищены от ошибок все выражения внутри лямбды.
Do$ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как переместить текст в размере



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как мне в углу чертежа добавить параметр шереховатости , вообще как добавлять какой либо текст в Autocad? sabotin AutoCAD 3 11.06.2010 18:05
Как получить MTEXT но без форматирования, только текст? lexluther Программирование 14 13.09.2009 22:52
Как выбрать текст АвтоЛиспом не только из текущего слоя но из всех доступных слоев (использую entnext)? lexluther LISP 2 25.08.2009 14:40
Как извлечь из размера значение, т.е. текст??? Rubль Программирование 10 24.08.2009 17:24
как с помощью vba сохранить текст vasyavip Программирование 2 06.11.2008 18:53