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

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

Изменение свойств группы объектов

Ответ
Поиск в этой теме
Непрочитано 08.04.2011, 15:59 #1
Изменение свойств группы объектов
serg72
 
Регистрация: 26.03.2011
Сообщений: 13

Подскажите, плиз как у активной выборки поменять одно свойство объектов на другое. Нужно ли перебирать в цикле все объекты в ActiveSelectionSet или можно за один раз?
Просмотров: 3725
 
Непрочитано 08.04.2011, 16:53
#2
Лиспер


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


Для начала не помешало бы сказать, на каком языке идет программирование. Следом - что за свойство надо менять (может, оно не в каждом объекте будет существовать - кто ж его знает-то?).
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 08.04.2011, 18:21
#3
gomer

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


Цитата:
Сообщение от serg72 Посмотреть сообщение
Подскажите, плиз как у активной выборки поменять одно свойство объектов на другое. Нужно ли перебирать в цикле все объекты в ActiveSelectionSet или можно за один раз?
Вот не стыдно такое писать?
gomer вне форума  
 
Автор темы   Непрочитано 08.04.2011, 18:28
#4
serg72


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


Да, совсем уж коротко написал. Пытаюсь облегчить работу в Акаде с помощью лиспа. Сейчас стоит задача изменить Масштаб типа линии во вхождениях в блок (по какой то причине блоки в разных чертежах имеют разные масштабы и нужно привести к одному). Через свойства объекта в Акаде эта позиция не редактируется, в лиспе нашел свойство и для одного выбранного блока все прекрасно работает, а организовать то же самое для всех объектов выборки пока не получается.
serg72 вне форума  
 
Непрочитано 08.04.2011, 19:11
#5
gomer

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


Если найдешь соответствующий метод для набора или свойство, то можешь не перебирать... Или ты надеешься, что так быстрее было бы? Нет, можно, конечно, схалтурить: преобразовать набор в список и применить mapcar, но суть от этого не поменяется
gomer вне форума  
 
Автор темы   Непрочитано 09.04.2011, 06:54
#6
serg72


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


Цитата:
Сообщение от gomer Посмотреть сообщение
Если найдешь соответствующий метод для набора или свойство, то можешь не перебирать... Или ты надеешься, что так быстрее было бы? Нет, можно, конечно, схалтурить: преобразовать набор в список и применить mapcar, но суть от этого не поменяется
Разбираюсь с лиспом совсем не давно, под рукой только отсканированный Полещук, времени как всегда в обрез. Так что чего не догоняю приходится спрашивать на форумах. Для одиночного блока использовал vla-put-LineTypeScale но оно работает с vla-объектами. Можно ли сделать что-то типа:

( vla-put-LineTypeScale ( определение ActiveSelectionSet) масштаб)

Может у кого есть готовый код для примера?
serg72 вне форума  
 
Непрочитано 09.04.2011, 13:11
#7
gomer

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


Цитата:
Сообщение от serg72 Посмотреть сообщение
Разбираюсь с лиспом совсем не давно, под рукой только отсканированный Полещук, времени как всегда в обрез.
Это очень плохой подход...


Цитата:
Сообщение от serg72 Посмотреть сообщение
Может у кого есть готовый код для примера?
Это тоже очень плохой подход...

зы Может и
Код:
[Выделить все]
 (defun put-LTypeScl (ss sc)
  (if (< 0 (vla-get-Count ss))
    (progn
      (vla-put-LineTypeScale (vla-Item ss 0) sc)
      (vla-RemoveItems
	ss
	(vlax-safearray-fill
	  (vlax-make-safearray vlax-vbObject '(0 . 0))
	  (list (vla-Item ss 0))
	)
      )
      (put-LTypeScl ss sc)
    )
  )
)
gomer вне форума  
 
Автор темы   Непрочитано 10.04.2011, 07:40
#8
serg72


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


gomer, спасибо за код, такой метод обучения конечно же не приемлем, но мы зачастую живем по принципу старого армейского анекдота "Некогда думать - прыгать надо". Вот и сейчас так - сдача объекта через неделю, а косяков в нем выше крыши. Готовый код в любом случае анализирую, бездумно не вставляю.
serg72 вне форума  
 
Непрочитано 10.04.2011, 10:02
#9
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


В коде из #7, наверное, вместо if надо while?
Do$ вне форума  
 
Непрочитано 10.04.2011, 10:24
#10
gomer

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


Цитата:
Сообщение от Do$ Посмотреть сообщение
В коде из #7, наверное, вместо if надо while?
Ну это если явно перебирать
Вариант 1 (классический)
Код:
[Выделить все]
 (defun put-LTypeScl (ss sc / el)
  (while (< 0 (sslength ss))
    (setq
      el
      (subst
        (cons 48 sc)
        (assoc 48 (setq el (entget (ssname ss 0))))
        el
      )
    )
    (entmod el)
    (ssdel (ssname ss 0) ss)
  )
)
Вариант 2 (объектный)
Код:
[Выделить все]
 (defun put-LTypeScl (ss sc)
  (while (< 0 (vla-get-Count ss))
    (vla-put-LineTypeScale (vla-Item ss 0) sc)
    (vla-RemoveItems
      ss
      (vlax-safearray-fill
        (vlax-make-safearray vlax-vbObject '(0 . 0))
        (list (vla-Item ss 0))
      )
    )
  )
)
Вариант 3 (смешанный)
Код:
[Выделить все]
 (defun put-LTypeScl (ss sc)
  (while (< 0 (sslength ss))
    (vla-put-LineTypeScale
      (vlax-ename->vla-object (ssname ss 0))
      sc
    )
    (ssdel (ssname ss 0) ss)
  )
)
зы. Каюсь, в последнее время голова забита рекурсиями...

Последний раз редактировалось gomer, 10.04.2011 в 12:44.
gomer вне форума  
 
Автор темы   Непрочитано 10.04.2011, 11:55
#11
serg72


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


Еще раз, спасибо за помощь, у меня возник небольшой вопросик: на данный момент пробую делать наборы с использованием ssget. Наборы получаются, но как теперь использовать этот код, ведь полученный SelectionSet не является vla-объектом. Можно ли его преобразовать во vla или нужно идти другим путем ?
serg72 вне форума  
 
Непрочитано 10.04.2011, 12:39
#12
gomer

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


Ну, так с этого и надо было начинать См. #10
gomer вне форума  
 
Автор темы   Непрочитано 10.04.2011, 13:35
#13
serg72


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


serg72 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Изменение свойств группы объектов

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возможны ли в автокаде функции врщения и масштабирования группы объектов как в других графических редакторах типа корела? SilvioManuel AutoCAD 20 16.03.2013 19:03
Убрать часть объектов из группы. DiF AutoCAD 7 06.10.2010 13:38
VBA. Многократный ввод данных и изменение положения объектов Markiza-2010 Программирование 6 28.06.2010 02:30
Экспорт свойств группы объектов из AutoCAD в текстовый файл ASh666 AutoCAD 2 02.06.2009 11:15
Lisp: Обработка объектов и получение списка свойств (координаты точек) Nanotronic LISP 2 23.04.2009 23:07