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

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

можно ли удалить точечную пару?

Ответ
Поиск в этой теме
Непрочитано 22.07.2009, 15:40 #1
можно ли удалить точечную пару?
kakt00z
 
инженер-проектировщик КИПиА
 
Минск
Регистрация: 30.08.2008
Сообщений: 159

собственно в теме и вопрос:

есть примитив
можно ли из его entget'а удалдить одну точечную пару?
(имя примитива нужно сохранить старым,
т.е. добавление нового элемента к чертежу вместо старгр неподходит)
Просмотров: 3879
 
Непрочитано 22.07.2009, 15:45
#2
Кулик Алексей aka kpblc
Moderator

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


Каков вопрос, таков и ответ: можно. Только осторожно.
Что за примитив? Какая точечная пара? Что значит "имя" - хендл, тип примитива или что-то еще?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 22.07.2009, 16:00
#3
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


задача:
поместить во все тексты (или аттрибуты), содержащие поля, текстовые строки с содержимым этих полей

попросту говоря убрать все поля из рисунка

мои мысли:
текст с полем, в отличие от "просто текста" содержит точечные пары (102 . "{ACAD_XDICTIONARY")
(360 . <Имя объекта: 7eff3f78>)
(102 . "}")
вот их я бы и хотел кильнуть...
думал сделать новый список (без этих пар) и и потом entmod но почему-то не выходит...
kakt00z вне форума  
 
