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

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

Как вставить значение переменной в текстовую строку???

Ответ
Поиск в этой теме
Непрочитано 04.04.2006, 13:16 #1
Как вставить значение переменной в текстовую строку???
Bredx
 
Проектирование систем безопасности
 
Кемерово
Регистрация: 09.02.2006
Сообщений: 34

Двумя кликами на пересекающихся прямых вычисляю угол, присваиваю значение переменной Angle1, вызываю _Text; а вот как теперь эту переменную вставить в текстовую строку?

Код:
[Выделить все]
^C^C_Line;'_cal;pt1=nea;\_Appint;@;'_cal;pt2=nea;\;_Erase;_Last;;cal;Angle1=ang(@,pt1,pt2);_text;\\;
Когда пробую через прозрачную 'calc; он так и пишет "'calc" а не 45(допустим)
Подскажите, люди добрые! [/quote]
__________________
_КУПУТ_ :)
Просмотров: 4680
 
Автор темы   Непрочитано 05.04.2006, 07:22
#2
Bredx

Проектирование систем безопасности
 
Регистрация: 09.02.2006
Кемерово
Сообщений: 34


нашел!!! Читайте ХЕЛП - воистину великая штука!!!
Системная переменная TEXTEVAL
Цитата:
Type: Integer
Not saved
Initial value: 0

Controls the method of evaluation of text strings entered with the TEXT or -TEXT commands.


0 All responses to prompts for text strings and attribute values are taken literally

1 All text starting from an opening parenthesis [(] or an exclamation mark [!] is evaluated as an AutoLISP expression, as for nontextual input


The TEXT command takes all input literally regardless of the setting of TEXTEVAL unless it is executed completely with a script or AutoLISP expression. The -TEXT command honors the setting of TEXTEVAL.
__________________
_КУПУТ_ :)
Bredx вне форума  
 
Автор темы   Непрочитано 05.04.2006, 07:30
#3
Bredx

Проектирование систем безопасности
 
Регистрация: 09.02.2006
Кемерово
Сообщений: 34


И, кстати, Макрос для подсчета фокусного расстояния камеры при известном угле обзора (координаты угла лучше считывать против часовой стрелки)
Код:
[Выделить все]
^C^C_Line;'_cal;p1=nea;\_Appint;@;'_cal;p2=nea;\;_Erase;_Last;;cal;ugol=ang(@,p1,p2);;x=2.4/(tang(ugol/2));(setq fokus (strcat "F - " (rtos x 2 1) "мм "  (rtos ugol 2 1) "%%d"));texteval;1;-text;\\\!fokus;texteval;0;
где:
p1 и p2 - точки на пересекающихся прямых
2.4 - половина ширины матрицы камеры
Ugol - угол между прямыми
x=2.4/(tang(ugol/2) - вспомните теорему пифагора
__________________
_КУПУТ_ :)
Bredx вне форума  
 
Автор темы   Непрочитано 05.04.2006, 07:36
#4
Bredx

Проектирование систем безопасности
 
Регистрация: 09.02.2006
Кемерово
Сообщений: 34


может кто поможет засунуть это в голый лисп?
да, и еще, линии угла обзора должны быть на чертеже до выполнения команды.
Я еще не понял как можно вставить коментарии в процессе:
то есть - "Укажите точку на первой/второй прямой:", после чего юзер должен ткнуть по линии.
__________________
_КУПУТ_ :)
Bredx вне форума  
 
Непрочитано 05.04.2006, 08:11
#5
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


