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

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

Подскажите пожалуйста как програмно узнать длину дуги или полилинии?

Ответ
Поиск в этой теме
Непрочитано 03.06.2014, 18:14 #1
Подскажите пожалуйста как програмно узнать длину дуги или полилинии?
iiscienceii
 
Регистрация: 30.05.2014
Сообщений: 20

Подскажите пожалуйста гуру програмирования. Как програмно узнать длину дуги и полилинии????
Есть ли какой нибуть аналог vla-get-length для дуги и полилинии???

Извеняюсь сам решил эту задачу.
Возник следующий вопрос подскажите как проверить отрезок на ортогональность (тоесть на паралельность оси Х или Y)

Последний раз редактировалось iiscienceii, 03.06.2014 в 18:34.
Просмотров: 3876
 
Непрочитано 03.06.2014, 18:31
#2
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


для дуги vla-get-ArcLength
для полилинии vla-get-Length
kakt00z вне форума  
 
Непрочитано 03.06.2014, 19:19
#3
VVA

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


Цитата:
Сообщение от iiscienceii Посмотреть сообщение
как проверить отрезок на ортогональность (тоесть на паралельность оси Х или Y)
Код:
[Выделить все]
;;; PARALLELP
;;; Evaluates if p1 p2 segment is parallel to p3 p4 segment
;;;
;;; Arguments = 4 points
(defun parallelp (p1 p2 p3 p4)
  (and
    (not (inters p1 p2 p3 p4 nil))
    (or    (inters p1 p4 p3 p2 nil)
    (inters p1 p3 p4 p2 nil)
    )
  )
)

;;; PERPENDICULARP
;;; Evaluates if p1 p2 segment is perpendicular to p3 p4
;;;
;;; Arguments = 4 points
(defun perpendicularp (p1 p2 p3 p4)
  (equal (vxv (vec1 p1 p2) (vec1 p3 p4)) 0 1e-8)
)
;;; VUNIT
;;; Returns the single unit vector of a vector
;;;
;;; Argument = a vector
(defun vunit (v)
  ((lambda (l)
     (if (/= 0 l)
       (mapcar (function (lambda (x) (/ x l))) v)
     )
   )
    (distance '(0 0 0) v)
  )
)

;;; VEC1
;;; Returns the single unit vector from p1 to p2
;;;
;;; Arguments = two points
(defun vec1 (p1 p2)
  (vunit (mapcar '- p2 p1))
)

;;; VXV
;;; Returns the scalar product (dot product) of two vectors
;;;
;;; Arguments = 2 vectors
(defun vxv (v1 v2)
  (apply '+ (mapcar '* v1 v2))
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.06.2014, 20:22
#4
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


(setq ang (vla-get-angle (setq obj (vlax-ename->vla-object (car (entsel))))))
(member ang (list (* 0 Pi) (* 0.5 Pi) (* 1 Pi) (* 1.5 Pi)))
kakt00z вне форума  
 
Непрочитано 04.06.2014, 09:22
#5
Do$

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


kakt00z, с вещественными числами имеешь дело! Никаких прямых сравнений, только с учетом допуска! Например 1e-8, как у Владимира в коде в предыдущем сообщении. Так что не member, а vl-member-if + условие сравнения с допуском.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 04.06.2014, 10:45
#6
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Цитата:
Сообщение от Do$ Посмотреть сообщение
kakt00z, с вещественными числами имеешь дело! Никаких прямых сравнений, только с учетом допуска! Например 1e-8, как у Владимира в коде в предыдущем сообщении. Так что не member, а vl-member-if + условие сравнения с допуском.
что ж тогда за ортогональность с допусками??
в пустом чертеже в 14 акаде при рисовании с полярным отслеживанием - работает как надо
хотя понимаю что имеется ввиду (сталкивался уже в дин. блоках)
PS указывал путь а не решение
kakt00z вне форума  
 
Непрочитано 05.06.2014, 16:47
#7
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


Привет. По моему так будет надежнее.
Код:
[Выделить все]
 
(apply 'mapcar
       (cons '=
	     (mapcar 'cdr
		     (vl-remove-if-not
		       '(lambda (x) (or (= (car x) 10) (= (car x) 11)))
		       (entget (car (entsel)))
		     )
	     )
       )
)
Эдуард вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Подскажите пожалуйста как програмно узнать длину дуги или полилинии?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в autolispe програмно узнать имя текущего слоя. iiscienceii LISP 16 05.06.2014 12:04
VBA узнать центр дуги в полилинии AnteC Программирование 3 02.02.2013 01:27
Подскажите пожалуйста, в каких нормах можно узнать, на каком расстоянии от железнодорожных путей можно делать въезд на территорию здания? Alis16 Прочее. Архитектура и строительство 1 18.05.2012 09:19
LISP. Подскажите пожалуйста, как узнать ширину текста? LastGraff LISP 4 01.02.2012 06:38
Подскажите пожалуйста толщину линии и как вставить текст. basik AutoCAD 4 21.04.2011 12:26