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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > как соединить центры окружностей, находящихся на одной(горизонтальной или вертикальной) прямой

как соединить центры окружностей, находящихся на одной(горизонтальной или вертикальной) прямой

Ответ
Поиск в этой теме
Непрочитано 11.01.2011, 00:07 #1
как соединить центры окружностей, находящихся на одной(горизонтальной или вертикальной) прямой
voverrr
 
гастарбайтер понаехал
 
Маскво
Регистрация: 07.12.2009
Сообщений: 272

Задача такая:
Приходится делать однотипные чертежи. Вначале имеется чертёж мебельной панели с обозначениями отверстий, его нужно образмеривать.

Вот эти синие штрихпунктирные линии приходится проставлять вручную.

Задумка в том, чтобы при запуске лиспа он сначала спрашивал "укажите объекты", затем из массива указанных объектов(указывать хочу рамкой, а там могут попасть и отрезки и штриховки и размеры...) он определял бы лкружности и затем выяснял бы - какие окружности совпадают по своим Х-координатам, какие - по своим Y-координатам.
И между теми, у когорых разница координат по Х равна нулю - строил отрезки, то же самое и между теми, у которых разница координат по Y равна нулю - также соединял бы центры этих окружностей.

примерно чертёж выглядит так:

[IMG]http://s005.***********/i211/1101/e9/375b8cfa8b48t.jpg[/IMG]
Просмотров: 3420
 
Непрочитано 11.01.2011, 08:12
#2
Do$

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


И в чем сложность?
Do$ вне форума  
 
Непрочитано 11.01.2011, 08:26
#3
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Вы создаете программу и у Вас что-то не получается, или Вам нужна готовая программа?
E-degtyarev вне форума  
 
Автор темы   Непрочитано 11.01.2011, 09:49
#4
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


E-degtyarev
вообще-то в лиспе я только начинаю разбираться, поэтому, скорее всего, нужна готовая, но надеюсь, смогу доработать её как будет нужно.

для начала я пытаюсь расписать пошаговую блок-схему. Отверстий в чертеже может быть 4, а может и 50, нужно, чтобы он сравнивал координаты сначала первого отверстия с координатами остальных 49-ю. потом координаты второго отверстия с коорд остальных...

допустим первое и второе отверстия на одной оси. В этом случае он при первом шаге сравнения(1-2,3,4,5...) построит между их центрами линию, и при втором(2-1,3,4,5) шаге сравнения - тоже построит, поверх уже существующей.Это не критично, но и нежелательно.

не пойму как это организовать - цикл от 1 до 50 что ли? Или, если точнее до N. Где N - количество отверстий.
Получается, он должен будет прогнать этот цикл 50 раз для 49 отверстий? 2450 шагов получается. Не слишком это долго будет?
voverrr вне форума  
 
Непрочитано 11.01.2011, 10:16
#5
Do$

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


Цитата:
Сообщение от voverrr Посмотреть сообщение
нужна готовая
Тогда ищите исполнителя.
Если решите сами написать - тогда:
Цитата:
Сообщение от voverrr Посмотреть сообщение
не пойму как это организовать - цикл от 1 до 50 что ли?
Мне кажется, что все можно сделать гораздо проще - создать список из окружностей и выбирать объекты из него по расположению центров окружностей на одной оси с помощью функций vl-remove-if, vl-remove-if-not и т.п.
Do$ вне форума  
 
Непрочитано 11.01.2011, 12:57
#6
Дима_

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


Эх, разомнусь после НГ:
Код:
[Выделить все]
(vl-load-com)
(defun c:test ()
  ((lambda (f-rec lst)
     (vla-startundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument))
     (f-rec car cadr lst)
     (f-rec cadr car lst)
     (vla-endundomark (vlax-get-property (vlax-get-acad-object) 'ActiveDocument)))
   (lambda (cmd cmd-s lst)
     (if lst
         ((lambda (lst-p)
            (if (cdr lst-p)
                (progn (entmakex (list (cons 0 "line")
                                       (cons 10 (car lst-p))
                                       (cons 11 (last lst-p))))
                       (f-rec cmd cmd-s
                              (vl-remove-if '(lambda (x) (equal (cmd (car lst)) (cmd x) 0.0001))
                                            (cdr lst))))
                (f-rec cmd cmd-s (cdr lst))))
          (vl-sort 
           (vl-remove-if-not '(lambda (x) (equal (cmd (car lst)) (cmd x) 0.0001)) lst)
           '(lambda (a b) (> (cmd-s a) (cmd-s b)))))))
   (mapcar '(lambda (ent) (cdr (assoc 10 (entget ent))))
           (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "circle")))))))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 11.01.2011, 14:48
#7
voverrr

гастарбайтер понаехал
 
Регистрация: 07.12.2009
Маскво
Сообщений: 272


Дима_
ух ты!
вот как раз то что было нужно!
пока я тут читаю уроки по лиспу и прикидываю алгоритмы - люди пишут шедевры одним пальцем...

Спасибо! Дай бог тебе здоровья и невесту хорошую!
Куда привезти коньяк?
voverrr вне форума  
 
Непрочитано 11.01.2011, 15:07
#8
Дима_

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


Цитата:
Сообщение от voverrr Посмотреть сообщение
Дима_
Спасибо! Дай бог тебе здоровья и невесту хорошую!
Куда привезти коньяк?
С невестой вопрос зыкрыт - а про коньяк - весной буду в Москве - шанс еще будет.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > как соединить центры окружностей, находящихся на одной(горизонтальной или вертикальной) прямой