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

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

Как вычислить расстояние от точки до точки методами ActiveX?

Ответ
Поиск в этой теме
Непрочитано 19.11.2009, 21:06 #1
Как вычислить расстояние от точки до точки методами ActiveX?
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Кроме вот такой фигни ничего не могу найти на эту тему
Код:
[Выделить все]
(vla-SendCommand actdoc "(setq a123 (getdist '(0.0 0.0 -2.55457) \"1\")) 17.9722,0.0,0.0 ")
Неужели нет методов в ActiveX определения дистанций от точки до точки?
Просмотров: 7376
 
Непрочитано 19.11.2009, 21:51
#2
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,294
Отправить сообщение для Александр Ривилис с помощью Skype™


А что нормальные (геометрические) методы определения расстояний уже запрещены?
Александр Ривилис вне форума  
 
Непрочитано 19.11.2009, 22:18
#3
Do$

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


Код:
[Выделить все]
((lambda (pt1 pt2 / line dist)
   (setq line (vla-addline
		(vla-get-modelspace actdoc)
		(vlax-3d-point pt1)
		(vlax-3d-point pt2)
	      ) ;_ end of vla-addline
	 dist (vla-get-length line)
   ) ;_ end of setq
   (vla-delete line)
   dist
 ) ;_ end of lambda
  '(0.0 0.0 -2.55457)
  '(17.9722 0.0 0.0)
)
Do$ вне форума  
 
Непрочитано 19.11.2009, 22:37
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,843


офтоп - как левой ногой правое ухо почесать?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 20.11.2009, 00:40
#5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Supermax Посмотреть сообщение
Кроме вот такой фигни ничего не могу найти на эту тему
Код:
[Выделить все]
(vla-SendCommand actdoc "(setq a123 (getdist '(0.0 0.0 -2.55457) \"1\")) 17.9722,0.0,0.0 ")
Неужели нет методов в ActiveX определения дистанций от точки до точки?
Положу сюда свой скромный грош:

Код:
[Выделить все]
(defun C:demo (/ adoc autil dist pt)
(setq adoc (vla-get-activedocument
  (vlax-get-acad-object))
  autil (vla-get-utility adoc)
      )
(vla-initializeuserinput autil 64 nil);<--  бит 64 для 2-х мерного расстояния Z игнорируется
(setq pt (vla-getpoint autil nil "\n   Первая точка: ")
      )
  
(setq dist (vla-getdistance autil pt "\n   Вторая точка: ")
      )
(alert (strcat "Расстояние = " (rtos dist 2 3)))
(princ)
  )
