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

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

Построение полилинии между точками блоков, по атрибуту NAME блока.

Ответ
Поиск в этой теме
Непрочитано 24.03.2012, 09:29 #1
Построение полилинии между точками блоков, по атрибуту NAME блока.
Bora495
 
Регистрация: 23.03.2012
Сообщений: 7

Добрый день дорогие товарищи.
Много искал информацию по моему вопросу, но так и не нашел.
Надеюсь на Вашу помощь.

Итак, задача.

Дано:
У меня есть множество точек на чертеже.
Точки состоят из блоков.
Все блоки живут в одном слое.
Точки имеют координаты X Y Z.
У блока есть атрибут NAME, являющийся для меня информацией согласно которой я принимаю решение, как мне строить полилинию.

Вопрос:
Я хотел бы используя командную строку и некую команду соединять имеющиеся точки вводя их имя.
Например, имеются точки-блоки с именем 1, 2, 3, 4.
я ввожу команду в строку она спрашивает имя точки, я ввожу 1, энтер, 2, энтер, 3 энтер, 4, энтер.
Получаю полилинию 1-2-3-4.

Надеюсь на Вашу помощь.

Спасибо.
Просмотров: 4388
 
Непрочитано 28.03.2012, 15:02
#2
E-degtyarev

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


Цитата:
Сообщение от Bora495 Посмотреть сообщение
Точки состоят из блоков
По-моему точки - это точки, а блоки - это блоки. Может быть блоки состоят из точек??? Не представляю, как точки могут состоять из блоков.
E-degtyarev вне форума  
 
Непрочитано 28.03.2012, 16:54
#3
atol


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


Вот-вот. И не факт что точка вставки блока и точка в блоке совпадают
Стандартными средствами - никак, а писать программу и не в 1-2 строки - кому это надо так заморачиваться в ответ на форуме?
Разве что в разделе "DWG.RU> Программное обеспечение> Программирование"
__________________
Толстов Евгений
atol вне форума  
 
Непрочитано 02.04.2012, 23:52
#4
mikmik


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


У меня похожая проблема...

Имеется блок содержащий объект "точка", являющийся также базой блока (insertion point)и несколько атрибутов со значениями. Один из атрибутов, у которого tag "name" и содержимое - порядковый номер блока. Нужно провести полилинию между insertion points нескольких блоков, основываясь на содержимом тага "name".

Зачем это нужно: План съёмки местности. Поле "name" - номер замера.

В отличие от предыдущего оратора, хотелось бы провести полилинию автоматом. Из командной строки. Командные строки буду формировать в экселе, а затем Copy/Paste в автокад.
mikmik вне форума  
 
Автор темы   Непрочитано 03.04.2012, 06:43
#5
Bora495


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


извиняюсь, в разъездах все время, по делам.

да, это план местности.
mikmik я, что то находил, похожее на построение полилинии по координатам взятым из файла, но меня это не совсем устроило. хотелось бы соединять все же номера точек.

видать, придется, как будет время свободное сесть экспериментировать с липсом.
Bora495 вне форума  
 
Непрочитано 03.04.2012, 10:29
#6
bargool


 
Регистрация: 16.08.2006
Санкт-Петербург
Сообщений: 508
<phrase 1=


Цитата:
Сообщение от mikmik Посмотреть сообщение
Из командной строки. Командные строки буду формировать в экселе, а затем Copy/Paste в автокад
а почему в таком случае не читать последовательности сразу из файла? И как будут выглядеть эти последовательности?
Bora495, если надеешься на помощь - хоть пример блока покажи, кусок файла в конце концов

Последний раз редактировалось bargool, 03.04.2012 в 10:34.
bargool вне форума  
 
Непрочитано 03.04.2012, 10:29
#7
VVA

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


