夏生生
发表于 2021-12-14 20:36:22
lee50310 发表于 2021-12-14 18:50
是這種效果嗎?
滑鼠拖曳 文字都在 視口中心和四個角
是的,在WCS的情况下我可以做到这个效果,但是在XY顺时针UCS、3DO情况、还有PLAN为UCS,坐标系为wcs的情况下,我做不到
mokson
发表于 2021-12-15 09:48:01
guosheyang 发表于 2021-12-13 12:19
你是想要 这个控件标题文字 这种 一直显示在那儿哈
我也一直想要这样的效果,但是想不出来如何实现。
xyp1964
发表于 2021-12-15 21:42:42
自定义函数处理
rocking2008
发表于 2021-12-16 08:43:07
这个功能是为了防止图纸资料被别人盗用,做的类似于水印的效果吧。但程序与图纸是分开的呀,难道能把程序内置到图纸里面?
mikewolf2k
发表于 2021-12-16 09:18:05
现在的方案似乎都是在指定位置放置文字对象,移动屏幕后更新。是不是可以换个思路,四角放一个不可关闭、背景同色的窗体,文字在该窗体上,也就相对屏幕固定了。
lijiao
发表于 2021-12-16 09:55:22
mikewolf2k 发表于 2021-12-16 09:18
现在的方案似乎都是在指定位置放置文字对象,移动屏幕后更新。是不是可以换个思路,四角放一个不可关闭、背 ...
我也想到了这个办法,在四个角放置四个非模态的窗口,利用API隐藏窗口的标题栏,并且让窗口透明,然后再定义一个反应器,当CAD窗口发生变化时,改变四个窗口的位置
xtjd
发表于 2021-12-16 10:32:30
夏生生
发表于 2021-12-16 18:03:14
xtjd 发表于 2021-12-16 10:32
可以指点一下坐标转换部分吗?谢谢
夏生生
发表于 2021-12-16 22:07:01
xtjd 发表于 2021-12-16 10:32
下面的代码,在非3do的情况下都可以,3do的情况下就乱了,请问您是怎么做到的?方便指导一下吗?
(defun c:temp (/ CEN D2W GR1 GR2
H LOOP OBJL PT SC
SCR STR WB WH xty-make-text@w
xty-put-dxf xty-put-dxfl
)
(setqloop t
pt '(0 0 0)
str"特定字符"
objl (list (xty-make-text@w str 0 0 pt pt 1 1 0 "standard")
(xty-make-text@w str 0 0 pt pt 1 1 0 "standard")
(xty-make-text@w str 0 0 pt pt 1 1 0 "standard")
(xty-make-text@w str 0 0 pt pt 1 1 0 "standard")
(xty-make-text@w str 0 0 pt pt 1 1 0 "standard")
) ;_画五个临时文字
objl (mapcar 'vlax-ename->vla-object objl)
)
(while loop
(setq gr1 (grread t 15 1)
gr2 (cadr gr1)
gr1 (car gr1)
cen (trans (getvar "VIEWCTR") 1 2)
wh(getvar "VIEWSIZE")
scr (getvar "SCREENSIZE")
sc(/ wh (cadr scr))
wb(* 0.5 (* sc (car scr)))
wh(* 0.5 wh)
h (* 30 sc)
d2w (append
(mapcar'append
(mapcar
(function (lambda (v) (trans v 0 2 t)))
'((1. 0. 0.) (0. 1. 0.) (0. 0. 1.))
)
(mapcar 'list (trans '(0 0 0) 2 0))
)
'((0. 0. 0. 1.))
) ;_DCS->wcs转换矩阵
)
(xty-put-dxfl
(vlax-vla-object->ename (car objl))
'(40 72 73 10 11)
(list h
0
0
(mapcar '- cen (list wb wh))
(mapcar '- cen (list wb wh))
)
)
(xty-put-dxfl
(vlax-vla-object->ename (cadr objl))
'(40 72 73 10 11)
(list h
2
0
(mapcar '+ cen (list wb (- wh)))
(mapcar '+ cen (list wb (- wh)))
)
)
(xty-put-dxfl
(vlax-vla-object->ename (caddr objl))
'(40 72 73 10 11)
(list h
2
3
(mapcar '+ cen (list wb wh))
(mapcar '+ cen (list wb wh))
)
)
(xty-put-dxfl
(vlax-vla-object->ename (cadddr objl))
'(40 72 73 10 11)
(list h
0
3
(mapcar '+ cen (list (- wb) wh))
(mapcar '+ cen (list (- wb) wh))
)
)
(xty-put-dxfl
(vlax-vla-object->ename (last objl))
'(40 72 73 10 11)
(list h 1 2 cen cen)
)
(foreach n objl (vla-TransformBy n (vlax-tMatrix d2w)))
(cond ((= 3 gr1)
(setq loop nil)
(foreach n objl (vla-delete n))
)
)
)
(defun xty-make-text@w (tt t72 t73 t10 t11 th tw t50 tst /)
(entmakex (list '(0 . "text")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 t10)
(cons 1 tt)
(cons 40 th)
(cons 41 tw)
(cons 7 tst)
(cons 72 t72)
(cons 11 t11)
(cons 50 t50)
(cons 73 t73)
)
)
)
(defun xty-put-dxf (en code ch / ent)
(setq ent (entget en))
(if(xty-get-dxf code en)
(entmod (subst (cons code ch) (assoc code ent) ent))
(entmod (append ent (list (cons code ch))))
)
(entupd en)
)
(defun xty-put-dxfl (en code-l ch-l / ent)
(setq ent (entget en))
(foreach n
code-l
(if (xty-get-dxf n en)
(setq ent (subst (cons n (car ch-l)) (assoc n ent) ent))
(setq ent (append ent (list (cons n (car ch-l)))))
)
(setq ch-l (cdr ch-l))
)
(entmod ent)
(entupd en)
)
)
xtjd
发表于 2021-12-17 10:21:26
夏生生 发表于 2021-12-16 22:07
下面的代码,在非3do的情况下都可以,3do的情况下就乱了,请问您是怎么做到的?方便指导一下吗?
3DO也乱;P
紫薯布丁