Тема: Как запретить редактирование, копирование, печать файла?

Привет всем. Помогите мне, пожалуйста, с одним вопросом по АКАДу. Можно ли что-то мне предпринять такое, чтобы созданный мной с огромным трудом чертеж никто, кроме меня, разумеется, не смог бы редактировать, копировать, или распечатать. Но при всем при этом этот некто смог бы открыть мой файл, может быть произвести замеры, каких-либо расстояний , площадей, но не более? Заранее спасибо. Сталкнулся с жутким плагиатом на своей работе, просто жуть. Что-то нужно мне предпринять против этих нечестных типов.

Re: Как запретить редактирование, копирование, печать файла?

Можно конечно конвертнуть в PDF, DWF или даже в JPG... Только все равно напечатают :)))) И размеры - площадя не померют :(
Можно невидимую подпись воткнуть в файл DWG - это уже обсуждалось. И потом доказывать всем желающим, откуда этот файл появился.
И еще есть программка Эдуарда, которая делает некоторую защиту от шаловливых ручек, впрочем, зная структуру файла снять защиту легко, но вот плодотворно работать с файлом после этого уже ооочень затруднительно.
Самое надежное - закатать чертежи на компакт-диск и никому его не показывать :)

Re: Как запретить редактирование, копирование, печать файла?

А если плагиат жуткий - значит проект хороший :)

Re: Как запретить редактирование, копирование, печать файла?

а можно ли посмотреть на этот проект :о)
шутка конечно!

Re: Как запретить редактирование, копирование, печать файла?

> maximan
Надо выставить чеетеж в сети для всеобщего обозрения, типа застолбив на него права, и тогда любому плагиатору можно сунуть адресочек с датой закачки файла
Тоже шутка, конечно, но что-то тут есть

Re: Как запретить редактирование, копирование, печать файла?

где вы говорите лежат хорошие проекты?
Можно придумать что то вроде:
1. Свой файла архивируешь
2. Берешь файл для отправки
3. Все взрываешь и переносишь в нулевой слой. Раскраску можно оставить для читаемости
4. Объединяешь все кроме букв в полилинию
5. Чистишь пургеном остатки файла
  чисто абстрактные размышления
6. А буквы пиши своим шрифтом, что б у них (нас-плагиатораф закорючки оттображались) Шрифт прячь:)

Re: Как запретить редактирование, копирование, печать файла?

VK
А что это за программа Эдуарда?

Re: Как запретить редактирование, копирование, печать файла?

> str-02.
А как можно взорвать и оставить раскраску? Допустим блок был в слое красного цвета, сам блок сделан в нулевом слое. При взрывании он становиться нулевым слоем, белым. Или надо каким нить ЛИСПом пользоваться для переноса цвета слоя блока в просто цвет на нулевом слое?

Re: Как запретить редактирование, копирование, печать файла?

Если вытравить чертеж его на камне, типа памятника, тогда ни редактировать, ни копировать, ни, тем более, распечатать его будет не возможно. Это точно. А вот размеры померить можно будет. :)
maximan, не переживай, пусть все пользуются твоей работой и к тебе потом еще придут! Чем больше даешь, тем больше тебе останется...

Re: Как запретить редактирование, копирование, печать файла?

> Mikhail
-Выключаешь все слои кроме требуемого и меняешь цвет с по слою на по цвету
-я удивляюсь
     если кролик хочет морковку железный робот ему не помеха.
                                                                 Багз Банни

Re: Как запретить редактирование, копирование, печать файла?

> str-02
Это ясно.
Просто я думал может в Экспрессах или еще где то есть функция взрывать по цвету или что то такое... А в ручную много чего сделать можно... Хотя думаю ЛИСП сделать можно чтобы он при взрывании обхекта автоматически менял цвет.

Re: Как запретить редактирование, копирование, печать файла?

Можно взорвать командой XPLODE а не Explode и задать цвет, слой, толщину и т.д.

Re: Как запретить редактирование, копирование, печать файла?

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