Непрочитано 22.07.2009, 16:26
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Entmakex'om новый создать?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 22.07.2009, 16:52
#5
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(defun test (/ ent)
  (if (= (type (setq ent (vl-catch-all-apply
                           (function
                             (lambda ()
                               (vlax-ename->vla-object (ssname (ssget "_+.:E:S" '((0 . "TEXT,MTEXT"))) 0))
                               ) ;_ end of lambda
                             ) ;_ end of function
                           ) ;_ end of vl-catch-all-apply
                     ) ;_ end of setq
               ) ;_ end of type
         'vla-object
         ) ;_ end of =
    (if (/= (vla-fieldcode ent) (vla-get-textstring ent))
      (progn
        (entmakex
          (vl-remove-if
            (function
              (lambda (x)
                (member (car x) '(-1 5 102 360 330))
                ) ;_ end of lambda
              ) ;_ end of function
            (entget (vlax-vla-object->ename ent))
            ) ;_ end of vl-remove-if
          ) ;_ end of entmakex
        (entdel (vlax-vla-object->ename ent))
        ) ;_ end of progn
      ) ;_ end of if
    ) ;_ end of if
  ) ;_ end of defun
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.07.2009, 18:37
#6
VVA

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


kakt00z, Как все поля чертежа сразу преобразовать в текст? пост #20
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 22.07.2009, 19:49
#7
gomer

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


Для начала нужно научиться работать со списками(удалять и вставлять атомы, а затем использовать функцию entmod и если ЛИСП не ругнется...
gomer вне форума  
 
Автор темы   Непрочитано 23.07.2009, 01:13
#8
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


VVA, kpblc, спасибо!!!
сам уже понял что не надобности сохранять старые имена примитивов... поясню ниже...

kpblc, в твоём случае всеравно создается НОВЫЙ примитив с другоим именем.
у меня были похжие решения (правда без vl-функций, не хватает у меня времени с нимим разобраться... жалко)

почему возник сей вопрос:
у нас требуют "сдачи" проекта в электронный архив, для которого нужно каждый чертеж сохранять в отдельный файл, а у мя весь узел в одной модели, ... делаю много полями ....
и когда есть ссылка между блоками "туда-сюда" т.е. в аттрибутах пары блоков есть ссылки друг на друга, при разбиениии возникало много диезов (####)
вот я и придумал что может проще написать пару буков в лиспе чтоб поля убрать

теперь увидел, что если это "разбивать" одним махом то все данные сохраняются .... вроде ...
kakt00z вне форума  
 
Непрочитано 23.07.2009, 16:20
#9
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,095


а можно перед сдачей FIELDEVAL в 0, и все хорошо...до первого _updatefield Но кого в архиве это волнует?
kp+ вне форума  
 
Автор темы   Непрочитано 29.07.2009, 00:28
#10
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


аллах акбар ... вернулся сегодня к этой теме,
искал решение долго (почему то был уверен что оно всетаки есть)
всё, как всегда, гениально и просто...
всего лишь нужно было 2 раза повторить связку subst-entmod-entupd
причем первый раз с какой нить х-ней вместо текста, предварительно сохранив исходное значение... во второй же раз всавить то что должно быть...
пологаю что в первый раз что-то где-то разбивается ...при несоответствии букаф...
наверно надо почитать что-нить про Х-записи чтоб понять что происходит ваще

с текстми работает, думаю что и с аттрибутами должно
kakt00z вне форума  
 
Автор темы   Непрочитано 06.02.2012, 03:38
#11
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


если кому интересно , то по за пару лет я всетаки написал функцию для удаления полей
kakt00z вне форума  
 
Непрочитано 26.04.2012, 16:51
#12
kserg


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


> kakt00z

Интересно, напишите.
kserg вне форума  
 
Автор темы   Непрочитано 29.04.2012, 19:28
#13
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


Код:
[Выделить все]
 (defun c:fd ( / doc ss fltr)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc)
  (acet-error-init
    (list (list "cmdecho" 0
		"highlight" (getvar "highlight")
		"limcheck" 0
		"osmode" 0
		) T));acet-error-init
  
  (setq fltr '((-4 . "<OR")
	       (0 . "*TEXT")
	       (0 . "ATTDEF")
	       (0 . "INSERT")
	       (-4 . "OR>")))
  
  (setq ss (ssget "_I" fltr))
  (if (null ss) (setq ss (ssget fltr)))
  
  (setq ss (mapcar 'vlax-ename->vla-object (ss->list* ss)))
  (setq ss (vl-remove-if '(lambda (x)
			    (and
			      (= "AcDbBlockReference" (vla-get-ObjectName x))
			      (= :vlax-false (vla-get-HasAttributes x)))
			    ) ss))
  (mapcar 'delete-field ss)
  (acet-error-restore)
  (vla-endundomark doc)
  );defun


(defun delete-field (obj / str)
  (if (and (= "AcDbBlockReference" (vla-get-ObjectName obj)) (= :vlax-true (vla-get-HasAttributes obj)))
    (mapcar 'delete-field (vlax-safearray->list (vlax-variant-value (vla-GetAttributes obj))))
    (progn
      ;(setq str (vla-get-TextString obj))
      (setq str (cdr (assoc 1 (entget (vlax-vla-object->ename obj)))))
      (vla-put-textstring obj "dsf")
      (vlax-put-property obj "TextString" str)
      )
    )
  );defun
kakt00z вне форума  
 
Непрочитано 30.04.2012, 08:33
#14
VVA

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


kakt00z, А если атрибут многострочный? Это я к тому, что ты считываешь только значение поля 1
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 01.05.2012, 01:47
#15
kakt00z

инженер-проектировщик КИПиА
 
Регистрация: 30.08.2008
Минск
Сообщений: 159


VVA согласен, есть такое, но мне хватало (больших текстов с полями у меня нету)
можно добавить strcat assoc ... 3 или где они там дальше
да и двойную проверку на vla-get-HasAttributes тож можно убрать
kakt00z вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > можно ли удалить точечную пару?

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Команда PURGE, или как удалить действительно ненужные неиспользуемые элементы из файла AlphaGeo Программирование 45 15.06.2009 15:14
Можно ли такое реализовать в AutoCAD 2010? Shoorup Программирование 7 03.05.2009 23:33
Мониторы LCD CRT Разное 94 17.06.2008 10:51
Можно ли в SSGET создать фильтр по расширенным данным? {Smirnoff} Программирование 2 25.04.2004 12:44