在屏幕上显示对象
我想画一个定义了宽度和长度的矩形,但用户选择插入点和旋转。但问题是,我希望用户在指向插入点时看到对象,就像插入块一样 您应该使用第一个点作为第二次交互的参数(可以使用GETCORNER而不是GETPOINT):(setq Point1st (getpoint "\First corner: ")
Point2nd (getcorner Point1st "\nSecond corner: "))
当做
米尔恰 我知道这一点,但当您选择第一个或第二个点时,不会显示对象,我希望如此 对不起,我想我误读了你的第一句话。你想要预览一个自定义形状和他的方向吗?
为此,您应该检查GRREAD、GRDRAW和GRVECS函数-您将在论坛上找到一些很棒的示例。
当做
米尔恰 我认为这可以通过使用grread实现
GRREAD使用示例-让我们分享
在屏幕上显示光标附近的任何文本
http://www.theswamp.org/index.php?action=search2 是的,这正是我想要的,非常感谢 grread函数将暂停以获取某种形式的用户输入,然后返回有关检测到的用户输入的信息,无论是光标位置、鼠标单击还是键盘输入。
在while循环中使用时,您可以连续监视用户输入并相应地更新显示。
但是,grread功能的一个主要缺点是,在暂停以供用户输入时,所有标准AutoCAD功能都被禁用。这意味着用户无法访问对象捕捉、跟踪、正交模式等。对于大多数绘图操作来说,仅为了实现奇特效果而进行这种权衡通常不是一种选择。
任务的另一种选择可能是使用内置RECTANG命令提供的各种选项,例如:
(defun c:MyRec ( / p1 )
(if (setq p1 (getpoint "\nSpecify First Corner: "))
(progn
(command "_.rectang" "_non" p1 "_D" 4 2)
(while (= 1 (logand 1 (getvar 'CMDACTIVE)))
(command pause)
)
)
)
(princ)
) (defun C:TEST ( / ss len wd el)
(if (not (tblsearch "BLOCK" "MyRectangle"))
(progn
(setq ss (ssadd)
ss (ssadd (entmakex '((0 . "LINE") (10 0.0 0.0 0.0) (11 1.0 0.0 0.0))) ss)
ss (ssadd (entmakex '((0 . "LINE") (10 1.0 0.0 0.0) (11 1.0 1.0 0.0))) ss)
ss (ssadd (entmakex '((0 . "LINE") (10 1.0 1.0 0.0) (11 0.0 1.0 0.0))) ss)
ss (ssadd (entmakex '((0 . "LINE") (10 0.0 1.0 0.0) (11 0.0 0.0 0.0))) ss)
)
(command "BLOCK" "MyRectangle" '(0 0 0) ss "")
)
)
(if
(and
(setq len (getdist "\Length: "))
(setq wd (getdist "\Width: "))
)
(progn
(setq el (entlast))
(command "INSERT" "MyRectangle" "X" len "Y" wd)
(while (= 1 (getvar 'cmdactive))
(command pause)
)
(if (not (eq el (entlast)))
(command "EXPLODE" "L" ""
"PEDIT" "M" "P" "" "Y" "J" "" "")
)
)
)
(princ)
) 不错,斯特凡。
如果你不介意,我将发表一些评论:
[列表=1]
[*]尝试禁用CMDECHO以对提示符产生干净的影响。
[*]为了使这更具活力,可以先要求尺寸,然后按比例构建“图标”;当不再有用时清除它。
[*]使用EXPLODE命令时,无需关闭选择周期。
(command "EXPLODE" "L" "")
问候,
米尔恰 好主意,Stefan,这是对你的代码的一点改进,希望你不介意:
(defun c:brec
( / *error* _getdist en va vr )
;; Block Rectangle
;; By Lee Mac, based on ideas by Stefan BMR
(defun *error* ( msg )
(if va (mapcar 'setvar vr va))
(if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\nError: " msg))
)
(princ)
)
(if (null (tblsearch "BLOCK" "$MyRectangle$"))
(progn
(entmake
'(
(0 . "BLOCK")
(8 . "0")
(2 . "$MyRectangle$")
(10 0.0 0.0 0.0)
(70 . 0)
)
)
(entmake
'(
(0 . "LWPOLYLINE")
(100 . "AcDbEntity")
(100 . "AcDbPolyline")
(8 . "0")
(90 . 4)
(70 . 1)
(10 0.0 0.0)
(10 1.0 0.0)
(10 1.0 1.0)
(10 0.0 1.0)
)
)
(entmake
'(
(0 . "ENDBLK")
(8 . "0")
)
)
)
)
(defun _getdist ( a b c )
(set a
(cond
(
(getdist
(strcat b " <"
(rtos (set a (cond ( (eval a) ) ( c )))) ">: "
)
)
)
( (eval a) )
)
)
)
(setq vr '(CMDECHO QAFLAGS)
va(mapcar 'getvar vr)
)
(mapcar 'setvar vr '(0 1))
(_getdist '*len* "\nSpecify Length" 1.0)
(_getdist '*wid* "\nSpecify Width"1.0)
(setq en (entlast))
(command "_.-insert" "$MyRectangle$" "_X" *len* "_Y" *wid*)
(princ "\nSpecify Insertion Point: ")
(setvar 'CMDECHO 1)
(while (= 1 (logand 1 (getvar 'CMDACTIVE)))
(command pause)
)
(setvar 'CMDECHO 0)
(if (not (equal en (setq en (entlast))))
(command "_.explode" en "")
)
(mapcar 'setvar vr va)
(princ)
)
页:
[1]
2