;;;Функция преобразования объектов чертежа в мультивставку анонимных блоков
(defun minsert-document    (/ acaddoc block-collect m-space p-space)
  (vl-load-com)
  (setq    acaddoc          (vla-get-ActiveDocument
            (vlax-get-acad-object)
              )
    block-collect (vla-get-blocks acaddoc)
    m-space          (vla-get-modelspace acaddoc)
    p-space          (vla-get-PaperSpace acaddoc)
    old-layer     (getvar "clayer")
    old-color     (getvar "cecolor")
    old-ctab      (getvar "ctab")
  )
  (mapcar 'setvar
      '("clayer" "cecolor" "celtype")
      '("0" "BYLAYER" "BYLAYER")
  )
  (vla-startundomark acaddoc)
  (vla-purgeall acaddoc)
  (xref-bind)
  (block-unnamed)
  (foreach b (cons "Model" (layoutlist))
    (setvar "ctab" b)
    (attribute-text)
    (minsert-block)
  )
  (vla-endundomark acaddoc)
  (mapcar 'setvar
      '("clayer" "cecolor" "ctab")
      (list old-layer old-color old-ctab)
  )
  (princ)
)
;;; Функция преобразования внешних ссылок в блоки.
(defun xref-bind (/ xrefname)
  (vlax-for item block-collect
    (if
      (equal (vla-get-IsXRef item) :vlax-true)
       (setq xrefname (cons (vla-get-name item) xrefname))
    )
  )
  (if xrefname
    (progn
      (foreach i xrefname
    (vla-bind (vla-item block-collect i) :vlax-false)
      )
    )
  )
  (vla-update (vlax-get-acad-object))
  (princ)
)
;Функция преобразования описания аттрибутов в однострочный текст
(defun attribute-text (/ attrib act-sp attrib-txt)
  (if
    (setq
      attrib (ssget "x"
            (list '(0 . "ATTDEF") (cons 410 (getvar "ctab")))
         )
    )
     (progn
       (setq attrib (mapcar 'vlax-ename->vla-object
                (vl-remove-if
                  'listp
                  (mapcar 'cadr
                      (ssnamex attrib)
                  )
                )
            )
       )
       (foreach    j attrib
     (if
       (zerop (vla-get-activespace acaddoc))
        (setq act-sp p-space)
        (setq act-sp m-space)
     )
     (setq attrib-txt
        (vla-addtext
          act-sp
          (vla-get-tagstring j)
          (vlax-3d-point
            (vlax-safearray->list
              (vlax-variant-value
            (vla-get-insertionpoint j)
              )
            )
          )
          (vla-get-Height j)
        )
     )
     (vla-put-color attrib-txt (vla-get-color j))
     (vla-put-layer attrib-txt (vla-get-layer j))
     (vla-put-rotation attrib-txt (vla-get-rotation j))
     (vla-put-stylename attrib-txt (vla-get-stylename j))
       )
     )
  )
  (mapcar 'vla-delete attrib)
)
;Функция преобразования блоков в анонимные блоки
(defun block-unnamed ()
  (vlax-for item3 block-collect
    (if
      (and
    (/= (vl-string-elt (vla-get-name item3) 0) 42)
    (not (wcmatch (vla-get-name item3) "AVE*"))
      )
       (vla-put-name item3 "*U")
    )
  )
  (vla-regen acaddoc acAllViewports)
)
;Функция создания единого анонимного блока из всех объектов чертежа и
;и создание его мультивставки со смещением 0.
(defun minsert-block
       (/ nabor-total kp kp-name dxf340 nt masvar total-block)
  (if
    (setq nabor-total
       (ssget "x"
          (list
            '(-4 . "<AND")
            (cons 410 (getvar "ctab"))
            '(-4 . "<NOT")
            '(0 . "VIEWPORT")
            '(-4 . "NOT>")
            '(-4 . "AND>")
          )
       )
    )
     (progn
                    ;удаление из набора объектов являющихся контуром подрезки
                    ;видовых экранов
       (if
     (setq kp
        (ssget "x"
               (list '(0 . "viewport") (cons 410 (getvar "ctab")))
        )
     )
      (progn
        (setq kp-name (mapcar 'cadr (ssnamex kp)))
        (foreach w kp-name
          (if
        (setq dxf340 (assoc 340 (entget w)))
         (progn
           (ssdel (cdr dxf340) nabor-total)
         )            ;progn
          )                ;if
        )                ;foreach
      )                ;progn
       )                ;if
       (setq nt    (mapcar    'vlax-ename->vla-object
            (mapcar 'cadr (ssnamex nabor-total))
        )
       )
       (setq masvar (vlax-make-safearray
              vlax-vbobject
              (cons 0 (1- (length nt)))
            )
       )
       (vlax-safearray-fill masvar nt)
       (setq total-block
          (vla-add block-collect
               (vlax-3d-point '(0 0 0))
               "*U"
          )
       )
       (vla-CopyObjects acaddoc masvar total-block)
       (mapcar 'vla-delete nt)
       (if
     (zerop (vla-get-activespace acaddoc))
      (setq act-sp p-space)
      (setq act-sp m-space)
       )
       (vla-AddMInsertBlock
     act-sp
     (vlax-3d-point '(0 0 0))
     (vla-get-name total-block)
     1
     1
     1
     0
     2
     1
     0
     0
       )
     )                    ;progn
  )                    ;if
  (vla-regen acaddoc acAllViewports)
)

Re: Как запретить редактирование, копирование, печать файла?

Эдуард
Можно объяснить принцип действия программы, т.е. что будет ее результатом? А то если с VLisp-ом не в ладах, сложновато разобраться.

Re: Как запретить редактирование, копирование, печать файла?

> Игорь
Принцип действия очень простой.
Программа преобразует все объекты чертежа в каждом
пространстве  в Minsert-вставку анонимного блока со смещением 0.
Такой объект не расчленяется командой explode и не
редактируется командой refedit

Re: Как запретить редактирование, копирование, печать файла?

А простой командой (стереть, копировать и пр.)? Может это и глупый вопрос, но лучше спросить, чем потом сомневаться.
А как обойти защиту?

Re: Как запретить редактирование, копирование, печать файла?

Да, кстати, "обратный ход" возможен? К примеру, чертеж защитили. Отправили. В результате очумелых ручек остался только этот файл, оригинал благополучно удалили.
Дальнейшие действия?

Re: Как запретить редактирование, копирование, печать файла?

> Игорь
После обработки чертеж представляет единый объект.
Его можно скопировать и стереть только целиком.
А что это даст?
Для того чтобы не задавать очевидных вопросов обработайте программой пробный файл.
Если я объясню как обойти защиту теряется смысл
написания программы выложенной выше.

Re: Как запретить редактирование, копирование, печать файла?

Дальнейшие действия?

Остается или повеситься , или написать программу
обратную по действию.:))

Re: Как запретить редактирование, копирование, печать файла?

> Эдуард
У меня возникла такая проблема при использовании про-мы.
У меня есть файл. В нем помимо модели есть ещё 2 листа.
Так вот все элементы, кроме ВЭ, нарисованные на этих двух листах оказались на одном.
Т.е. образовались 2 блока, один с содержимым на первом листе, другой с тем, что было, но пропало, на втором.

Re: Как запретить редактирование, копирование, печать файла?

Изменил функцию с учетом замечаний.
Однако самому теперь непонятно где глючит объектный метод?

(defun minsert-document2 (/ acaddoc block-collect m-space p-space)
  (vl-load-com)
  (setq    acaddoc          (vla-get-ActiveDocument
            (vlax-get-acad-object)
              )
    block-collect (vla-get-blocks acaddoc)
    m-space          (vla-get-modelspace acaddoc)
    p-space          (vla-get-PaperSpace acaddoc)
    old-layer     (getvar "clayer")
    old-color     (getvar "cecolor")
    old-ctab      (getvar "ctab")
  )
  (mapcar 'setvar
      '("clayer" "cecolor" "celtype")
      '("0" "BYLAYER" "BYLAYER")
  )
  (vla-startundomark acaddoc)
  (xref-bind2)
  (block-unnamed2)
  (vla-purgeall acaddoc)
  (vlax-for item4 (vla-get-layouts acaddoc)
    (vla-put-activelayout acaddoc item4)
    (attribute-text2)
    (minsert-block2)
  )
  (vla-endundomark acaddoc)
  (mapcar 'setvar
      '("clayer" "cecolor" "ctab")
      (list old-layer old-color old-ctab)
  )
  (princ)
)
(defun xref-bind2 (/ xrefname)
  (vlax-for item block-collect
    (if
      (equal (vla-get-IsXRef item) :vlax-true)
       (setq xrefname (cons (vla-get-name item) xrefname))
    )
  )
  (if xrefname
    (progn
      (foreach i xrefname
    (vla-bind (vla-item block-collect i) :vlax-false)
      )
    )
  )
  (vla-update (vlax-get-acad-object))
  (princ)
)
(defun attribute-text2 (/ attrib act-sp attrib-txt)
  (if
    (setq
      attrib (ssget "x"
            (list '(0 . "ATTDEF") (cons 410 (getvar "ctab")))
         )
    )
     (progn
       (setq attrib (mapcar 'vlax-ename->vla-object
                (vl-remove-if
                  'listp
                  (mapcar 'cadr
                      (ssnamex attrib)
                  )
                )
            )
       )
       (foreach    j attrib
     (if
       (zerop (vla-get-activespace acaddoc))
        (setq act-sp p-space)
        (setq act-sp m-space)
     )
     (setq attrib-txt
        (vla-addtext
          act-sp
          (vla-get-tagstring j)
          (vlax-3d-point
            (vlax-safearray->list
              (vlax-variant-value
            (vla-get-insertionpoint j)
              )
            )
          )
          (vla-get-Height j)
        )
     )
     (vla-put-color attrib-txt (vla-get-color j))
     (vla-put-layer attrib-txt (vla-get-layer j))
     (vla-put-rotation attrib-txt (vla-get-rotation j))
     (vla-put-stylename attrib-txt (vla-get-stylename j))
       )
     )
  )
  (mapcar 'vla-delete attrib)
)
                    
(defun block-unnamed2 ()
  (vlax-for item5 block-collect
    (if
      (and
    (/= (vl-string-elt (vla-get-name item5) 0) 42)
    (not (wcmatch (vla-get-name item5) "AVE*"))
      )
       (vla-put-name item5 "*U")
    )
  )
  (vla-regen acaddoc acAllViewports)
)
                    (defun minsert-block2
       (/ nabor-total kp kp-name dxf340 nt masvar total-block)
  (if
    (setq nabor-total
       (ssget "x"
          (list
            '(-4 . "<AND")
            (cons 410 (getvar "ctab"))
            '(-4 . "<NOT")
            '(0 . "VIEWPORT")
            '(-4 . "NOT>")
            '(-4 . "AND>")
          )
       )
    )
     (progn
                    
       (if
     (setq kp
        (ssget "x"
               (list '(0 . "viewport") (cons 410 (getvar "ctab")))
        )
     )
      (progn
        (setq kp-name (mapcar 'cadr (ssnamex kp)))
        (foreach w kp-name
          (if
        (setq dxf340 (assoc 340 (entget w)))
         (progn
           (ssdel (cdr dxf340) nabor-total)
         )            ;progn
          )                ;if
        )                ;foreach
      )                ;progn
       )                ;if
       (setq nt    (mapcar    'vlax-ename->vla-object
            (mapcar 'cadr (ssnamex nabor-total))
        )
       )
       (setq masvar (vlax-make-safearray
              vlax-vbobject
              (cons 0 (1- (length nt)))
            )
       )
       (vlax-safearray-fill masvar nt)
       (setq total-block
          (vla-add block-collect
               (vlax-3d-point '(0 0 0))
               "*U"
          )
       )
       (vla-CopyObjects acaddoc masvar total-block)
       (mapcar 'vla-delete nt)
       (entmake    (list (cons 0 "INSERT")
              (cons 100 "AcDbMInsertBlock")
              (cons 2 (vla-get-name total-block))
              '(8 . "0")
              (cons 62 256)
              '(10 0 0 0)
              (cons 70 2)
              (cons 71 1)
              (cons 44 0.0)
              (cons 45 0.0)
        )            ; list
       )                ; entmake
     )                    ;progn
  )                    ;if
  (vla-regen acaddoc acAllViewports)
)

Re: Как запретить редактирование, копирование, печать файла?

Вешаться что-то не хочется, хотя с такой тещей....
Ну, уж нет! Фиг тебе! Принципиально не повешусь. (это я к теще обращаюсь, если кто не понял).
А если серьезно, нет никакого способа вернуть творение в первоначальный вариант?
Как обойти эту защиту?

Re: Как запретить редактирование, копирование, печать файла?

Подскажите чайнику :)
1)а в какой файл добавить текст этих програмок?
2)с автокада к ним обращаться по имени, которое  в скобках (/.....)?

Re: Как запретить редактирование, копирование, печать файла?

1. Сохраняешь программу в файл с расширением .lsp (например, minsert-document2.lsp)
1. Загружаешь рисунок.
2. В меню Tools(Сервис) выбираешь Load Application (Приложения)
3. Появится меню выбора файла. Выбираешь его и жмешь Load (Загрузить)
4. Если всё правильно, то в командной строке будет подтверждение о загрузке.
5. В командной строке вбиваешь (minsert-document2) со скобками
И наслаждаешься...

Re: Как запретить редактирование, копирование, печать файла?

У меня прога не запускается:

Command: (minsert-document2)
; error: ActiveX Server returned an error: Элемент не найден

Может проблема в том, что в чертеже есть объекты спдс графикс?