找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1332|回复: 13

[其他]:有人想要我们不想给的图形文件?如此处理一下再给他

[复制链接]
发表于 2003-3-20 19:34:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;| 2003/3/19

  2.     Locking AutoCAD LINEs by converting LINES into spacebar content text with underline and TXT.SHX style. Using the underline to simulate the native lines. Design Idea by Yota Masaru

  3.     Each version of AutoCAD has the same and most common text style file "TXT.SHX", so the underline texts can be displayed normally in most all AutoCAD platform. By doing so, the end point of lines can NOT be osnap by any AutoCAD (assistant) commands or methods.

  4.     To convert back the underlines into common lines, we MUST run AutoCAD WMFOUT and WMFIN to make a back converting operation. Even in this case, the proper location can NOT be revived 100%.

  5. =======================================================================================================

  6. 转换直线为空格的下划线 版本0.1Alpha by KozMos Inc.
  7.     使用TXT.SHX字体的空格的下划线来代替文本,用户将无法捕捉到准确的直线端点,也无法进行普通方式的改动,在一般情况下可以限制用户对图形的进一步修改。

  8.     为保持程序的简单化,本程序仅仅处理直线,至于哪些复杂实体需要转换成直线由用户手动解决,本程序不作处理。

  9.     本程序全部采用AutoLISP函数功能,适用于所有版本的AutoCAD。

  10.     注意:不要处理虚线。这样处理过的图形,无法精确地转换回来。只有使用模拟的方法将图形转换回来,方法是将图形WMFOUT后再导入,不过这样处理后,图形的准确度会降低。

  11. |;
  12. (Defun C:XLock (/ txt2line mkstyle mkblock cmdecho sset dxf8 n)
  13.   (Defun txt2line (Obj / DXF10 DXF11 DXF8 DXF62 Scale Rtn)
  14.     (setq DXF8        (cdr (assoc 8 (entget Obj)))
  15.           DXF10        (cdr (assoc 10 (entget Obj)))
  16.           DXF11        (cdr (assoc 11 (entget Obj)))
  17.           DXF62        (cdr (assoc 62 (entget Obj)))
  18.           Scale        (/ (distance DXF10 DXF11) 1.0)
  19.     )
  20.     (if        (null DXF62)
  21.       (setq DXF62 (cdr (assoc 62 (tblsearch "Layer" DXF8))))
  22.     )
  23.     (if        (entmake (list (cons 0 "INSERT")
  24.                        (cons 2 "TXT2LINE")
  25.                        (cons 8 "0")
  26.                        (cons 10
  27.                              (polar DXF10
  28.                                     (angle DXF10 DXF11)
  29.                                     (* 0.5 (distance DXF10 DXF11))
  30.                              )
  31.                        )
  32.                        (cons 41 Scale)
  33.                        (cons 42 Scale)
  34.                        (cons 42 1.0)
  35.                        (cons 50 (angle DXF10 DXF11))
  36.                  )
  37.         )
  38.       (progn
  39.         (entdel Obj)
  40.         (command "_.Explode" (entlast))
  41.         (command "_.Change" (ssget "p") "" "_P" "_C" DXF62 "")
  42.       )
  43.     )
  44.   )
  45.   (Defun mkstyle (/ Rtn)
  46.     (if        (null (setq Rtn (tblsearch "Style" "XLOCK")))
  47.       (progn
  48.         (command "_.Style" "XLOCK" "TXT.SHX")
  49.         (while (/= (getvar "CmdNames") "") (command ""))
  50.       )
  51.     )
  52.     (setq Rtn (tblsearch "Style" "XLOCK"))
  53.     Rtn
  54.   )
  55.   (Defun mkblock (/ Rtn)
  56.     (if        (null (setq Rtn (tblsearch "Block" "TXT2LINE")))
  57.       (progn
  58.         (entmake (list (cons 0 "BLOCK")
  59.                        (cons 2 "TXT2LINE")
  60.                        (list 10 0.0 0.0 0.0)                       
  61.                        (cons 70 2)
  62.                  )
  63.         )
  64.         (entmake (list (cons 0 "TEXT")
  65.                        (cons 1 "%%U ")
  66.                        (cons 7 "XLOCK")
  67.                        (cons 8 "0")
  68.                        (list 10 -0.35 0.2 0.0)
  69.                        (cons 40 1.0)
  70.                        (cons 41 1.0)
  71.                        (cons 50 0.0)
  72.                        (cons 71 0)
  73.                        (cons 72 0)
  74.                        (cons 73 0)
  75.                  )
  76.         )
  77.         (entmake (list (cons 0 "ENDBLK")))
  78.       )
  79.     )
  80.     (setq Rtn (tblsearch "Block" "TXT2LINE"))
  81.     Rtn
  82.   )

  83.   (setq cmdecho (getvar "cmdecho"))
  84.   (setvar "cmdecho" 0)
  85.   (if (and (mkstyle)
  86.            (mkblock)
  87.       )
  88.     (progn
  89.       (princ "\n 转换直线为空格的下划线 版本0.1Alpha by KozMos Inc.\n 版权所有(1994-2003) 保留所有权利\n\n 请选择转换的直线 <退出>:")
  90.       (if (setq sset (ssget (list (cons 0 "LINE"))))
  91.         (progn
  92.           (setq n -1)
  93.           (repeat (sslength sset)
  94.             (princ (strcat "\r 正在转换 "
  95.                            (itoa (1+ (setq n (1+ n))))
  96.                            "/"
  97.                            (itoa (sslength sset))
  98.                            "; 请稍候......"
  99.                    )
  100.             )
  101.             (txt2line (ssname sset n))
  102.           )
  103.         )
  104.       )
  105.       (princ " 转换完成!")
  106.     )
  107.   )
  108.   (setvar "cmdecho" cmdecho)
  109.   (princ)
  110. )
  111. ;|
  112. Codes for transfer between "%%U " and " "
  113. XL0: "%%U " => " "
  114. XL1: " " => "%%U "
  115. |;
  116. (Defun C:XL0 (/ sset n ent)
  117.   (if (setq sset
  118.              (ssget "x"
  119.                     (list (cons 0 "TEXT") (cons 1 "%%U ") (cons 7 "XLOCK"))
  120.              )
  121.       )
  122.     (progn
  123.       (setq n -1)
  124.       (repeat (sslength sset)
  125.         (setq ent (entget (ssname sset (setq n (1+ n))))
  126.               ent (subst (cons 1 " ") (assoc 1 ent) ent)
  127.         )
  128.         (entmod ent)
  129.       )
  130.     )
  131.   )
  132.   (princ)
  133. )
  134. (Defun C:XL1 (/ sset n ent)
  135.   (if (setq
  136.         sset (ssget "x"
  137.                     (list (cons 0 "TEXT") (cons 1 " ") (cons 7 "XLOCK"))
  138.              )
  139.       )
  140.     (progn
  141.       (setq n -1)
  142.       (repeat (sslength sset)
  143.         (setq ent (entget (ssname sset (setq n (1+ n))))
  144.               ent (subst (cons 1 "%%U ") (assoc 1 ent) ent)
  145.         )
  146.         (entmod ent)
  147.       )
  148.     )
  149.   )
  150.   (princ)
  151. )
  152. |;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-3-20 21:43:29 | 显示全部楼层