(vl-load-com)
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 20.11.2009, 09:41
#6
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Олег (jr.), так эта vla-getdistance то же самое что и (getdist [<точка>] [<строка>]) Только еще + пляски с бубном вокруг ActiveX.
У меня есть две точки, записанные в переменные и мне "кликать" некуды!
И единственное решение, что я нашел - это:
Код:
[Выделить все]
(setq point-1 '(0.0 0.1 1.5))
(setq point-2 '(9.5 0.0 0.0))
(setq point-2-string (mapcar '(lambda (a) (strcat (vl-princ-to-string a) ",")) point-2))
(setq point-2-string (vl-string-right-trim "," (apply 'strcat point-2-string)))
(vla-SendCommand actdoc (strcat "(setq dist-1 (getdist point-1 \"1\"))" " " point-2-string " "))
Что за напасть! В ActiveX нет функции замера дистанции по двум точкам!
Полный абзац!
Эй, гуру, может исправите положенице? Надо сделать функцию на ARX.
Supermax вне форума  
 
Непрочитано 20.11.2009, 09:56
#7
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,254


Пример из книги же!

Код:
[Выделить все]
(vla-GetDistance
  (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object)))
  nil
  "\nКликни пару раз"
)
Полещук, Лоскутов "AutoLISP и VisualLISP в среде AutoCAD" (стр. 432):
Makswell вне форума  
 
Автор темы   Непрочитано 20.11.2009, 10:23
#8
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Makswell, ты че, издеваешся? Какое "Кликни"?
Я провожу анализ растояний и в зависимости от того, какое расстояние меньше, принимаю решение. Мне надо замерять расстояния от точки до точки, полученные из координат вставки объектов. Я получаю обычные списки и мне надо вычислить расстояние по двум точкам в виде 3D координат, записанных в переменные.
Вот была бы такая функция (ттттт <точка-1> <точка-2>) щастью небыло бы предела.
Supermax вне форума  
 
Непрочитано 20.11.2009, 10:28
#9
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,254


Supermax, понял, sorry.
Видимо в ActiveX такого нет.
Но ничто не мешает написать функцию, которая тупо геометрически вычисляет расстояние между 2-мя точками по координатам.
И будет тебе (ттттт <точка-1> <точка-2>).
Твоя концепция запрещает ичпользовать тригонометричемкие функции?
Makswell вне форума  
 
Автор темы   Непрочитано 20.11.2009, 10:36
#10
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Для начала надо ARX колупнуть, но я его колупать не умею (пока).
Вычисления в Автокаде возможны только если получать все 15 знаков после запятой, и то, могет и не сработать. А сам Автокад, хоть и показывает слегка обрезанный вариант, но на самом деле учитывает полное значение. И я себе представляю во что может вылиться вычисление через тригонометрию. Вместо одной строчки будет целая страница.
Supermax вне форума  
 
Непрочитано 20.11.2009, 10:51
#11
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,254


Да в общем-то с тригонометрией я погорячился. Вот твоя функция ттттт.
Использованы степень да корень квадратный.

Код:
[Выделить все]
(defun ттттт (pt1 pt2 / x1 y1 z1 x2 y2 z2)
  (setq	x1 (car pt1)
	y1 (cadr pt1)
	z1 (caddr pt1)
	x2 (car pt2)
	y2 (cadr pt2)
	z2 (caddr pt2)
  )
  (sqrt
    (+
      (expt (- x2 x1) 2)
      (expt (- y2 y1) 2)
      (expt (- z2 z1) 2)
    )
  )
)
Makswell вне форума  
 
Автор темы   Непрочитано 20.11.2009, 10:58
#12
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Makswell, замечательно! Надо в библиотеку функций кинуть.


Плииз, оформи функцию!
Я ее себе в прогу вставлю и саму прогу в библиотеку выложу.

Давай назовем ее Dist+
???

Последний раз редактировалось Supermax, 20.11.2009 в 11:03.
Supermax вне форума  
 
Непрочитано 20.11.2009, 10:59
#13
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,440
Отправить сообщение для Елпанов Евгений с помощью Skype™


Совсем не понимаю, в чем проблема, зачем делать попытки обхода лисп функций?
Если все дело в запуске через ком строку - то примерно так:
Код:
[Выделить все]
(setq p1 '(0.0 0.1 1.5))
(setq p2 '(9.5 0.0 0.0))
(vla-sendcommand (vla-get-activedocument (vlax-get-acad-object))"(distance p1 p2)\n")
Хотя, я так и не понял, в чем проблема. Поясните мне...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 20.11.2009, 11:05
#14
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,435
<phrase 1=


>>Вычисления в Автокаде возможны только если получать все 15 знаков после запятой, и то, могет и не сработать
Это как так? если есть точки какое может быть получение 15 знаков?
>>И я себе представляю во что может вылиться вычисление через тригонометрию
через тригонометрию может и выльется, а если по старинке, отделаетесь парой строчек)) если нужно только сравнение расстояний то можно считать квадрат расстояний
zamtmn вне форума  
 
Непрочитано 20.11.2009, 11:09
#15
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,852
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Вместо одной строчки будет целая страница.
http://www.pm298.ru/zadachi.php
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 20.11.2009, 11:13
#16
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Елпанов Евгений, а! Вот и ты на эти грабли наступил.
Функция Distance, цитирую:
Цитата:
... Если точки трехмерные, то функция рассчитывает угол между осью Х и проекцией вектора, идущего из первой точки во вторую, на текущую плоскость построений.
Я на ней тоже прокололся.

VVA, так Makswell функцию для пространства и сделал.
Supermax вне форума  
 
Непрочитано 20.11.2009, 11:17
#17
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,440
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Елпанов Евгений, а! Вот и ты на эти грабли наступил.
Функция Distance, цитирую:

Я на ней тоже прокололся.
Другими словами, ты хочешь сказать, что такой код:
Код:
[Выделить все]
(distance '(0 0 0) '(0 0 10))
должен вернуть ноль?

ps. рекомендую проверить...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 20.11.2009, 11:25
#18
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Не, жаль что тут нельзя рисовать, возьми нарисуй линию и поверни ее на 45 градусов, затем замерь ее длинну через distance, а затем глянь в properties на ее настоящую длинну.
Код:
[Выделить все]
(distance (getpoint) (getpoint))
Supermax вне форума  
 
Непрочитано 20.11.2009, 11:28 Г-н
#19
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,294
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
Не, жаль что тут нельзя рисовать, возьми нарисуй линию и поверни ее на 45 градусов, затем замерь ее длинну через distance, а затем глянь в properties на ее настоящую длинну.
Код:
[Выделить все]
(distance (getpoint) (getpoint))

Код:
[Выделить все]
Command: VIEWDIR
VIEWDIR = -1583.2096,-1391.5182,1075.4841 (read only)
Command: (setq p1 '(0 0 0) p2 '(1 0 0)) (1 0 0)

Command: (distance p1 p2) 1.0
Ну и?
Александр Ривилис вне форума  
 
Непрочитано 20.11.2009, 11:31
#20
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,440
Отправить сообщение для Елпанов Евгений с помощью Skype™


Supermax, причем здесь линия? Функция distance может работать только с двумя аргументами - точками (списками из двух или трех цифр, которые могут быть как целыми, так и реальными). Единственное условие, что для вычисления длинны трехмерного вектора между этими точками, обе точки должны быть тоже трехмерными. Если хотя бы одна точка двухмерна, т.е. не имеет Z, то длинна вычисляется только для двухмерных точек и Z второй точки игнорируется.

ps. По поводу твоей повернутой линии - опубликуй здесь два списка 3д точек, между которыми неверно вычисляется расстояние - игнорируется высота.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как вычислить расстояние от точки до точки методами ActiveX?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Как определить расстояние между 2 точками по spline? Хотабыч Программирование 5 22.01.2006 15:33
Как определить действительные конечные точки mark AutoCAD 1 05.10.2005 00:06
Как измерить в автокаде расстояние от точки до плоскости? Камиль AutoCAD 9 07.06.2005 20:48
Как в макросе запросить ввод объекта и точки. Torino AutoCAD 4 27.08.2003 18:58