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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматическая нумерация поворотных точек участка

Автоматическая нумерация поворотных точек участка

Ответ
Поиск в этой теме
Непрочитано 25.11.2014, 14:37 #1
Автоматическая нумерация поворотных точек участка
aydinkhalil
 
Регистрация: 25.11.2014
Сообщений: 14

Добрый день. Возникла небольшая проблема при работе с AutoCad 2014. Проблема в автоматической нумерации поворотных точек земельного участка. Участок нарисован при помощи обычной полилинии. В конце рисования полилиния замыкается командой "close". После замыкания необходимо пронумеровать поворотные точки. Есть несколько условий нумерации. Во-первых нумерация обязательно должна идти по ходу рисования полилинии. То есть каждая следующая должна быть в точности такой как список координат этой полилинии в команде "list". Не знаю получилось ли объяснить задачу целиком но я всегда готов дополнить необходимую информацию. Какими техническими средствами это можно притворить в жизнь я не знаю. Единственно важно чтобы это было быстрее и проще чем обычная ручная работа. Встречался с такими решениями только в GIS системах. Там это делалось либо при помощи дополнительных утилит либо встроенными функциями. Если есть и такие для AUTOCAD прошу вас помочь с ними познакомиться. Заранее спасибо всем за помощь.
Просмотров: 14685
 
Непрочитано 25.11.2014, 14:58
#2
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 858


Поиск по форуму наверняка что-нибудь бы да нашел. Например это
AlexCondor вне форума  
 
Автор темы   Непрочитано 25.11.2014, 15:55
#3
aydinkhalil


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


Это все уже просмотрено. К сожалению я не разбираюсь в программировании и никак не имею возможности изменять представленный код под свои нужды. А все что там выложено имеет отношение к координатам точек а также к экспорту/импорту. То что необходимо мне это самая простая нумерация. Ничего более. Запустил макрос или lisp, выбрал объект и точки пронумеровались. Вот что нужно. Надеюсь есть уже такие решения. Извините за делитантство. Новичок я ещё.
aydinkhalil вне форума  
 
Непрочитано 25.11.2014, 16:28
#4
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 858


Посмотри этот лисп
AlexCondor вне форума  
 
Автор темы   Непрочитано 26.11.2014, 08:07
#5
aydinkhalil


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


Спасибо большое. Сейчас протестирую.
aydinkhalil вне форума  
 
Непрочитано 26.11.2014, 11:38
#6
VVA

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


aydinkhalil,
Там вариант без учета высоты текстового стиля, установленных привязок, загрузки VLISP и обработки ПСК. Обрабатывает только LW полилинии (см команду _convert и переменную PLINETYPE
Здесь исправленная версия
Код:
[Выделить все]
(defun C:Nvx (/ ent n lst_point sys_var htxt)
;;;http://forum.dwg.ru/showthread.php?t=117294  
;;;http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=23&TID=36305&MID=206105&phrase_id=667082#message206105
;;;Как сделать автоматическую нумерацию узловых точек полилиний? 
;;; Нумерация вершины полилиний
  (vl-load-com)
  (setq Htxt 2) ;_Высота текста
  (setq sys_var (mapcar 'getvar '("osmode" "cmdecho")))
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
  (if (not (numberp *NPoint*))(setq *NPoint* 1))
  (princ "\nНачальный номер <")(princ *NPoint*)(princ ">: ")
  (if (null (setq n (getint)))(setq n *NPoint*))
  (and
  (setq ent (car (entsel "\nВыберите полилинию: ")))
  (= (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
  (setq  lst_point (mapcar 'cdr
        (vl-remove-if-not
          '(lambda (x) (= (car x) 10))
          (entget ent)
        ) ;_ end of vl-remove-if-not
      ) ;_ end of mapcar
  ) ;_ end of setq
  (mapcar '(lambda (x)
       (setq x (trans x 0 1))      
       (vl-cmdf "_circle" "_none" x "_d" 0.8)
       (if (zerop (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))))
     ;; нулевая высота текста      
       (vl-cmdf "_text" "_none" (polar x (/ pi 4) 1.) Htxt 0 (itoa n))
     ;; фиксированнная высота         
       (vl-cmdf "_text" "_none" (polar x (/ pi 4) 1.) 0 (itoa n))
         )
       (setq n (1+ n))
     ) ;_ end of lambda
    lst_point
  ) ;_ end of mapcar
  (setq *NPoint* n)
  (mapcar 'setvar '("osmode" "cmdecho") sys_var)
  )
  (princ)
) ;_ end of defun
(princ "\nНаберите Nvx в командной строке")

