找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1938|回复: 16

[讨论]:请教各位一个关于动态显示的问题

[复制链接]
发表于 2004-9-14 15:39:19 | 显示全部楼层 |阅读模式

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

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

×
在lisp中能实现动态显示吗?比我要写入一个文字,再还没有指定文字输写点时,让文字随光标的移动显示在光标处。或是画一个矩形,圆,等什么的,让它在没指定插入点前随光标的移动显示在光标处。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-9-14 19:00:30 | 显示全部楼层
结合grread函数 使用entmake和entdel来实现
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-14 19:35:32 | 显示全部楼层
或者用块。。。
[php]
;;;Author: AIDraft  14/9/2004
;;;用法:(DynamicText "Here we go!" 3.0)
(defun DynamicText
       (txtstr height / mspace oldEcho doc txtobj blkdef entnum)
  (vl-load-com)
  (setq oldEcho (getvar "CMDECHO"))
  (setvar "CMDECHO" 0)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq mspace (vla-get-modelspace doc))
  (setq        txtobj
         (vla-addtext mspace txtstr (vlax-3d-point '(0 0 0)) height)
        )
;;;  (command "-purge" "b" "TXT*" "n")
  (setq LOOP T)
  (while LOOP
    (if
      (not (tblsearch
             "BLOCK"
             (setq bkname (strcat "TXT" (itoa (fix (* (random) 10000)))))
             )
           )
       (setq LOOP nil)
       ) ;endif
    )
  (setq blkdef (blk:make-block '(0 0 0) bkname (list txtobj) doc))
  (princ "\n指定文字插入点:")
  (setq entnum (sslength (ssget "x")))
  (command "-insert" (vla-get-name blkdef) pause 1 1 0)
  (if (< entnum (sslength (ssget "x")))
    (command ".explode" (entlast))
    )
  (command "-purge" "b" "TXT*" "n")
  (setvar "CMDECHO" oldEcho)
  )

;BLK:MAKE-BLOCK_______________________________________________
;Creates a block out of list of vla-objects
;Arguments
; 1) insertion point <(x y z)>
; 2) block name <string>
; 3) list of entities as vla-objects
; 4) document object
; 5) Use "*u" as the blockname argument to this function
;    TO MAKE AN UNNAMED BLOCK

(defun blk:make-block (ip blockname vla-objects doc / blkobj sArray)
  (setq
    blkobj (vla-add (vla-get-blocks doc) (vlax-3d-point ip) blockname)
    sArray
           (vlax-safearray-fill
             (vlax-make-safearray
               vlax-vbObject
               (cons 0 (1- (length vla-objects)))
               )
             vla-objects
             )
    )
  (vla-copyobjects doc sArray blkobj)
  blkobj
  )