呵呵,有创意!就是交点的地方处理得不好。
还可以将圆转换成字母“O”,我试了一下,当宽高比在1.3是字母“O”(大写)接近于圆。文字采用“MC”对齐方式,插入点就在圆心上。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-21 05:22:00 | 显示全部楼层
嘿嘿!好玩!
又有一个加密的东东了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-21 20:47:34 | 显示全部楼层
我正在做下一步的加密的资料搜集工作,初步的想法是:给某个“直线”加一个永久的反应器,存盘前将所有的文本转换成空,打开图形时,反应器函数自动将空格文本转换成下划线,这样可以限制图形的打开,如果当块插入时,没有内容。

关于交点不精确的问题,我在我的笔记本上测试没有问题,或者型文件不匹配?

实验试验附件的字型。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-3-22 12:13:13 | 显示全部楼层
知道了为什么,回到直线是很容易的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-22 16:50:10 | 显示全部楼层
程序有BUG,修改了一下:
......
(Defun txt2line (Obj / DXF10 DXF11 DXF8 DXF62 Scale Rtn)
    (setq DXF8        (cdr (assoc 8 (entget Obj)))
          DXF10        (cdr (assoc 10 (entget Obj)))
          DXF11        (cdr (assoc 11 (entget Obj)))
          DXF62        (cdr (assoc 62 (entget Obj)))
          Scale        (/ (distance DXF10 DXF11) 1.0)
    )   
    (if        (or (null DXF62) (= DXF62 0)) ;;;改动位置,防止BYBLOCK颜色号错误
......


我尝试了一下进一步的处理,不过还没有成功,因为我从来没有用过反应器。

基本的设计思路是:
1] 将所有的直线转换成空格(使用已有XLock功能)
2] 给当前的图形加两个反应器,分别的作用如下:
   2-1:不允许向图形中增加或删除数据(使用vlr-acbd-reactor并激活所有的反映类型)
        如果发生,则调用命令直接退出AutoCAD。
   2-2:打开图形时自动将空格转换成%%U ,这样就能正常显示图形了。

   之所以要加2-2的反应器是为了防止将图形当作块插入。2-1的反应器是数据库的,当