Код:
[Выделить все]
(defun C:Nvx (/ ent n lst_point sys_var htxt msh tu Dkr )
;;;http://forum.dwg.ru/showthread.php?t=117294  
;;;http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=23&TID=36305&MID=206105&phrase_id=667082#message206105
;;;Как сделать автоматическую нумерацию узловых точек полилиний? 
;;; Нумерация вершины полилиний
  (vl-load-com)
  ;;; tuset - настройки высоты текста, цвета и диам круга для типов участков
  ;;;  Тип   
  ;;; учатска  Цвет  Диаметр  Hтекста
  ;;; ("1"      7    0.0582   0.3     )
  (setq tuset '(("1" 7 0.0582 0.3)("2" 244 0.0582 0.24)("3" 1 0.0582 0.192)))
  (setq Htxt 0.3 Dkr 0.0582) ;_Высота текста и диам круга
  (setq sys_var (mapcar 'getvar '("osmode" "cmdecho")))
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
  (initget "1 2 5 10 20 50 100")
  (or
  (setq msh (getkword "\nВыберите масштаб [1/2/5/10/20/50/100] <1>: "))
  (setq msh "1")
  )
  (setq msh (atof msh))
  (initget "1 2 3")
  (or
  (setq tu (getkword "\nВыберите тип участка [ 1 - внешний / 2 - внутренний / 3 - здание] <1>: "))
  (setq tu "1")
  )
 (setq  tu (assoc tu tuset))
 (if (numberp (nth 3 tu))(setq Htxt (nth 3 tu))) ;_Высота текста
 (if (numberp (nth 2 tu))(setq Dkr (nth 2 tu))) ;_Диаметр
 (if (numberp (nth 1 tu))(setq tu (nth 1 tu))(setq tu nil)) ;_Цвет
   (setq n 1)
  (and
  (setq ent (car (entsel "\nВыберите полилинию: ")))
  (= (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
  (setq  lst_point (mapcar 'cdr
        (vl-remove-if-not
          '(lambda (x) (= (car x) 10))
          (entget ent)
        ) ;_ end of vl-remove-if-not
      ) ;_ end of mapcar
  ) ;_ end of setq
  (mapcar '(lambda (x)
       (setq x (trans x 0 1))      
       (vl-cmdf "_circle" "_none" x "_d" (* Msh Dkr))
       (vl-cmdf "_-hatch" "_p" "solid" "_s" (entlast) "" "")             
       (if (zerop (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))))
     ;; нулевая высота текста      
       (vl-cmdf "_text" "_none" (polar x (/ pi 4)(* Msh Dkr)) (* Htxt MSH) 0 (itoa n))
     ;; фиксированнная высота
         (progn
           (vl-cmdf "_text" "_none" (polar x (/ pi 4)(* Msh Dkr)) 0 (itoa n))
           (lib:dxf-ent-modify (entlast) 40 (* Htxt MSH))
           )
         )
       (if (NUMBERP tu)(lib:dxf-ent-modify (entlast) 62 tu))
                   
       (setq n (1+ n))
     ) ;_ end of lambda
    lst_point
  ) ;_ end of mapcar
  (setq *NPoint* n)
  (mapcar 'setvar '("osmode" "cmdecho") sys_var)
  )
  (princ)
) ;_ end of defun
  ;|======================= lib:dxf-ent-modify ===========================================
*    Функция модификации указанного бита примитива 
*    Параметры вызова: 
*   ent   - примитив, полученный через (entsel), (entlast) etc
            или список полей (entget(entlast))
