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

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

Нужна помощь в создании Lisp-а

Ответ
Поиск в этой теме
Непрочитано 10.08.2007, 12:14 #1
Нужна помощь в создании Lisp-а
ingvar504
 
Rhfcyjlfh
Регистрация: 08.08.2007
Сообщений: 3

Приветствую жителей форума dwg.ru. 8)
Помогите пожалуйста разобраться с созданием маленького лиспика для выбора чесел заданных диапазоном от.. и до.. среди массива постейших чисел на чертеже, заданных как 2,5; 12,1; и т.д.
После многочисленных попыток разобраться в самом Акаде я понял что мне поможет только Lisp.
Возможно я ошибаюсь.
Просмотров: 1968
 
Непрочитано 10.08.2007, 12:45
#2
Zouss


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


а поподробней можно?
что делать с выбранными числами - удалять, раскрашивать в разные цвета или еще что?
пример чертежа тоже не помешает
Zouss вне форума  
 
Непрочитано 10.08.2007, 12:49
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844


Числа могут быть в однострочных текстах, многострочных текстах (возможно, с форматированием), атрибутах (как входящих в блок так и нет), иметь пробелы (а теоретически и вообще любые символы) перед или после...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.08.2007, 12:57
#4
ingvar504


 
Регистрация: 08.08.2007
Rhfcyjlfh
Сообщений: 3


Чертеж я прилагаю.
Числа необходимо выделить, а потом хотел бы их раскрасить.
Это необходимо для обработки результатов расчетов и последующем их армировании.
Числа это площадь сечения арматуры в данной точке (см2/м).
[ATTACH]1186736243.rar[/ATTACH]
ingvar504 вне форума  
 
Непрочитано 10.08.2007, 18:29
#5
Zouss


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


могут быть, а могут и не быть
для прилагаемого чертежа такой вот лиспик бЭз проверок и с примитивнейшим междумордием
Код:
[Выделить все]
(defun C:cisla (/ ls str n k ss i ed en clr)
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (setq	ls (list)
  ) ;_  defun
  (while (/= (setq str (getstring "введите число: ")) "")
    (setq ls (cons str ls))
  ) ;_  while
  (setq	n   (length ls)
	i   0
	clr (getint "задайте цвет (число от 1 до 255): ")
  ) ;_  setq
  (repeat n
    (setq str (nth i ls)
	  ss  (ssget "X" (list (cons 0 "TEXT") (cons 1 str)))
	  k   (sslength ss)
	  i   (1+ i)
    ) ;_  setq
    (repeat k
      (setq ed (entget (setq en (ssname ss 0)))
	    ed (subst (cons 62 clr) (assoc 62 ed) ed)
      ) ;_  setq
      (entmod ed)
      (ssdel en ss)
    ) ;_  repeat
  ) ;_  repeat
  (vla-endundomark adoc)
  (princ)
) ;_  defun
добавлено - к сожалению менять цвет из bylayer у меня почему-то не получается, так что перед началом работы приходится всем текстам задать цвет явно, после чего вроде программка работаит
и еще добавлено - разбираясь с acad вы на такую команду filter внимания не обращали? для ваших целей самое то
Zouss вне форума  
 
Автор темы   Непрочитано 13.08.2007, 10:10
#6
ingvar504


 
Регистрация: 08.08.2007
Rhfcyjlfh
Сообщений: 3


Большое спасибо за внимание и помощь.

Стал проверять тобой написаный лисп, он выдает запрос на ввод числа, числа, числа, а затем на ввод номера цвета. Это не то что нужно.

Ты не мог бы подсказать как написать или подсказажи как написать следующее:
1. Выбирите числа с чертежа (выбрать их секущей рамкой).
2. Задайте диапазон от .. до ..
Результатом этих действий будут выдиление числел на чертеже из заданного диапазона.

Если это сложно то подскажи как расширить свойства оператора в команде быстрого выбора Акада, с функцией a<...<b
ingvar504 вне форума  
 
Непрочитано 13.08.2007, 17:27
#7
Zouss


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


если я вас правильно понял то вот как-то так
Код:
[Выделить все]
(defun C:cisla (/ ls str n k ss i ed en clr)

  (defun getcislolist (ss / ls mins maxs n z z1 en)
    (setq
      mins (getstring "введите минимальное число диапазона: ")
      maxs (getstring "введите максимальное число диапазона: ")
      mins (atof mins)
      maxs (atof maxs)
      ls   (list)
      n	   (sslength ss)
    ) ;_  setq
    (repeat n
      (if
	(and
	  (< mins
	     (setq z1
		    (atof (setq z (cdr (assoc 1 (entget (setq en (ssname ss 0))))))
		    ) ;_  atof
	     ) ;_  setq
	  ) ;_  <
	  (> maxs z1)
	) ;_  and
	 (if (not (member z ls))
	   (setq ls (cons z ls))
	 ) ;_  if
      ) ;_  if
      (ssdel en ss)
    ) ;_  repeat
    ls
  ) ;_  defun

  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark adoc)
  (setq ls (getcislolist (setq ss (ssget (list (cons 0 "TEXT"))))))
  (setq	n   (length ls)
	i   0
	clr (getint "задайте цвет (число от 1 до 255): ")
  ) ;_  setq
  (repeat n
    (setq str (nth i ls)		; если красить надо только те числа которые
					; ранее были выбраны секущей рамкой
					; следующую строку комментируем
	  ss  (ssget "X" (list (cons 0 "TEXT") (cons 1 str)))
	  k   (sslength ss)
	  i   (1+ i)
    ) ;_  setq
    (repeat k
      (setq ed (entget (setq en (ssname ss 0)))
	    ed (subst (cons 62 clr) (assoc 62 ed) ed)
      ) ;_  setq
      (entmod ed)
      (ssdel en ss)
    ) ;_  repeat
  ) ;_  repeat
  (vla-endundomark adoc)
  (princ)
) ;_  defun
Zouss вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Нужна помощь в создании Lisp-а

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