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

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

Lisp. Вывод MTEXT с заданными параметрами.

Ответ
Поиск в этой теме
Непрочитано 06.05.2014, 17:19 #1
Lisp. Вывод MTEXT с заданными параметрами.
kpectoff
 
Регистрация: 06.03.2013
Сообщений: 34

Добрый день, коллеги. В программировании не силён, только начал осваивать lisp. Если задаю тупой вопрос - прошу дать ссылку на информацию, т.к. целый день убил на поиск проблемы и её решения. Суть в следующем.
Необходимо, чтобы после запуска лиспа, он спрашивал 3 (три) цифирных значения (только целые, положительные, ненулевые) и подставлял их в MTEXT с заранее заложенным текстом. Далее просил указать, куда вставить мтекст. далее увеличивал число "номер зоны" и "номер участка" на 1 и просил повторить вставку мтекста. Когда "Номер зоны" доходит до 16, следующий шаг - выдавать "номер зоны" 1, но при этом "номер БОСа" увеличить на 1 и так далее, пока юзер не прервет лист. Так же необходимо чтобы МТЕКСТ выравнивался по центру, был со скрытием заднего плана в виде фона с коэф-ом 1.3.
Проблема в том, что после ввода 3 (трех) переменных лисп отказывается работать. Прошу указать место в коде, где находится ошибка. Спасибо.
Код:
[Выделить все]
 (defun c:zones (/ bos zone osm site ts)
  (initget 7) 
  (setq bos (getint "Введите номер БОСа:"))
  (setq zone (getint "Введите номер зоны:"))
  (setq site (getint "Введите номер участка:"))
  (setq osm (getvar "OSMODE"))
  (setq ts (getvar "TEXTSIZE"))
  (repeat 99
    (while (<= zone 16)
      (entmake
	(list
	  (cons 0 "MTEXT")
	  (cons 100 "AcDbEntity")
	  (cons 100 "AcDbText")
	  (list 1 "\\pxqc;Участок " (itoa site) "100м\\P " (itoa bos) "." (itoa zone))
	  (cons 67 0)
	  (cons 40 (itoa ts))
	  (list 41 (* ts 12.8))
	  (cons 46 0)
	  (cons 71 1)
	  (cons 72 5)
	  (cons 42 27.0907)
	  (cons 43 6.76387)
	  (cons 50 0)
	  (cons 73 1)
	  (cons 44 1)
	  (cons 90 3)
	  (cons 63 256)
	  (list 45 1.3)
	  (cons 441 0)
	  (list 10 (getpoint))
	); конец list
      ); конец entmake
    (setq zone (1+ zone))
    (setq site (1+ site))
    ); конец while
  (setq bos (1+ bos))
  ); конец repeat
); конец defun

Миниатюры
Нажмите на изображение для увеличения
Название: 1231234.png
Просмотров: 59
Размер:	8.9 Кб
ID:	127946  

Просмотров: 2171
 
Непрочитано 06.05.2014, 20:10
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Пробуй
Код:
[Выделить все]
 
(defun c:zones (/ bos zone site pt mtext)
  (vl-load-com)   
  (initget 7) 
  (setq bos (getint "Введите номер БОСа: "))
  (initget 7) 
  (setq zone (getint "Введите номер зоны: "))
  (initget 7) 
  (setq site (getint "Введите номер участка: "))
  (while (setq pt (getpoint "\nТочка участка <выход>: "))
      (setq mtext (M-TEXT (trans pt 1 0)(strcat "\\pxqc;Участок " (itoa site) " (100м)\\P " (itoa bos) "." (itoa zone))))
      (mip-mtext-mask mtext t 1.3)
      (setq site (1+ site) zone (1+ zone))
      (if (> zone 16)(setq zone 1 bos (1+ bos)))
    )
); конец defun
(defun M-Text (pt str)
  (entmakex (list (cons 0 "MTEXT")         
                  (cons 100 "AcDbEntity")
                  (cons 100 "AcDbMText")
                  (cons 10 pt)
                  (cons 1 str)))
  )