*   kode   - dxf-код, значение которого надо установить 
*   value   - новое значение (0 - поблоку 256 - послою)
*             или bylayer byblock
*    Примеры вызова: 
(lib:dxf-ent-modify (entlast) 8 "0")   ; перенести последний примитив на слой 0 
(lib:dxf-ent-modify (car(entsel)) 62 10)   ; установить выбранному примитиву цвет 10 
*    Возвращаемое значение: 
*   примитив с модифицированным dxf-списком. Примитив автоматически перерисовывается. 
=======================================================================================|; 
(defun lib:dxf-ent-modify (ent kode value / ent_list old_dxf new_dxf)
  (if (= (type ent) 'LIST)
    (setq ent_list ent
	  ent (cdr(assoc -1 ent_list)))
    (setq ent_list (entget ent))
    )
  (if (and
	(member (lib:dxf 0 ent_list) '("STYLE" "DIMSTYLE" "LAYER"))
	(= kode 100)) ;_ end of and
    nil
    (progn
      (setq new_dxf  (cons kode 
            (if (and (= kode 62) (= (type value) 'str)) 
              (if (= (strcase value) "BYLAYER") 
                256 
                0 
                ) ;_ end of if 
              value 
              ) ;_ end of if 
            ) ;_ end of cons 
       ) ;_ end of setq 
      (if (not (equal new_dxf (setq old_dxf (assoc kode ent_list)))) 
   (progn (entmod (if old_dxf 
          (subst new_dxf old_dxf ent_list) 
          (append ent_list (list new_dxf)) 
          ) ;_ end of if 
             ) ;_ end of entmod 
          (entupd ent) 
          (redraw ent) 
          ) ;_ end of progn 
   ) ;_ end of if 
      ) ;_ end of progn 
    ) ;_ end of if 
  ent 
  ) ;_ end of defun
;|  ! ***************************************************************************
;; !                           lib:dxf
;; ! ***************************************************************************
;; ! Function : Returns the first occurence of a DXF dotted pair from a list
                Возвращает первое вхождение точечной пары DXF списка
;; ! Argument : 'n'     - The DXF code to check / DXF код
;; !            'lst' -    The List to check  / Список
;; ! Returns  : The value of the DXF dotted pair, if it exists else returns nil
                Значение точечной пары, если есть или nil
;; ! ****************************************************************************|;

(defun lib:dxf (n lst)(if (= (type lst) 'ENAME)(setq lst (entget lst)))(cdr (assoc n lst)))
(princ "\nНаберите Nvx в командной строке")
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 16.12.2014 в 12:28. Причина: Добавлен вариант с заливкой кругов
VVA вне форума  
 
Автор темы   Непрочитано 26.11.2014, 13:43
#7
aydinkhalil


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


Огромное спасибо! Это прекрасная программа! Именно то что надо! А можно как нибудь сделать так чтобы окружность которая рисуется была черного цвета и заливалась (также черным цветом) полностью. И есть ли возможность как нибудь выбирать из командной строки размер окружности и нумерации также как выбираем начальное значение номера? Дело в том что я постоянно меняю масштаб чертежа но не обычными методами а через ....! Так уж сложились условия. И поэтому есть постоянная необходимость менять размер шрифта и окружностей вручную. А хотелось бы эволюционировать. И ещё раз огромное спасибо за такую помощь! Простите за то что нагружаю.
aydinkhalil вне форума  
 
Непрочитано 25.02.2015, 20:38
#8
Zaicc


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


Всем привет!
Я только осваиваю автокад да еще и на mac. Сразу встал вопрос автоматизации процессов. Начинаю с самого простого и нужного )
Помогите, пожалуйста, с этим LSP. Он у меня при запуске команды выдает:

Command: NVX
\nuuc0uu1053 uu1072 uu1095 uu1072 uu1083 uu1100 uu1085 uu1099 uu1081 uu1085 uu1086 uu1084 uu1077 uu1088 <1>: *Cancel*
; error: Function cancelled

и этим все заканчивается.. В чем может быть причина?
Zaicc вне форума  
 
Непрочитано 25.02.2015, 21:47
#9
VVA

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


Цитата:
Сообщение от Zaicc Посмотреть сообщение
да еще и на mac
Попробуй переписать строчку
Цитата:
(setq msh (getkword "\nВыберите масштаб [1/2/5/10/20/50/100] <1>: "))
английскими буквами. Может вопрос в кодировке файла?
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 26.02.2015, 20:35
#10
Zaicc


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


не знаю что случилось, но теперь он его не подгружает совсем..

----- добавлено через ~11 мин. -----
а вот этот грузится и работает, хотя не понятно что это..

(Defun C:AN ()
(Setvar "Cmdecho" 0)
(Setq A (Getint "\nStarting number: "))
(Setq B (Getint "\nEnding number: "))
(Setq P1 (Getpoint "\nStarting point: "))
(Setq C (Getdist P1 "\nDistance between numbers: "))
(Setq A1 (Getangle P1 "\nAngle to run numbers: "))
(Setq D (Getvar "textsize"))
(If (> A B)
(Setq E -1)
(Setq E 1)
)
(Repeat (+ 1 (Abs (- A B)))
(Setq F (Itoa A))
(Command "Text" P1 D 0 F)
(Setq A (+ A E))
(Setq P1 (Polar P1 A1 C))
)
(princ)
)
Zaicc вне форума  
 
Непрочитано 27.02.2015, 08:12
#11
VVA

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


Цитата:
Сообщение от Zaicc Посмотреть сообщение
не знаю что случилось, но теперь он его не подгружает совсем..
А что сообщает?
Приведи здесь код, который не грузится. Только не забывай про теги [code]
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 27.02.2015, 23:19
#12
Zaicc


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


а ничего не пишет.. говорит, что файл успешно загружен, при повторном открытии appload файла в списке нет.
Сейчас посмотрела в command line history, там:
Код:
[Выделить все]
Command: _appload Nvx.lsp successfully loaded.
Command: ; error: syntax error
гружу первый вариант

----- добавлено через ~31 мин. -----
по вашему совету перевела все на англ
Код:
[Выделить все]
(defun C:Nvx (/ ent n lst_point sys_var htxt)
;;;http://forum.dwg.ru/showthread.php?t=117294  
;;;http://www.caduser.ru/forum/index.php?PAGE_NAME=read&FID=23&TID=36305&MID=206105&phrase_id=667082#message206105
;;;How to make numbers of corner points of polyline? 
;;; number of PL
  (vl-load-com)
  (setq Htxt 2) ;_Text height
  (setq sys_var (mapcar 'getvar '("osmode" "cmdecho")))
  (setvar "osmode" 0)
  (setvar "cmdecho" 0)
  (if (not (numberp *NPoint*))(setq *NPoint* 1))
  (princ "\nFirst number <")(princ *NPoint*)(princ ">: ")
  (if (null (setq n (getint)))(setq n *NPoint*))
  (and
  (setq ent (car (entsel "\nChoose a polyline: ")))
  (= (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
  (setq  lst_point (mapcar 'cdr
        (vl-remove-if-not
          '(lambda (x) (= (car x) 10))
          (entget ent)
        ) ;_ end of vl-remove-if-not
      ) ;_ end of mapcar
  ) ;_ end of setq
  (mapcar '(lambda (x)
       (setq x (trans x 0 1))      
       (vl-cmdf "_circle" "_none" x "_d" 0.8)
       (if (zerop (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))))
     ;; Zero height of text      
       (vl-cmdf "_text" "_none" (polar x (/ pi 4) 1.) Htxt 0 (itoa n))
     ;; Fix height         
       (vl-cmdf "_text" "_none" (polar x (/ pi 4) 1.) 0 (itoa n))
         )
       (setq n (1+ n))
     ) ;_ end of lambda
    lst_point
  ) ;_ end of mapcar
  (setq *NPoint* n)
  (mapcar 'setvar '("osmode" "cmdecho") sys_var)
  )
  (princ)
) ;_ end of defun
(princ "\nType Nvx in command line»)
при загрузке все то же.
Zaicc вне форума  
 
Непрочитано 28.02.2015, 00:30
#13
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


Если у вас 2015 автокад, попробуйте заменить vl-cmdf на comand или если не поможет на command-s
если и это не поможет, можно попробовать entmake
gomer вне форума  
 
Непрочитано 28.02.2015, 00:38
#14
Zaicc


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


может это связано с местом расположения файлов? у меня папка с lisp хранится на рабочем столе.

----- добавлено через 29 сек. -----
у меня 2014
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана 2015-02-27 в 23.39.19.png
Просмотров: 185
Размер:	431.3 Кб
ID:	144783  
Zaicc вне форума  
 
Непрочитано 28.02.2015, 09:07
#15
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


Цитата:
Сообщение от Zaicc Посмотреть сообщение
может это связано с местом расположения файлов? у меня папка с lisp хранится на рабочем столе.
на картинке показано что лисп успешно загружен, уберите последнюю строчку и будет вам счастье
gomer вне форума  
 
Непрочитано 28.02.2015, 10:15
#16
Zaicc


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


последнюю строчку кода? не помогает.
он же пишет 'successfully loaded' и далее 'syntax error'
Zaicc вне форума  
 
Непрочитано 28.02.2015, 11:24
#17
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


вот эту: (princ "\nType Nvx in command line»)

не знаю как но у вас затесалась левая кавычка » в код
gomer вне форума  
 
Непрочитано 28.02.2015, 12:02
#18
Zaicc


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


не работает.. даже и не знаю что сказать..
Zaicc вне форума  
 
Непрочитано 28.02.2015, 12:11
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


а что пишет когда вы вводите в командную строку NVX после загрузки лиспа?
gomer вне форума  
 
Непрочитано 28.02.2015, 12:25
#20
Zaicc


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


не видит команды
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок экрана 2015-02-28 в 12.17.47.png
Просмотров: 137
Размер:	396.6 Кб
ID:	144790  Нажмите на изображение для увеличения
Название: Снимок экрана 2015-02-28 в 12.18.02.png
Просмотров: 100
Размер:	410.8 Кб
ID:	144791  Нажмите на изображение для увеличения
Название: Снимок экрана 2015-02-28 в 12.18.37.png
Просмотров: 72
Размер:	413.1 Кб
ID:	144792  
Zaicc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Автоматическая нумерация поворотных точек участка

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая нумерация точек. glazomer AutoCAD 16 20.01.2011 15:23
автоматическая нумерация в атрибутах блока Michael-- AutoCAD 4 29.11.2010 21:24
Перенос точек обмера участка на план Автокада better AutoCAD 8 02.05.2010 18:56
Нумерация точек на плане и вывод их координат в полярной системе kukuikar Программирование 1 17.02.2008 11:15
Автоматическая нумерация текстов dorofei Программирование 8 18.01.2007 09:31