图形作为块被插入另外的图形时可能会失效,这样我们的目的就达不到了。

   由于两个反应器需要两个不同的回调函数,所以我们还需要定义。为了保密,我们需要
把它编译成VLX文件。为了保证这个VLX文件被AutoCAD调入,我们需要同图形文件一起提供
一个acad.lsp文件,强制加载我们的VLX文件。
   
    当然,没有这两个程序文件也行,但是图形打开后什么也看不见。至少我们转换的直线
看不见。

   我调试的结果是AutoCAD打开文件时提示错误:
; error: VLISP: internal: Document application(.VLX) not found
; error: VLISP: internal: Document application(.VLX) not found
; error: no function definition: C:ACET-TURNONLINES

AutoCAD menu utilities loaded.
; error: no function definition: C:ACET-QUITALL

; error: no function definition: C:ACET-QUITALL
; error: no function definition: C:ACET-QUITALL
; error: no function definition: C:ACET-QUITALL

还没有找到原因,希望对反应器有经验的朋友研究一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-23 08:21:54 | 显示全部楼层
创意很好!严重支持!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-3-24 20:46:39 | 显示全部楼层
我研究了一下CADLOCK,发现实际上要真正达到我们所谓的加密的目的,我们必须使用ARX。

CADLOCK的原理是将指定控制的AutoCAD命令屏蔽完全掉,包括Ctrl-C/Ctrl-V,而使用LISP
我们只能模拟似的将命令Undefine,但这样只能吓唬一下初学的人。即使用了永久反应器,
也可以被清除(只是一行代码就可以了),所以要达到和CADLOCK类似的功能,我想我们需
要使用ARX。仅仅靠LISP本身无法对AutoCAD进行低层次的操作。

我想大家如果认为这个“加密”的功能真的很有用,可以去要求晓东加一个可以屏蔽AutoCAD
编辑命令的函数。我的VC水平不行,这个函数功能我搞不来。

附带说明一下这个函数需要包含的功能:

1]:自动将某些图形“加密”的数据,如转换成空格的直线,或者将已经保存在字典中的已经
    被“加密”实体的数据恢复成原始的实体。这样可以防止图形被人当作块插入时、或者用
    什么格式转换软件转换版本、类型而导致“加密”失败。那样的操作,它将无法得到被我
    们“加密”的数据。CADLOCK做到类似这点功能的是靠DWX文件只能由她自身打开,别人打
    不开。但这样不好的地方是要解释给别人听这个文件是怎么使,别人一烦,还是要DWG。

2]:恢复“加密”的数据后,屏蔽AutoCAD编辑命令。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-3-25 02:01:24 | 显示全部楼层
我们这边现在规划局要求把设计文件刻成光盘给他们存档,不给又不行,给了又怕被“偷”,期待着加密工具的出现~~~!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-2 19:44:56 | 显示全部楼层
希望能共享,但要注明出处。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-2 19:56:03 | 显示全部楼层
最初由 晨寒羽良 发布
[B]我们这边现在规划局要求把设计文件刻成光盘给他们存档,不给又不行,给了又怕被“偷”,期待着加密工具的出现~~~!! [/B]


请问被“偷”是什么意思?我只知道有的设计在没拿到钱之前,是不好交出去的,如果钱已经到手,都两清了,再加密还有什么意义吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-4-2 22:56:16 | 显示全部楼层
我想所谓的“偷”指别人拿你的数据,改改名字、换换图框、图签
稍微改动处理一下,他的工程图就完成了。你却没有¥
====================================================
试验试验这个文件,看能编辑吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-6 14:49:03 | 显示全部楼层
mmmm把原图贴出来才好对比。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-4-8 20:12:29 | 显示全部楼层
不存在原图的问题,只要两个acaddoc.*文件在图形文件的同一个目录,程序会自动将空格转换成线。否则,图形基本上是空的。
我在程序中锁定了一些编辑的命令。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 19:01 , Processed in 0.353074 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表