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

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

Программа автоматически рисующая из конечных точек выбранных отрезков отрезки до выбраного отрезка с привязкой перпендикуляр.

Ответ
Поиск в этой теме
Непрочитано 16.11.2010, 11:57 #1
Программа автоматически рисующая из конечных точек выбранных отрезков отрезки до выбраного отрезка с привязкой перпендикуляр.
С.А.Б
 
Регистрация: 16.11.2010
Сообщений: 6

Может у кого есть :
- выбрал отрезок к которому
- Выбрал отрезки от которых
- и из конечных точек вторых автоматом строятся отрезки к выбранному отрезку с привязкой перпендикуляр.
Зарание!!!
Просмотров: 3244
 
Непрочитано 16.11.2010, 12:02
#2
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Прежде всего: задача в плоской постановке или нет?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 16.11.2010, 12:27
#3
С.А.Б


 
Регистрация: 16.11.2010
Сообщений: 6


Да в плоской постановке в модели листа
С.А.Б вне форума  
 
Непрочитано 16.11.2010, 13:19
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


С.А.Б, попробуй так
Код:
[Выделить все]
(defun Per_By_Line()
  (vl-load-com)
  ((lambda(obj nbr)
    (if (and obj (= (cdr (assoc 0 (entget obj))) "LINE") nbr)
      (foreach item (vl-remove-if 'listp (mapcar 'cadr (ssnamex nbr)))
        (entmake (list
                   '(0 . "LINE")
                   '(100 . "AcDbEntity")
                   '(67 . 0)
                   '(410 . "Model")
                   '(8 . "0")
                   '(100 . "AcDbLine")
                   (cons 10 (cdr (assoc 10 (entget item))))
                   (cons 11 (vlax-curve-getClosestPointTo obj (cdr (assoc 10 (entget item)))))
                   )
                 )
        (entmake (list
                   '(0 . "LINE")
                   '(100 . "AcDbEntity")
                   '(67 . 0)
                   '(410 . "Model")
                   '(8 . "0")
                   '(100 . "AcDbLine")
                   (cons 10 (cdr (assoc 11 (entget item))))
                   (cons 11 (vlax-curve-getClosestPointTo obj (cdr (assoc 11 (entget item)))))
                   )
                 )
        )
      )
    )
    (car (entsel "\n Укажите базовый отрезок: "))
    (ssget (list (cons 0 "LINE")))
    )
  )
Правда если из конечной точки текущего отрезка перпендикуляр к базовому отрезку несуществует, то построится отрезок к началу или концу базового отрезка
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 16.11.2010, 13:28
#5
С.А.Б


 
Регистрация: 16.11.2010
Сообщений: 6


Спасибо сейчас попробую
а какую команду нужно внести в командной строке

Последний раз редактировалось С.А.Б, 16.11.2010 в 13:35.
С.А.Б вне форума  
 
Непрочитано 16.11.2010, 13:33
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


С.А.Б, сначала пробуй, потом, если че вопросы и иправления, и уж потом спасибо
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 16.11.2010, 13:35
#7
С.А.Б


 
Регистрация: 16.11.2010
Сообщений: 6


а какую команду нужно внести в командной строке
а то у нас Brics стоит
С.А.Б вне форума  
 
Непрочитано 16.11.2010, 13:53
#8
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Не уверен, что будет работать в бриксе:
Код:
[Выделить все]
(defun c:test (/ ent vla_ent selset tmp pt)
  (setq ent    (car (entsel "\nSelect line: "))
        selset (ssget '((0 . "LINE")))
        tmp    (vla-copy (setq vla_ent (vlax-ename->vla-object ent)))
        ent    (entget ent)
        ) ;_ end of setq
  (foreach subent ((lambda (/ tab item)
                     (repeat (setq tab  nil
                                   item (sslength selset)
                                   ) ;_ end setq
                       (setq tab (cons (ssname selset (setq item (1- item))) tab))
                       ) ;_ end of repeat
                     ) ;_ end of lambda
                   )
    (mapcar
      (function
        (lambda (x)
          (setq pt (polar (cdr (assoc x (entget subent)))
                          (+ (angle (cdr (assoc 10 ent)) (cdr (assoc 11 ent))) (/ pi 2.))
                          1.
                          ) ;_ end of polar
                ) ;_ end of setq
          (vla-put-startpoint tmp (vlax-3d-point (cdr (assoc x (entget subent)))))
          (vla-put-endpoint tmp (vlax-3d-point pt))
          (vla-update tmp)
          (setq pt (vlax-safearray->list (vlax-variant-value (vla-intersectwith tmp vla_ent acextendboth))))
          (entmakex (list '(0 . "LINE")
                          (cons 10 (cdr (assoc x (entget subent))))
                          (cons 11 pt)
                          (cons 62 1)
                          ) ;_ end of list
                    ) ;_ end of entmakex
          ) ;_ end of lambda
        ) ;_ end of function
      '(10 11)
      ) ;_ end of mapcar
    ) ;_ end of foreach
  (vla-erase tmp)
  ) ;_ end of defun
Команда: test
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 16.11.2010, 13:57
#9
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от С.А.Б Посмотреть сообщение
а то у нас Brics стоит
!!!С этого и надо начинать!!! Я работаю с AutoCAD, так что если в Brics лиспы работают также, то:
1) Сохраните текст кода из поста #4 в файл *.lsp (* - любое имя, пусть 111.lsp)
2) Загрузите этот (111.lsp) файл:
2.1) Меню Сервис->Приложения... далее интуитивно
2.2) В ком. строке ввести _appload нажать Enter... далее интуитивно
3) В ком. строке ввести (Per_By_Line) именно в скобках. Или в исходном коде замени такую строку (defun Per_By_Line() на (defun c:Per_By_Line(), тогда в ком. строке ввести Per_By_Line уже без скобок


P.S. С.А.Б. По тому что пришло в личку понял что Ты разобрася, так что удачи
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 16.11.2010, 14:01
#10
С.А.Б


 
Регистрация: 16.11.2010
Сообщений: 6


Спасибо завтра проверю отвечу
у нас раб.день закончился
С.А.Б вне форума  
 
Непрочитано 16.11.2010, 15:02
#11
Дима_

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


Цитата:
Сообщение от С.А.Б Посмотреть сообщение
а какую команду нужно внести в командной строке
а то у нас Brics стоит
Хорошо хоть не Paintbrush.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 16.11.2010, 15:17
#12
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Специально поставил 10-й брикс. Рапортую: мой код сработал корректно. Код TararykovDG тоже, но с учетом его предупреждений.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 17.11.2010, 05:51
#13
С.А.Б


 
Регистрация: 16.11.2010
Сообщений: 6


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа рисующая из отрезки до выбраного отрезка. Mikhail Программирование 8 12.07.2015 16:27
Фундамент с динамическими нагрузками в Scad Tlelaxu SCAD 9 31.08.2007 10:44