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

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

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

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

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

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

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


Каков вопрос, таков и ответ: можно. Только осторожно.
Что за примитив? Какая точечная пара? Что значит "имя" - хендл, тип примитива или что-то еще?
__________________
Моя библиотека 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,839


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

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


Код:
[Выделить все]
(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,996


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,181


а можно перед сдачей 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,996


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