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

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

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

Ответ
Поиск в этой теме
Непрочитано 24.11.2004, 11:28 #1
Программа рисующая из отрезки до выбраного отрезка.
Mikhail
 
инженер-технолог (ГИП)
 
Санкт-Петербург
Регистрация: 11.09.2003
Сообщений: 1,144

Добрый день.
Вот что то стал часто делать такую операцию- чертить отрезки от разнх точек к оному и тому же отрезку, конечная привязка к отрезку- перпендикуляр.
Т.е. если у кого то есть или может не трудно, что то типа.
- быбрал отрезок
- и указываю точки, из них строятся отрезки к выбранному отрезку с привязкой перпендикуляр.
Спасибо)
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Просмотров: 5805
 
Непрочитано 24.11.2004, 12:37
#2
AY


 
Сообщений: n/a


На первое время могу предложить такой код
Код:
[Выделить все]
(defun c:perpline (/ ss ln1 ln1-10 ln1-11 an2 t3 t4)
    (princ "\nУкажите линию: ")
    (if (setq ss (ssget ":S" '((0 . "line"))))
        (progn
            (setq
                ln1    (entget (ssname ss 0)) ; ñïèñîê ïðèìèòèâà
                ln1-10 (cdr (assoc 10 ln1)) ;ïåðâàÿ òî÷êà 
                ln1-11 (cdr (assoc 11 ln1)) ;âòîðàÿ òî÷êà
                an2    (+ (angle ln1-10 ln1-11) (/ pi 2))
            ) ;_ setq

            (while (setq t3 (getpoint "\nУкажите точку:"));òðåòüÿ òî÷êà
                (if (setq t4 (inters ln1-10 ;÷åòâåðòàÿ òî÷êà
                                     ln1-11
                                     t3
                                     (polar t3 an2 1.0)
                                     nil
                             ) ;_ inters
                    ) ;_ setq
                    (command "_.line" t3 t4 "")
                ) ;_ if
            ) ;_ while
        ) ;_ progn
    ) ;_ if
    (princ)
) ;_ defun
 
 
Непрочитано 24.11.2004, 12:40
#3
AY


 
Сообщений: n/a


Дубль два:
Код:
[Выделить все]
(defun c:perpline (/ ss ln1 ln1-10 ln1-11 an2 t3 t4)
  (princ "\nSelect line: ")
  (if (setq ss (ssget ":S" '((0 . "line"))))
    (progn
      (setq
        ln1    (entget (ssname ss 0)) 
        ln1-10 (cdr (assoc 10 ln1)) 
        ln1-11 (cdr (assoc 11 ln1)) 
        an2    (+ (angle ln1-10 ln1-11) (/ pi 2))
      ) ;_ setq

      (while (setq t3 (getpoint "\nSpecify point:"))
        (if (setq t4 (inters ln1-10 
                             ln1-11
                             t3
                             (polar t3 an2 1.0)
                             nil
                     ) ;_ inters
            ) ;_ setq
          (command "_.line" t3 t4 "")
        ) ;_ if
      ) ;_ while
    ) ;_ progn
  ) ;_ if
  (princ)
) ;_ defun
 
 
Автор темы   Непрочитано 24.11.2004, 12:49
#4
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


СПАСИБО)
Извините за лень) Никак ЛИСП не собратся и не выучить.
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 24.11.2004, 13:15
1 | #5
Эдуард

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


Или так:
Код:
[Выделить все]
(vl-load-com)
(defun C:per-line	(/ baze-line start_point list_start_point)
  (if
    (and
      (setq baze-line (car (entsel "\nSelect line:")))
      (equal (cdr (assoc 0 (entget baze-line))) "LINE")
    ) ;_ end of and
     (progn
       (setq baze-line (vlax-ename->vla-object baze-line))
       (while (setq start_point (getpoint "\nPick Point:"))
	 (setq list_start_point (cons start_point list_start_point))
       ) ;_ end of while
       (if list_start_point
	 (mapcar
	   (function
	     (lambda (x)
	       (vla-addline
		 (vla-ObjectIDToObject
		   (vla-get-activedocument (vlax-get-acad-object))
		   (vla-get-ownerid baze-line)
		 ) ;_ end of vla-ObjectIDToObject
		 (vlax-3d-point x)
		 (vlax-3d-point
		   (vlax-curve-getClosestPointTo baze-line x :vlax-true)
		 ) ;_ end of vlax-3d-point
	       ) ;_ end of vla-addline
	     ) ;_ end of lambda
	   ) ;_ end of function
	   list_start_point
	 ) ;_ end of mapcar
       ) ;_ end of if
     ) ;_ end of progn
  ) ;_ end of if
  (princ)
) ;_ end of defun
Эдуард вне форума  
 
Автор темы   Непрочитано 24.11.2004, 13:23
#6
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


А в чем разница если не секрет? Там на Лиспе а это VBA? А по функциональности?
Спасибо.
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 24.11.2004, 14:01
#7
AY


 
Сообщений: n/a


Что бы не стыдно было исправлю недостатки:
Код:
[Выделить все]
(defun c:perpline (/ ss ln1 ln1-10 ln1-11 an2 t3 t4)
  (princ "\nSelect line: ")
  (if (setq ss (ssget ":S" '((0 . "line"))))
    (progn
      (setq
        ln1    (entget (ssname ss 0))
        ln1-10 (cdr (assoc 10 ln1))
        ln1-11 (cdr (assoc 11 ln1))
        an2    (+ (angle ln1-10 ln1-11) (/ pi 2))
      ) ;_ setq
      (while (setq t3 (getpoint "\nSpecify point:"))
        (if (setq t3 (trans t3 1 0)
                  t4 (inters ln1-10
                             ln1-11
                             t3
                             (polar t3 an2 1.0)
                             nil
                     ) ;_ inters
            ) ;_ setq
           (entmake (list '(0 . "line")
                         (cons 10 t3)
                         (cons 11 t4)
                   ) ;_ list
          ) ;_ entmake
        ) ;_ if
      ) ;_ while
    ) ;_ progn
  ) ;_ if
  (princ)
) ;_ defun
 
 
Автор темы   Непрочитано 24.11.2004, 15:06
#8
Mikhail

инженер-технолог (ГИП)
 
Регистрация: 11.09.2003
Санкт-Петербург
Сообщений: 1,144


вариант AY нравится больше так как там линии рисуются динамически, т.е. непосредственно после указания точки.
А вот еще такой общий вопрос. Можно ли сделать выбор линии как допустим в команде TRIM? Там можно выбирать даже примитивы из блока.
__________________
Большая беда науки в том, что при восхитительной теории можно получить отвратительные результаты.
Mikhail вне форума  
 
Непрочитано 12.07.2015, 16:27
#9
Ahntv


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


Уважаемые LISP-инженеры и dwg.ru-форумчане.
Тема старая, но очень актуальная.
Как исправить lisp чтобы можно выбирать не только отрезок, но и блок или прямоугольник, чтобы отрезки рисовались к нему.
Заранее вам благодарен.
Ahntv вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программа рисующая из отрезки до выбраного отрезка.