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

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

Проектирование видеонаблюдения

Ответ
Поиск в этой теме
Непрочитано 30.07.2007, 13:38
Проектирование видеонаблюдения
Ax3
 
Programming, automation, CADs, GISs. СибМИР
 
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 315

Всем привет.
Не могу поверить: столько заданий - и все в автокаде. Счастье просто, дорвался, а то полгода не касался его почти. Пришел главный инженер - и...
Вот моя проблема:
Есть трехмерный план территории (несколько зданий).
Надо развесить видеокамеры и прикинуть обзор. Я решил видеокамеры (точнее, их обзор) обозначить в виде фигуры, приведенной на рисунке
[/img]
[ATTACH]1185787601.JPG[/ATTACH]
Надо как-то найти точки пересечения линий камеры с планом.
Не знаю, с чего начать. Есть ли функции, позволяющие найти точки пересечения линии с ближайшим к ней объектом? Или ну его на фиг, да вручную extend, trim? Но что-то очень уж не хочется каждый раз, меняя угол наклона, подрезать или подрастягивать линии для двадцати камер.
Подскажите, пожалуйста, с чего начать.
Просмотров: 9361
 
Непрочитано 30.08.2007, 16:30
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Советы / критику примешь?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 30.08.2007, 16:32
#22
Ax3

Programming, automation, CADs, GISs. СибМИР
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 315


Конечно. Буду только рад
__________________
На LISPе можно мыслить!
Ax3 вне форума  
 
