Hippe013 发表于 2022-7-6 10:41:18

编辑的带孔LISP

我收到李·麦克的Lisp程序。无聊的lsp
 
代码如下:
 

(defun c:bored ( / cir cnt gr lst n d )
;; © Lee Mac 2010
(setq lst (list (getvar 'viewctr) (getvar 'viewctr)) cnt 0)

(while (eq 5 (car (setq gr (grread nil 13 0))))
   (redraw)
   (setq cir nil n 0 lst (append lst (list (last lst) (cadr gr)))
         cnt (1+ cnt))

   (if (< 100 cnt) (setq lst (cddr lst)))

   (repeat 50
   (setq d (/ (distance (car lst) (last lst)) 4.))
   (repeat 4
       (setq cir (cons (polar (car lst) (* (setq n (1+ n)) (/ (* pi 2) 50)) d) cir))
       (setq d (/ d 2.))
   )
   )
   (grvecs (append (list (rem (/ cnt 100) 255)) lst cir))
)
(redraw)
(princ)
)

 
现在,我将其编辑为围绕对象拖动,代码如下:
 
(defun c:bored2 ( / )
;; © Lee Mac 2010
;Edit by Hippe 2010
(setq obj (vlax-ename->vla-object (car (entsel))))
(setq ins (vlax-get-property obj 'InsertionPoint))
(setq lst (list (getvar 'viewctr) (getvar 'viewctr)) cnt 0)

(while (eq 5 (car (setq gr (grread nil 13 0))))
   (redraw)
   (setq cir nil n 0 lst (append lst (list (last lst) (cadr gr)))
         cnt (1+ cnt))

   (if (< 100 cnt) (setq lst (cddr lst)))

   ;(repeat 50
    ; (setq d (/ (distance (car lst) (last lst)) 4.))
   ;(repeat 4
      ; (setq cir (cons (polar (car lst) (* (setq n (1+ n)) (/ (* pi 2) 50)) d) cir))
   ;(setq d (/ d 2.))
    ; )
   
   (grvecs (append (list (rem (/ cnt 100) 255)) lst cir))
   (vlax-put-property obj 'InsertionPoint (vlax-3d-point (nth 0 lst)))
   (vla-update obj)

)
(redraw)
(vlax-put-property obj 'InsertionPoint ins)
(vlax-release-object obj)
(princ)
)
 
此代码应适用于具有插入点特性的任何对象。
 
现在我的问题是:这适用于带有左对正的单行文本,但似乎不适用于中间对正。有人知道为什么它不起作用吗?
 
提前谢谢。
 
hippe013
 
P、 李-麦克。。。又是thanx,有趣的东西!

Lee Mac 发表于 2022-7-6 10:49:34

提示:阅读vla get insertionPoint上的文本。

Hippe013 发表于 2022-7-6 10:54:52

感谢您的快速回复!
 
我试着改用TextAlignmentPoint属性,效果很好。尽管我的问题是,为什么我不能通过更改InsertionPoint属性来移动对象?

Lee Mac 发表于 2022-7-6 11:04:14

 
你看过开发人员的帮助说明了吗?

Hippe013 发表于 2022-7-6 11:11:40

是的,我现在正在阅读。我对帮助文件并不陌生!虽然我很难找到他们在哪里解释这两者。

Hippe013 发表于 2022-7-6 11:19:40

找到了!谢谢
 
 
对于读者:
 
文本对齐点
文本:此属性将重置为0、0、0,并在“对齐”属性设置为“acAlignmentLeft”时变为只读。要定位对齐方式为左对齐、拟合或对齐的文本,请使用InsertionPoint特性。
 
插入点
文本:此属性为只读,但其对齐属性设置为“acAlignmentLeft”、“acAlignmentAligned”或“acAlignmentFit”的文本除外。要定位对正不是左对齐、对齐或拟合的文本,请使用TextAlignmentPoint特性。

Hippe013 发表于 2022-7-6 11:25:54

注:
(vlax-property-available-p obj 'InsertionPoint T)
 
当obj(文本对象)左对齐或中间居中对齐时,vlax-property-available-p(check modify设置为T)仍将返回True。在我看来,这不应该。。。有什么想法吗?

Lee Mac 发表于 2022-7-6 11:33:44

是的,它当然会返回T,属性彼此独立,并且依赖于对象。
 
只需检查对齐情况,看看要使用哪个。

Hippe013 发表于 2022-7-6 11:37:58

我必须同意并检查路线,以确定使用哪条路线显然是要走的路线。尽管很自然,如果一个属性变成只读依赖于对齐的值,那么vlax-property-available-p将基于该值现在变成只读并返回nil这一事实。你不同意李吗?

Lee Mac 发表于 2022-7-6 11:47:04

它不是只读的,只是对位置没有影响。
页: [1]
查看完整版本: 编辑的带孔LISP