(defun mip-mtext-mask (ent OnOff k / ed)
;;; Включает/отколючает маскировку mtext  
;;; ent -mtext ename
;;; OnOff - t - включить nil - отключить
;;; k - коэффициент перектытия
(vl-load-com)     
  (setq ed (vl-remove-if
             '(lambda (x) (member (car x) '(90 63 421 45 441)))
             (entget ent)
           ) ;_ end of vl-remove-if
  ) ;_ end of setq
  (if OnOFF
;;;Включить
    (setq ed (append ed
                     (list '(90 . 3)
                       '(63 . 9)
                       '(421 . 13158600)
                       (cons 45 k ) ;_коэфф перехлеста
                       '(441 . 6042092)
                      )
             ) ;_ end of append
    ) ;_ end of setq
    (progn
      (setq ed (append ed '((90 . 2))))
      (vla-put-BackgroundFill (vlax-ename->vla-object ent) :vlax-false)
      )
  ) ;_ end of if
  (entmod ed)
  (entupd ent)
) ;_ end of defun

__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 06.05.2014 в 23:46.
VVA вне форума  
 
Автор темы   Непрочитано 07.05.2014, 11:00
#3
kpectoff


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


Спасибо большое! все работает. Теперь буду разбираться в коде, учиться новому.
Такой ещё вопрос, а можно сделать так, чтобы в любой момент проставки МТЕКСТа, при нажатии на энтр, номер зоны становился равным 1, номер БОСа увеличивался на 1, но при этом номер участка продалжал нумироваться. Спасибо.
kpectoff вне форума  
 
Непрочитано 07.05.2014, 12:22
#4
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992


Например так
Код:
[Выделить все]
 
 
(defun c:zones (/ bos zone site pt mtext)
  (vl-load-com)   
  (initget 7) 
  (setq bos (getint "Введите номер БОСа: "))
  (initget 7) 
  (setq zone (getint "Введите номер зоны: "))
  (initget 7) 
  (setq site (getint "Введите номер участка: "))
  (initget "Сброс")
  (while (setq pt (getpoint "\nТочка участка [Сброс зоны] <выход>: "))
    (if (eq pt "Сброс")
      (setq zone 1 bos (1+ bos))
      (progn
      (setq mtext (M-TEXT (trans pt 1 0)(strcat "\\pxqc;Участок " (itoa site) " (100м)\\P " (itoa bos) "." (itoa zone))))
      (mip-mtext-mask mtext t 1.3)
      (setq site (1+ site) zone (1+ zone))
      (if (> zone 16)(setq zone 1 bos (1+ bos)))
      )
      )
    (initget "Сброс")
    )
); конец defun
(defun M-Text (pt str)
  (entmakex (list (cons 0 "MTEXT")         
                  (cons 100 "AcDbEntity")
                  (cons 100 "AcDbMText")
                  (cons 10 pt)
                  (cons 1 str)))
  )
(defun mip-mtext-mask (ent OnOff k / ed)
;;; Включает/отколючает маскировку mtext  
;;; ent -mtext ename
;;; OnOff - t - включить nil - отключить
;;; k - коэффициент перектытия
(vl-load-com)     
  (setq ed (vl-remove-if
             '(lambda (x) (member (car x) '(90 63 421 45 441)))
             (entget ent)
           ) ;_ end of vl-remove-if
  ) ;_ end of setq
  (if OnOFF
;;;Включить
    (setq ed (append ed
                     (list '(90 . 3)
                       '(63 . 9)
                       '(421 . 13158600)
                       (cons 45 k ) ;_коэфф перехлеста
                       '(441 . 6042092)
                      )
             ) ;_ end of append
    ) ;_ end of setq
    (progn
      (setq ed (append ed '((90 . 2))))
      (vla-put-BackgroundFill (vlax-ename->vla-object ent) :vlax-false)
      )
  ) ;_ end of if
  (entmod ed)
  (entupd ent)
) ;_ end of defun
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp. Вывод MTEXT с заданными параметрами.

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется помощь,что бы Mleader не опускался Composter Программирование 79 04.12.2018 18:03
Как скопировать содержимое размера в буфер? arturbd AutoCAD 8 06.09.2011 20:38
Нахождение расстояния между точками на чертеже Макс_Кунгур Программирование 68 03.09.2010 22:01
Как получить MTEXT но без форматирования, только текст? lexluther Программирование 14 13.09.2009 22:52
Требуется помощь с циклом в лиспе Composter LISP 28 13.05.2009 11:14