Непрочитано 30.08.2007, 17:20
#23
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Ну тогда держись
О ldata: я использую код такого вида:
Код:
[Выделить все]
(defun _kpblc-ent-ldata-add (ent data-list append-data / exist_data res)
			    ;|
*    Функция внесения дополнительных данных в примитив либо словарь.
*    Параметры вызова:
*	ent		примитив, в который вносятся данные. Если примитив -
*			пространство модели, то создается глобальный словарь
*			с именем *kpblc-regname* и данные вносятся в него
*	data-list	вносимые данные
*	append-data	t - заменять полностью
*			nil -> только указанные пары (заменить либо добавить)
*    Возвращаемое значение:
*	полный список доп.данных или nil, если невозможно записать.
*    Примеры вызова:
(_kpblc-ent-ldata-add (vlax-ename->vla-object (car (entsel))) '(("block" . "data1")) t)
|;
  (if (or (eq ent *kpblc-model*)
	  (and (= (type ent) 'str)
	       (= (strcase ent) (strcase *kpblc-regname*))
	       ) ;_ end of and
	  ) ;_ end of or
    (setq ent *kpblc-regname*)
    (setq ent (_kpblc-conv-ent-to-vla ent))
    ) ;_ end of if

  (if (and (not append-data)
	   (setq exist_data (_kpblc-ent-ldata-get ent))
	   ) ;_ end of and
    (setq data-list (append data-list exist_data))
    ) ;_ end of if
  (vl-catch-all-apply '(lambda () (vlax-ldata-delete ent *kpblc-appname*)))
  (foreach item	(_kpblc-list-dublicates-remove data-list)
    (if	(not (member (car item) (mapcar 'car res)))
      (setq res (append res (list item)))
      ) ;_ end of if
    ) ;_ end of foreach
  (vlax-ldata-put ent *kpblc-appname* res)
  ) ;_ end of defun

(defun _kpblc-ent-ldata-get (ent)
                            ;|
*    Функция возвращает дополнительные данные, записанные в примитив (либо nil,
* если их нет)
*    Параметры вызова:
*	ent	указатель на примитив
*    Примеры вызова:
(_kpblc-ent-ldata-get (vlax-ename->vla-object (car (entsel))))
|;
  (if (or (eq ent *kpblc-model*)
          (and (= (type ent) 'str)
               (= (strcase ent) (strcase *kpblc-regname*))
               ) ;_ end of and
          ) ;_ end of or
    (setq ent *kpblc-regname*)
    (setq ent (_kpblc-conv-ent-to-vla ent))
    ) ;_ end of if
  (if (vlax-ldata-get ent *kpblc-appname*)
    (_kpblc-conv-list-to-lowcase
      (_kpblc-conv-list-to-pointlist
        (vlax-ldata-get ent *kpblc-appname*)
        ) ;_ end of _kpblc-conv-list-to-pointlist
      ) ;_ end of _kpblc-conv-list-to-lowcase
    ) ;_ end of if
  ) ;_ end of defun
Служебные функции не показываю.
При таком подходе ты можешь получить сразу весь список ldata, "повешенных" на примитив. Работать с таким проще, да и быстрее.
Как ускорить работу: во-первых, по максимуму уходи от использования командных методов. Например, можно заменить
Код:
[Выделить все]
(vl-cmdf "_3dpoly" (list x y z) (list x1 y1 z1) (list x1 y1 (- z1)) (list x y (- z)) "_close")
	(vl-cmdf "_region" "_last" "")
	(vl-cmdf "_extrude" "_last" "" (- s_) 0)
на нечто типа:
Код:
[Выделить все]
(vl-load-com)
(or *mydoc* (setq *mydoc* (vla-get-activedocument (vlax-get-acad-object))))
(or *mymodel* (setq *mymodel* (vla-get-modelspace *mydoc*)))

(defun _3dpoly-and-extrude (pt-list depth ang / 3dpoly reg res lst)
                           ;|
*    Создание и выдавливание региона по точкам
*    Параметры вызова:
	pt-list		список 3Д-точек
	depth		глубина выдавливания. nil недопустим
	ang		угол выдавливания. nil -> 0.
|;
  (setq lst    (apply 'append pt-list)
        3dpoly (vla-add3dpoly
                 *mymodel*
                 (vlax-make-variant
                   (vlax-safearray-fill
                     (vlax-make-safearray
                       vlax-vbdouble
                       (cons 0 (1- (length lst)))
                       ) ;_ end of vlax-make-safearray
                     lst
                     ) ;_ end of vlax-safearray-fill
                   ) ;_ end of vlax-make-variant
                 ) ;_ end of vla-Add3DPoly
        ) ;_ end of setq
  (vla-put-closed 3dpoly :vlax-true)
  (setq res
         (vla-addextrudedsolid
           *mymodel*
           (setq reg (car (vlax-safearray->list
                            (vlax-variant-value
                              (vla-addregion
                                *mymodel*
                                (vlax-make-variant
                                  (vlax-safearray-fill
                                    (vlax-make-safearray
                                      vlax-vbobject
                                      '(0 . 0)
                                      ) ;_ end of vlax-make-safearray
                                    (list 3dpoly)
                                    ) ;_ end of vlax-safearray-fill
                                  ) ;_ end of vlax-make-variant
                                ) ;_ end of vla-addregion
                              ) ;_ end of vlax-variant-value
                            ) ;_ end of vlax-safearray->list
                          ) ;_ end of car
                 ) ;_ end of setq
           depth
           (cond (ang)
                 (t 0.)
                 ) ;_ end of cond
           ) ;_ end of vla-AddExtrudedSolid
        ) ;_ end of setq
  (mapcar 'vla-erase (list 3dpoly reg))
  res
  ) ;_ end of defun
Пример вызова:
Код:
[Выделить все]
(_3dpoly-and-extrude '((0. 0. 0.)(10. 5. 0.)(10. 20. 0.) (0. 20. 0.)) 150. 0.)
Примерно в таком ключе...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 31.08.2007, 05:44
#24
Andi55

инженер-электрик
 
Регистрация: 12.08.2005
Иркутск
Сообщений: 523
<phrase 1=


Есть еще программка за 1круб
Проектировщик CCTV - V3.2.7
http://www.lonacomputerservices.com/CCTV/CCTVrus.html
Вряд ли участники этой ветки ею воспользуются, но кому-то еще будет интересно.
Andi55 вне форума  
 
Автор темы   Непрочитано 31.08.2007, 08:12
#25
Ax3

Programming, automation, CADs, GISs. СибМИР
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 315


>kpblc
Спасибо, учту
>Andi55
Прикольная программка, мне нравятся расчеты в ней. :-)
__________________
На LISPе можно мыслить!
Ax3 вне форума  
 
Автор темы   Непрочитано 22.03.2008, 15:26
#26
Ax3

Programming, automation, CADs, GISs. СибМИР
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 315


Версия 1.5
Краткое описание внутри.
За глюки и проблемы автор ответственности не несет, но всеми силами старается их исправить :-)
Поэтому сообщайте, пожалуйста, обо всех проблемах, возникших при использовании программы.
Протестирована в AutoCAD 2004, 2006, 2007
Благодарности по-прежнему те же, что и выше.
Вложения
Тип файла: rar AS_`VideoServeillance`_v1.5(c)Danilov_AS_2008.03.22.rar (254.7 Кб, 137 просмотров)
__________________
На LISPе можно мыслить!
Ax3 вне форума  
 
Автор темы   Непрочитано 24.03.2008, 11:27
#27
Ax3

Programming, automation, CADs, GISs. СибМИР
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 315


Обнаружил, что при выделении видового порта в Layout'e программа вызывает фатальную ошибку. Будьте осторожны.

В самом начале при открытии чертежа если согласиться на "Выполнить 3dconfig", все настройки 3д будут сделаны под аппаратное ускорение и тэпэ, то есть под мощную видеокарту.
__________________
На LISPе можно мыслить!
Ax3 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Проектирование видеонаблюдения

Опции темы Поиск в этой теме
Поиск в этой теме:

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