找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2137|回复: 15

[求助] 关于函数redraw用法

[复制链接]
发表于 2013-6-2 17:45:03 | 显示全部楼层 |阅读模式

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

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

×
  1. (defun c:cala()
  2.        (setvar "cmdecho" 0)
  3.        (setq ent (car (entsel "\n请选择要量测面积的圆和多段线")))
  4.        (while ent
  5.               (redraw ent 3)
  6.               (command "area" "o" ent)
  7.               (setq aa (getvar "area"))
  8.               (princ (strcat "\n实体面积为" (rtos aa 2)))
  9.               (setq old_hh (getvar "textsize"))
  10.               (setq pt (getpoint "\n请选择文字插入点:"))
  11.               (setq hh (getdist pt (strcat "\n文字高度<" (rtos old_hh 2) ">")))
  12.               (if (null hh)(setq hh old_hh))
  13.               (command "text" pt hh 0 (strcat "实体面积为" (rtos aa 2)))
  14.               (setq entb (car (entsel "\n请选择要量测面积的圆和多段线")))
  15.               (if (null entb)(progn (redraw ent 4) (setq ent entb)))
  16.        )
  17.        (princ)
  18. )



请各位版主和高手看看,求实体面积时,怎样用redraw实现选择物体时高亮显示,选择下一个实体时,刚才选择的物体正常显示,新选择的物体高亮显示。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 308个

财富等级: 日进斗金

发表于 2013-6-2 17:51:50 | 显示全部楼层
执行下一循环前加上:(redraw ent 4);取消高亮
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 308个

财富等级: 日进斗金

发表于 2013-6-2 18:03:39 | 显示全部楼层