Если я правильно понял то исходная задача - найти угол между указанными отрезками и по формуле рассчитать фокус? если так, то функция на лиспе будет выглядеть примерно так:
Код:
[Выделить все]
(defun ba-ba (/		     wide
	      first_line     first_angle
	      second_line    second_angle
	      seek_dist	     text_point
	      old_cmdecho    delta_angle
	     )
  (setq old_cmdecho (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq wide 2.4;;;ширина камеры 
text_height 2.5);;;высота текста
  (if (setq first_line (car (entsel "\nУкажите первый отрезок")))
;;;Указываем первый отрезок
    (if	(setq second_line (car (entsel "\Укажите второй отрезок")))
;;;Указываем второй отрезок
      (progn (setq first_angle	(angle (cdr (assoc 10 (entget first_line)))
;;;Угол первого отрезка
				       (cdr (assoc 11 (entget first_line)))
				) ;_ end angle
		   second_angle	(angle (cdr (assoc 10 (entget second_line)))
;;;Угол второго отрезка
				       (cdr (assoc 11 (entget second_line)))
				) ;_ end angle
		   delta_angle	(- (max first_angle second_angle)
;;;Разница углов
				   (min first_angle second_angle)
				) ;_ end -
	     ) ;_ end setq
	     (if (> delta_angle pi)
;;;приводим тупой угол к острому
	       (setq delta_angle (- delta_angle pi))
	     ) ;_ end if
	     (setq seek_dist (/ wide (/ (sin (/ delta_angle 2)) (cos (/ delta_angle 2)))))
;;;Вычисляем фокус
	     (if (setq text_point (getpoint "\nУкажите точку вставки текста"))
;;;Запрашиваем точку вставки текста
	       (vl-cmdf	"_.text"
			text_point
			text_height
			0.0
			(strcat (rtos seek_dist 2 2) " мм")
	       ) ;_ end vl-cmdf
;;;Пишем текст
	     ) ;_ end if
      ) ;_ end progn
    ) ;_ end if
  ) ;_ end if
  (setvar "cmdecho" old_cmdecho)
)
Это без проверки на то что указан примитив типа LINE (а не какой нить другой) и без отлова ошибок (например нажатие ESC)
_Andre_ вне форума  
 
Автор темы   Непрочитано 05.04.2006, 08:21
#6
Bredx

Проектирование систем безопасности
 
Регистрация: 09.02.2006
Кемерово
Сообщений: 34


Немножко апгрейдил:
Код:
[Выделить все]
^C^C_texteval;1;_Line;'_cal;p1=nea;\_Appint;@;'_cal;p2=nea;\;_Erase;_Last;;cal;ugol=ang(@,p1,p2);;x=2.4/(tang(ugol/2));(if (> x 0)(progn (setq fokus (strcat "F - " (rtos x 2 1) "мм "  (rtos ugol 2 1) "%%d"))) (progn(setq fokus (strcat "F - " (rtos (* x -1) 2 1) "мм "  (rtos (- 360 ugol) 2 1) "%%d"))));-text;\\\!fokus;texteval;0;
to _Andre_
А нельзя ли чтобы оно работало и с полилиниями?
__________________
_КУПУТ_ :)
Bredx вне форума  
 
Непрочитано 05.04.2006, 11:01
#7
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


с полилиниями вот так:
Код:
[Выделить все]
(defun ba-ba (/		     ba-get-angle
	      wide	     text_point
	      text_height    first_side
	      first	     first_point
	      second	     second_side
	      second_point   delta_angle
	      seek_dist
	     )
  (defun ba-get-angle (object point /)
;;;  (setq object first_side
;;;       point text_point)
    (setq deriv	(vlax-curve-getFirstDeriv
		  object
		  (vlax-curve-getParamAtPoint
		    object
		    (vlax-curve-getClosestPointTo object point)
		  ) ;_ end vlax-curve-getParamAtPoint
		) ;_ end vlax-curve-getFirstDeriv
    ) ;_ end setq
    (atan (/ (cadr deriv) (car deriv)))
  ) ;_ end defun
  (setq old_cmdecho (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (setq	wide 2.4
	text_height 2.5
  ) ;_ end setq
  (vl-load-com)
  (if (setq first (entsel "\nУкажите первую сторону угла"))
    (if	(setq second (entsel "\nУкажите вторую сторону угла"))
      (if (setq text_point (getpoint "\nУкажите точку вставки текста"))
	(progn (setq first_side	  (vlax-ename->vla-object (car first))
		     first_point  (cadr first)
		     second_side  (vlax-ename->vla-object (car second))
		     second_point (cadr second)
		     first_angle  (ba-get-angle first_side first_point)
		     second_angle (ba-get-angle second_side second_point)
		     delta_angle  (- (max first_angle second_angle)
;;;Разница углов
				     (min first_angle second_angle)
				  ) ;_ end -
	       ) ;_ end setq
	       (if (> delta_angle pi)
;;;приводим тупой угол к острому
		 (setq delta_angle (- delta_angle pi))
	       ) ;_ end if
	       (setq seek_dist (/ wide (/ (sin (/ delta_angle 2)) (cos (/ delta_angle 2)))))
	       (vl-cmdf	"_.text"
			text_point
			2.5
			0.0
			(strcat (rtos seek_dist 2 2) " мм")
	       ) ;_ end vl-cmdf
	) ;_ end progn
      ) ;_ end if
    ) ;_ end if
  ) ;_ end if
  (setvar "cmdecho" old_cmdecho)
)
Можно указывать как отрезки так и полилинии (прямые сегменты имеются ввиду, если указать на дуговой, то работать будет, но угол получиться к касательной к указанной точке дугового сегмента)
_Andre_ вне форума  
 
Непрочитано 05.04.2006, 11:06
#8
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


Кстати если запрашивать половину ширины матрицы камеры, то получиться более универсальная функция, я так думаю что что эта ширина все таки не есть постоянная величина во всех проектах.
_Andre_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как вставить значение переменной в текстовую строку???

Размещение рекламы