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

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

Как создать команду высчитывающую расстояние между двумя точками и записывала результат в виде текста на чертеже

Ответ
Поиск в этой теме
Непрочитано 10.06.2013, 14:44 #1
Как создать команду высчитывающую расстояние между двумя точками и записывала результат в виде текста на чертеже
FRC_Volen
 
Тюмень
Регистрация: 10.06.2013
Сообщений: 14

Доброго времени суток,
не могу сообразить как создать команду которая бы посчитала расстояние между двумя точками и вывела результат в третью точку в виде текста

т.е. указываешь три точки и в третью точку возвращается результат
Просмотров: 4503
 
Непрочитано 10.06.2013, 15:11
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Корявый макрос на кнопку:
Код:
[Выделить все]
^C^C_DIST;\\(princ " Укажите точку")(command "_text" pause "" "" (getvar "DISTANCE"))
Profan вне форума  
 
Непрочитано 10.06.2013, 15:18
#3
skkkk


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


Что-то типа такого? (Без проверок, обработки ошибок и прочих прелестей)
Код:
[Выделить все]
(defun C:test ()
    (vl-load-com)
    (vla-AddMtext (vla-get-ModelSpace(vla-get-activedocument (vlax-get-acad-object)))
              (vlax-3d-point '(0.0 0.0 0.0)) 
              0
              (vl-princ-to-string (distance (getpoint "\nУкажите первую точку") (getpoint "\nУкажите вторую точку")))
    )
    (command "_.copybase" '(0.0 0.0 0.0) (entlast) "")
    (command "_.erase" (entlast) "")
    (command "_.pasteclip")
)
Конечно, написание кода заняло буквально пару минут, но поиск никто не отменял - было уже множество решений. Очень советую поискать - полезное занятие.
skkkk вне форума  
 
Непрочитано 10.06.2013, 15:39
#4
trir


 
Регистрация: 18.12.2010
Сообщений: 5,047


Есть ещё _dimaligned
trir вне форума  
 
Автор темы   Непрочитано 11.06.2013, 06:42
#5
FRC_Volen


 
Регистрация: 10.06.2013
Тюмень
Сообщений: 14


Цитата:
Сообщение от Profan Посмотреть сообщение
Корявый макрос на кнопку:
Код:
[Выделить все]
^C^C_DIST;\\(princ " Укажите точку")(command "_text" pause "" "" (getvar "DISTANCE"))

Вторая программа тоже работает отлично, но как сделать программу чтобы она работала без остановки, как если бы перед макросом поставить звездочку

Кнопка работает, теперь подскажите как развернуть текст на 90 градусов против часовой
и
нужно чтобы оставалось всегда две цифры после запятой, как убрать остальные цифры?
и
результат разделить на 10

Последний раз редактировалось FRC_Volen, 11.06.2013 в 08:32. Причина: Дополнил вопрос
FRC_Volen вне форума  
 
Непрочитано 11.06.2013, 11:22
#6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


а ложку в рот за маму, за папу... или в ветку поиск исполнителей бегом... задача плевая и написана уже 100500 раз
gomer вне форума  
 
Непрочитано 11.06.2013, 11:39
#7
skkkk


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


Цитата:
Сообщение от FRC_Volen Посмотреть сообщение
работала без остановки
Цитата:
Сообщение от FRC_Volen Посмотреть сообщение
развернуть текст на 90 градусов против часовой
Цитата:
Сообщение от FRC_Volen Посмотреть сообщение
чтобы оставалось всегда две цифры после запятой
Цитата:
Сообщение от FRC_Volen Посмотреть сообщение
результат разделить на 10
Код:
[Выделить все]
 (defun C:test ( / oldDIMZIN)
(vl-load-com)
	(defun *error*(msg)
		(if oldDIMZIN (setvar "DIMZIN" oldDIMZIN))
	)
	(setq oldDIMZIN (getvar "DIMZIN"))
	(setvar "DIMZIN" 0)
	(while t
		(vla-AddMtext (vla-get-ModelSpace(vla-get-activedocument (vlax-get-acad-object)))
				  (vlax-3d-point '(0.0 0.0 0.0)) 
				  0
				  (rtos (/ (distance (getpoint "\nУкажите первую точку") (getpoint "\nУкажите вторую точку")) 10) 2 2)
		)
		(vla-put-Rotation (vlax-ename->vla-object (entlast)) (/ pi 2))
		(command "_.copybase" '(0.0 0.0 0.0) (entlast) "")
		(command "_.erase" (entlast) "")
		(command "_.pasteclip" pause)
	)
	(setvar "DIMZIN" oldDIMZIN)
)
skkkk вне форума  
 
Автор темы   Непрочитано 11.06.2013, 13:00
#8
FRC_Volen


 
Регистрация: 10.06.2013
Тюмень
Сообщений: 14


Цитата:
Сообщение от skkkk Посмотреть сообщение
Код:
[Выделить все]
 (defun C:test ( / oldDIMZIN)
(vl-load-com)
	(defun *error*(msg)
		(if oldDIMZIN (setvar "DIMZIN" oldDIMZIN))
	)
	(setq oldDIMZIN (getvar "DIMZIN"))
	(setvar "DIMZIN" 0)
	(while t
		(vla-AddMtext (vla-get-ModelSpace(vla-get-activedocument (vlax-get-acad-object)))
				  (vlax-3d-point '(0.0 0.0 0.0)) 
				  0
				  (rtos (/ (distance (getpoint "\nУкажите первую точку") (getpoint "\nУкажите вторую точку")) 10) 2 2)
		)
		(vla-put-Rotation (vlax-ename->vla-object (entlast)) (/ pi 2))
		(command "_.copybase" '(0.0 0.0 0.0) (entlast) "")
		(command "_.erase" (entlast) "")
		(command "_.pasteclip" pause)
	)
	(setvar "DIMZIN" oldDIMZIN)
)

Уважаемый автор поста,
я пользователь автокада 3 день и программирую второй день на языке LISP,
я пока мало понимаю в этом и если бы ты мог мне разобраться в написанном я с удовольствием вышлю денег на карту сбербанка на пиво\сок (ненужное зачеркнуть)
1,2 и немного 12 строчки я уже понял зачем они и как они работают


Кстати все работает, я в принципе уже сейчас могу выслать презент)
FRC_Volen вне форума  
 
Непрочитано 11.06.2013, 14:36
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Попробуйте это:
Код:
[Выделить все]
 (defun C:DISTOTXT ( / *error* scale p10 p11 cmde dimz scale height)

  ;(vl-load-com)
  
  (defun *error* (msg)
   (if cmde (setvar 'cmdecho cmde))
   (if dimz (setvar 'dimzin dimz))
   (princ)
  )
 
  (setq ; сохраняем системные переменные
	cmde (getvar 'cmdecho)
	dimz (getvar 'dimzin)
  )
;;(intget 7)
;;(setq scale (getreal "\nУкажите масштаб: "))
  (setq scale 0.01 ; задаем масштаб
		height 3.5 ; и высоту текста
  )
  
  (setvar 'dimzin 0) ; это бубен для rtos
  (while ; организуем цыкл ;)
	(and
	  (setvar 'cmdecho cmde)  ; переключатель режима срани в кс, часть 1
	  (setq p10 (getpoint "\nУкажите первую точку <Выход>: ")) ; пока выбраны точки
	  (setq p11 (getpoint p10 "\nУкажите вторую точку <Отмена>: "))
	)

	(entmake ; рисуем текст в начале координат
	  (list
		(cons 0 "TEXT")
		(cons
		  1
		  (vl-string-translate
			"."
			","
			(rtos (* scale (distance p10 p11)) 2 2) ; измеренное расстояние
		  )
		)
		(cons 10 '(0.0 0.0 0.0))
		(cons 11 '(0.0 0.0 0.0))
		(cons 40  height) ; задаем высоту
		(cons 50 (* pi 0.5)) ; и угол
		;(cons 72 0)
		;(cons 73 0)
	  )
	)

	(setvar 'cmdecho 0) ; переключатель режима срани в кс, часть 2

	(command "_.cutclip" (entlast) "") ; копируем текст в буфер обмена
	(prompt "\nУкажите точку вставки текста <0,0>: ") 
	(command "_.pasteclip" pause) ; вставляем текст из буфера

  )

  (*error* nil) ; восстанавливаем системные переменные

)
И не надо никаких презентов
gomer вне форума  
 
Непрочитано 11.06.2013, 20:55
#10
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Не мешало бы еще в некоторых кодах выполнить проверку высоты текста:
Код:
[Выделить все]
.............
(setq kod40 (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))))
      (if (= kod40 0)
     ........
Profan вне форума  
 
Непрочитано 11.06.2013, 21:37
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Profan Посмотреть сообщение
Не мешало бы еще в некоторых кодах выполнить проверку высоты текста:
но и пользы особой не принесло бы, бо entmake глубоко фиолетово: она нарисует текст с заданной высотой, а AddMtext глубоко фиолетово: он нарисует с высотой 2,5.
gomer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как создать команду высчитывающую расстояние между двумя точками и записывала результат в виде текста на чертеже

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Как отразить звуки от распахнутого окна квартиры? trel Архитектура 44 18.06.2015 06:11
Программное создание размерных стилей Кулик Алексей aka kpblc Программирование 89 08.04.2013 12:59
Измерить расстояние между двумя точками в ЛИСТЕ, привязываясь к объектам в МОДЕЛИ Кочетков Андрей AutoCAD 9 12.06.2009 22:52