RE: [code=lisp](defun c:cala()redraw用法

建议文字高度、设置放在循环外,多用entmake

  1. (defun c:tt ()
  2.   (setvar "cmdecho" 0)
  3.   (setq ent (car (entsel "\n请选择要量测面积的圆和多段线")))
  4.   (while ent
  5.     (redraw ent 3)
  6.     (command "area" "o" ent)
  7.     (setq aa (getvar "area"))
  8.     (princ (strcat "\n实体面积为" (rtos aa 2)))
  9.     (setq old_hh (getvar "textsize"))
  10.     (setq pt (getpoint "\n请选择文字插入点:"))
  11.     (setq hh (getdist pt (strcat "\n文字高度<" (rtos old_hh 2) ">")))
  12.     (if (null hh)(setq hh old_hh))
  13.     (command "text" pt hh 0 (strcat "实体面积为" (rtos aa 2)))
  14.     (redraw ent 4)
  15.     (setq ent (car (entsel "\n请选择要量测面积的圆和多段线")))
  16.   )
  17.   (princ)
  18. )

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 18:20:00 | 显示全部楼层
本帖最后由 Lispboy 于 2013-6-2 18:27 编辑

为什么不


  (while (setq ent (car (entsel "\n请选择要量测面积的圆和多段线<退出>:")))
    ......
  )

取消循环里面的 (setq ent (car (entsel "\n请选择要量测面积的圆和多段线<退出>:")))

佟版主说的对,每次循环你都希望修改高度吗?不需要的放到循环外面。
      

点评

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 18:22:58 | 显示全部楼层
本帖最后由 Lispboy 于 2013-6-2 18:24 编辑

另外建议楼主,判断下实体类型,不是曲线类的,过滤掉。要不程序可能有错误情况。
还有,求面积尽量用函数,别用COMMAND, 求面积VLISP有现成的函数 vla-get-area

点评

您好lispboy,怎样判断实体是曲线类型和非曲线类型呀?  详情 回复 发表于 2013-6-2 23:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-2 19:04:05 来自手机 | 显示全部楼层
亮显还可以用highlight方法来自: Android客户端

点评

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

使用道具 举报

 楼主| 发表于 2013-6-2 22:46:03 | 显示全部楼层
本帖最后由 GTJ116600 于 2013-6-2 23:02 编辑

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

使用道具 举报

 楼主| 发表于 2013-6-2 23:04:20 | 显示全部楼层
Lispboy 发表于 2013-6-2 18:22
另外建议楼主,判断下实体类型,不是曲线类的,过滤掉。要不程序可能有错误情况。
还有,求面积尽量用函数 ...

您好lispboy,怎样判断实体是曲线类型和非曲线类型呀?

点评

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

使用道具 举报

 楼主| 发表于 2013-6-2 23:05:24 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2013-6-2 23:07:00 | 显示全部楼层
Free-Lancer 发表于 2013-6-2 19:04
亮显还可以用highlight方法

Free-lancer,您能说的更详细些或给个链接么?

点评

摘自 Help ActvieX and VBAReference 的 Methods 设置给定对象或给定选择集中所有对象的亮显状态。 语法 object.Highlight HighlightFlag Object 所有图形对象, SelectionSet, AttributeReference, Group  详情 回复 发表于 2013-6-3 08:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-2 23:16:22 来自手机 | 显示全部楼层
看help的ActiveX Model 中AcDbCurve类包括 line lightweightpolyline arc circle spline ellipse polyline ,过滤时可以这样 '((0 . "*line,arc,circle,ellipse")), region和hatch(可能没有面积)不属于curve,不能用vlax-curve-getarea,但object都可以用vla-get-area来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-2 23:46:19 | 显示全部楼层
GTJ116600 发表于 2013-6-2 23:04
您好lispboy,怎样判断实体是曲线类型和非曲线类型呀?

得到实体后,
  1. (setq ed (entget e)
  2.         cl (cdr (assoc 0 ed))
  3.         isCurve (wcmatch cl "*line,arc,circle,ellipse")
  4. )

点评

非常感谢Lispboy  详情 回复 发表于 2013-6-3 09:57

评分

参与人数 1D豆 +3 收起 理由
GTJ116600 + 3 热心帮忙奖!

查看全部评分

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

使用道具 举报

发表于 2013-6-3 08:09:54 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-6-3 08:18 编辑
GTJ116600 发表于 2013-6-2 23:07
Free-lancer,您能说的更详细些或给个链接么?

摘自 Help ActvieX and VBAReference 的 Methods

设置给定对象或给定选择集中所有对象的亮显状态。

语法    object.Highlight HighlightFlag

Object   所有图形对象, AttributeReference  Group 使用该方法的对象

HighlightFlag  Boolean[布尔值]; 仅用于输入 TRUE: 对象亮显。FALSE: 消除对象的亮显。

说明 当为对象设置亮显标志后,应调用 Update或 Regen方法以查看更改效果

注意该功能不能返回对象的当前亮显状态。

示例: (摘自 Autolisp葵花宝典)
[pcode=lisp,true]
(defun c:al-highlight ()
   (vl-load-com)  
  (setq util (vla-get-utility  (vla-get-activedocument  (vlax-get-acad-object))))
  (vla-getentity util 'obj 'ip "\nSelect Object: ")
  (vla-Highlight obj 1)
   (princ)
);defun[/pcode]

点评

谢谢Free-Lancer 。  详情 回复 发表于 2013-6-3 09:58

评分

参与人数 1D豆 +5 收起 理由
GTJ116600 + 5 很给力!热心帮忙奖!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2013-6-3 09:57:25 | 显示全部楼层

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

使用道具 举报

 楼主| 发表于 2013-6-3 09:58:39 | 显示全部楼层
Free-Lancer 发表于 2013-6-3 08:09
摘自 Help ActvieX and VBAReference 的 Methods

设置给定对象或给定选择集中所有对象的亮显状态。

谢谢Free-Lancer 。

点评

这个帖子中的 Redraw 和 LZ 的要求类似,两次 redraw 就正常显示 http://www.xdcad.net/forum/forum.php?mod=redirect&goto=findpost&ptid=667923&pid=3449439  详情 回复 发表于 2013-6-3 19:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 12:22 , Processed in 0.233064 second(s), 66 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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