;;
(defun random ()
  (- (* 1000000 (getvar "date")) (fix (* 1000000 (getvar "date"))))
  )[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-14 20:45:04 | 显示全部楼层
谢谢两位的指点,只是我不太会VL,所以有些还看不懂。
不过我又学到了东西。谢谢。
不知道哪位有没有纯lisp的例子。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-14 22:19:22 | 显示全部楼层
最初由 aidraft 发布
[B]或者用块。。。
[php]
;;;Author: AIDraft  14/9/2004
;;;用法:(DynamicText "Here we go!" 3.0)
(defun DynamicText
       (txtstr height / mspace oldEcho doc txtobj blkdef entnum)
  (vl-load-com)
... [/B]


更简单一点的,可以选择或先造出实体后,用 ctrl+x (剪切),ctrl+v(粘贴)来实现动态定位。要定制移动基点的,可以用_copybase

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

使用道具 举报

发表于 2004-9-15 07:36:03 | 显示全部楼层
Good idea!
Move? I have tried, but I cannot get rid of the rubber-band line...

It can be so simple. That's amazing!
[php](defun DynText  (txtstr height)
  (entmake (list
             '(0 . "TEXT")
             '(100 . "AcDbEntity")
             (cons 8 (getvar "CLAYER"))
             '(100 . "AcDbText")
             '(10 0.0 0.0 0.0)
             (cons 40 height)
             (cons 1 txtstr)
             '(50 . 0.0)
             '(41 . 1.0)
             '(51 . 0.0)
             (cons 7 (getvar "TEXTSTYLE"))
             '(71 . 0)
             '(72 . 0)
             '(11 0.0 0.0 0.0)
             '(210 0.0 0.0 1.0)
             '(100 . "AcDbText")
             '(73 . 0)
             ) ;list
           ) ;entmake
  (command "copyclip" (entlast) "")
  (entdel (entlast))
  (command "pasteclip" pause)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-9-17 10:07:14 | 显示全部楼层
对呀,请wkai斑竹说说,grread怎么样结合entdel entmake使用 ?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-17 11:26:37 | 显示全部楼层
结合grread entdel  entmake  实现动态创建TEXT的代码如下

  1. (DEFUN ddtxt (txt height / el run n)
  2. (DEFUN        mktxt (txt height pt)
  3.   (entmake (LIST
  4.               '(0 . "TEXT")
  5.               (CONS 10 pt)
  6.               (CONS 40 height)
  7.               (CONS 1 txt)
  8.               (CONS 7 (GETVAR "TEXTSTYLE"))
  9.              )

  10.   )
  11. )
  12. (SETQ run T)
  13. (WHILE        (AND run (SETQ n (GRREAD T 1)))
  14.   (COND        ((= 5 (CAR n));;;移动鼠标
  15.         [color=red] (AND el (ENTDEL el))
  16.          (mktxt txt height (CADR n))[/color]
  17.          (SETQ el (ENTLAST))
  18.         )
  19.         ((= 3 (CAR n));;;点击左键
  20.          (AND el (ENTDEL el))
  21.          (mktxt txt height (CADR n))
  22.          (SETQ run nil)
  23.         )
  24.   )
  25. )
  26. )

  27. (defun c:tt()
  28. (ddtxt (getstring "\n文字内容:") (/ (getvar "viewsize")10))
  29. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2004-9-17 12:14:21 | 显示全部楼层
[iframe h=600]http://www.xdcad.net/forum/showthread.php?postid=1145008#post1145008[/iframe]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-9-20 09:59:33 | 显示全部楼层
俺也看到了,也跟着谢谢斑竹吧,不过,问题是要显示的entity多就得entmake很多,然后entdel,这样是不是很占用机器资源?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-9-20 21:23:26 | 显示全部楼层
最初由 urljit 发布
[B]俺也看到了,也跟着谢谢斑竹吧,不过,问题是要显示的entity多就得entmake很多,然后entdel,这样是不是很占用机器资源? [/B]


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

使用道具 举报

发表于 2004-9-21 09:50:31 | 显示全部楼层
我是利用插入块来实现的。
贴个例子吧。这是我写了用在鼠标中键上的。

  1. (defun C:%%1306@75(/ ss lay os)
  2.   (princ (strcat"\n***均布钢筋自动标注软件V030225  葛磊***"))
  3.   (princ (strcat"\n        [共享软件,版权所有]"))
  4.   (princ)
  5.   (terpri)
  6.   (setvar "CMDECHO" 0)
  7.   (setq os (getvar "OSMODE"))
  8.   (setvar "OSMODE" (if (> os 16383) os (+ 16384 os)))
  9.   (setq lay (getvar "clayer"))

  10.   (if (or (= nil (tblsearch "layer" "钢筋标注"))
  11.           (/= (cdr (assoc 8 (tblsearch "layer" "钢筋标注"))) 0)
  12.       )
  13.       (command "layer" "m" "钢筋标注" "c" "255" "钢筋标注" "")
  14.       (command "layer" "s" "钢筋标注" "" "")
  15.   )

  16.   (if (or (= nil (tblsearch "style" "standard"))
  17.           (/= (cdr (assoc 40 (tblsearch "style" "standard"))) 0)
  18.       )
  19.       (command "STYLE" "standard" "romans" "0" ".8" "0" "n" "n" "n")
  20.   )
  21.   (setq ss (ssadd))
  22.   (command "text" "s" "standard" "j" "c" "0,0" "250" "0" "%%1306@75")
  23.   (setq ss (ssadd (entlast) ss))  
  24.   (command "block" "i6-75" "0,0" ss "")
  25.   (command "_insert" "i6-75" pause "" "" "")
  26.   (command "explode" "l")
  27.   (command "purge" "b" "i6-75" "n")
  28.   (command "layer" "s" lay "")
  29.   (setvar "osmode" os)
  30.   (princ (strcat"\n***均布钢筋自动标注软件V030225  葛磊***"))
  31.   (princ (strcat"\n        [共享软件,版权所有]"))
  32.   (princ)
  33. )

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

使用道具 举报

已领礼包: 3719个

财富等级: 富可敌国

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 19:51 , Processed in 0.235374 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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