Цитата:
Сообщение от Bora495 Посмотреть сообщение
да, это план местности.
Когда-то писал для своих геодезистов.
Код:
[Выделить все]
(defun C:ABRIS (/ bname attname _get-all-atts ss lst U_M pt1 pt2 str *error*)
;;;-------------------------------------------------------------------------------
;;;  
;;; Program Name: ABRIS
;;; Created By:   Vladimir Azarko (VVA)
;;; Url: http://forum.dwg.ru/showthread.php?t=81253
;;; Назначение: Рисование трассы по точкам, где номерами точек может выступать значение атрибута блока
;;; Settings: смотри значения bname и attname ниже
;;;  
;;; ==============================================================================;;
;;;                                                                               ;;
;;;  THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY             ;;
;;;  MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR                 ;;
;;;  PARTS OF IT ABSOLUTELY FREE.                                                 ;;
;;;                                                                               ;;
;;;  THIS PROGRAM PROVIDES 'AS IS' WITH ALL FAULTS AND SPECIFICALLY               ;;
;;;  DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS                 ;;
;;;  FOR A PARTICULAR USE.                                                        ;;
;;;                                                                               ;;
;;; ==============================================================================;;
;;;  
;;;-------------------------------------------------------------------------------  
  (vl-load-com)
  (setq bname "*") ;_Здесь можно вписать имя блока
  (setq attname "NAME") ;_Имя атрибута блока
  (defun *error* (msg)
;;;Прерываем активную команду  
    (while (> (getvar "CMDACTIVE") 0) (command))
    (if	(and PICK1
	     (= (type PICK1) 'PICKSET)
             (> (sslength PICK1) 0)
             (setq pt1 (ssname PICK1 0))
	)
      (if (and (getvar "PEDITACCEPT")
	       (= (getvar "PEDITACCEPT") 1)
	  )
	(command "_PEDIT" pt1 "_J" PICK1 "" "")
	(command "_PEDIT" pt1 "_Y" "_J" PICK1 "" "")
      )
    )
    (setq PICK1 NIL)
    (while (> (getvar "CMDACTIVE") 0) (command))
    (princ msg)
    (princ)
  )
  (defun _get-all-atts (obj)
    (if (and obj
             (vlax-property-available-p obj 'Hasattributes)
             (eq :vlax-true (vla-get-hasattributes obj))
        ) ;_ end of and
      (vl-catch-all-apply
        (function
          (lambda ()
            (mapcar (function (lambda (x)
                                (cons (strcase (vla-get-tagstring x))
                                      (vla-get-textstring x)
                                ) ;_ end of cons
                              ) ;_ end of lambda
                    ) ;_ end of function
                    (append (vlax-invoke obj 'Getattributes)
                            (vlax-invoke obj 'Getconstantattributes)
                    ) ;_ end of append
            ) ;_ end of mapcar
          ) ;_ end of lambda
        ) ;_ end of function
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of if
  ) ;_ end of defun
  (if
    (and
      (setq ss nil
            ss (ssget "_X"
                      (list
                        (cons 0 "INSERT")
                        (cons 2 bname)
                        (cons 66 1)
                        (cons 410 (getvar "CTAB"))
                      ) ;_ end of list
               ) ;_ end of ssget
      ) ;_ end of setq
      (setq lst
             (mapcar
               (function
                 (lambda (blk / attlist tmp)
                   (if (setq tmp (assoc attname (_get-all-atts blk)))
                     (cons (cdr tmp)
                           (vlax-safearray->list
                             (vlax-variant-value
                               (vla-get-insertionpoint blk)
                             ) ;_ end of vlax-variant-value
                           ) ;_ end of vlax-safearray->list
                     ) ;_ end of cons
                     nil
                   ) ;_ end of if
                 ) ;_ end of lambda
               ) ;_ end of function
               (mapcar (function vlax-ename->vla-object)
                       (vl-remove-if
                         (function listp)
                         (mapcar (function cadr) (ssnamex ss))
                       ) ;_ end of vl-remove-if
               ) ;_ end of mapcar
             ) ;_ end of mapcar
      ) ;_ end of setq
    ) ;_ end of and
     (progn
;;;=====================================      
       (setq ss  nil
             U_M (getvar "UNDOMARKS")
       ) ;_ end of setq
       (initget 128)
       (setq pt1 (getpoint "\nОт точки <выход> :"))
       (if (and pt1 (listp pt1)) ;_рисум линию
         (progn
           (setq PICK1 nil
                 PICK1 (ssadd)
           ) ;_ end of setq
           (setq str "\nК точке или номер <выход>:")
           (initget 128)
           (while (setq pt2 (getpoint pt1 str))
             (cond
               ((member pt2 '("О" "о" "_u" "_U" "u" "U"))
                (if (< U_M (getvar "UNDOMARKS"))
                  (progn
                    (command "_.UNDO" "_B")
                    (setq pt1 (list (getvar "USERR1") (getvar "USERR2")))
                  ) ;_ End of progn
                  (progn
                    (alert "Отменять больше нечего")
                  ) ;_ End of progn
                ) ;_ End of if
               )
               ((and pt2 (listp pt2))
                (setvar "USERR1" (car pt1))
                (setvar "USERR2" (cadr pt1))
                (command "_.UNDO" "_M")
;;;===Рисуем путь
                (command "_.LINE" "_none" pt1 "_none" pt2 "")
                (ssadd (entlast) PICK1)
                (setq pt1 pt2)
               )
               ((and pt2
                     (> (atoi (setq pt2 (vl-princ-to-string pt2))) 0)
                ) ;_ end of and
                (if (setq ss (cdr (assoc (strcase pt2) lst)))
;;;поиск номера точки
                  (progn
                    (setq pt2 (trans ss 0 1))
                    (setvar "USERR1" (car pt1))
                    (setvar "USERR2" (cadr pt1))
                    (command "_.UNDO" "_M")
;;;===Рисуем путь
                    (command "_.LINE" "_none" pt1 "_none" pt2 "")
                    (ssadd (entlast) PICK1)
                    (setq pt1 pt2)
                  ) ;_ end of progn
                  (princ (strcat "\nТочка с номером " pt2 "не найдена"))
                ) ;_ end of if
               )
               ((= (type pt2) 'STR) (princ " *** Непонятный ввод ***"))
               (t nil)
             ) ;_cond
             (setq str "\nК точке [Undo] <выход>:")
             (initget 128 "Отмена Undo _U _U")
           ) ;_ end of While
           (if (and (setq pt1 (ssname PICK1 0)) (entget pt1))
             (if (and (getvar "PEDITACCEPT")
                      (= (getvar "PEDITACCEPT") 1)
                 ) ;_ end of and
               (command "_PEDIT" pt1 "_J" PICK1 "" "")
               (command "_PEDIT" pt1 "_Y" "_J" PICK1 "" "")
             ) ;_ end of if
           ) ;_ end of if
         ) ;_ end of progn
       ) ;_ end of if
     ) ;_ end of progn
  ) ;_ end of if
  (setq PICK1 nil)
  (princ)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Построение полилинии между точками блоков, по атрибуту NAME блока.

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интерполяция отметок вершин полилинии между двумя заданными точками Кочетков Андрей Программирование 7 22.07.2019 20:14
Построение перпендикуляра между двумя полилиниями Макс_Кунгур Программирование 36 01.09.2009 11:04
Построение полилинии, соединяющей концы выделенных объектов Кочетков Андрей Программирование 4 23.06.2009 22:02
Обрезка полилинии или отрезков в местах пересечения блоков Джек Программирование 7 17.09.2006 22:11
Построение полилинии по таблице координат Борода Программирование 11 21.01.2005 18:44