乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 18|回复: 9

[编程交流] 编辑的带孔LISP

[复制链接]

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:41:18 | 显示全部楼层 |阅读模式
我收到李·麦克的Lisp程序。无聊的lsp
 
代码如下:
 
  1. (defun c:bored ( / cir cnt gr lst n d )
  2. ;; © Lee Mac 2010
  3. (setq lst (list (getvar 'viewctr) (getvar 'viewctr)) cnt 0)
  4. (while (eq 5 (car (setq gr (grread nil 13 0))))
  5.    (redraw)
  6.    (setq cir nil n 0 lst (append lst (list (last lst) (cadr gr)))
  7.          cnt (1+ cnt))
  8.    (if (< 100 cnt) (setq lst (cddr lst)))
  9.    (repeat 50
  10.      (setq d (/ (distance (car lst) (last lst)) 4.))
  11.      (repeat 4
  12.        (setq cir (cons (polar (car lst) (* (setq n (1+ n)) (/ (* pi 2) 50)) d) cir))
  13.        (setq d (/ d 2.))
  14.      )
  15.    )
  16.    (grvecs (append (list (rem (/ cnt 100) 255)) lst cir))
  17. )
  18. (redraw)
  19. (princ)
  20. )

 
现在,我将其编辑为围绕对象拖动,代码如下:
 
  1. (defun c:bored2 ( / )
  2. ;; © Lee Mac 2010
  3. ;Edit by Hippe 2010
  4. (setq obj (vlax-ename->vla-object (car (entsel))))
  5. (setq ins (vlax-get-property obj 'InsertionPoint))
  6. (setq lst (list (getvar 'viewctr) (getvar 'viewctr)) cnt 0)
  7. (while (eq 5 (car (setq gr (grread nil 13 0))))
  8.    (redraw)
  9.    (setq cir nil n 0 lst (append lst (list (last lst) (cadr gr)))
  10.          cnt (1+ cnt))
  11.    (if (< 100 cnt) (setq lst (cddr lst)))
  12.    ;(repeat 50
  13.     ; (setq d (/ (distance (car lst) (last lst)) 4.))
  14.      ;(repeat 4
  15.       ; (setq cir (cons (polar (car lst) (* (setq n (1+ n)) (/ (* pi 2) 50)) d) cir))
  16.      ;  (setq d (/ d 2.))
  17.     ; )
  18.    
  19.    (grvecs (append (list (rem (/ cnt 100) 255)) lst cir))
  20.    (vlax-put-property obj 'InsertionPoint (vlax-3d-point (nth 0 lst)))
  21.    (vla-update obj)
  22. )
  23. (redraw)
  24. (vlax-put-property obj 'InsertionPoint ins)
  25. (vlax-release-object obj)
  26. (princ)
  27. )

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:49:34 | 显示全部楼层
提示:阅读vla get insertionPoint上的文本。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:54:52 | 显示全部楼层
感谢您的快速回复!
 
我试着改用TextAlignmentPoint属性,效果很好。尽管我的问题是,为什么我不能通过更改InsertionPoint属性来移动对象?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:04:14 | 显示全部楼层
 
你看过开发人员的帮助说明了吗?
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:11:40 | 显示全部楼层
是的,我现在正在阅读。我对帮助文件并不陌生!虽然我很难找到他们在哪里解释这两者。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:19:40 | 显示全部楼层
找到了!谢谢
 
 
对于读者:
 
文本对齐点
文本:此属性将重置为0、0、0,并在“对齐”属性设置为“acAlignmentLeft”时变为只读。要定位对齐方式为左对齐、拟合或对齐的文本,请使用InsertionPoint特性。
 
插入点
文本:此属性为只读,但其对齐属性设置为“acAlignmentLeft”、“acAlignmentAligned”或“acAlignmentFit”的文本除外。要定位对正不是左对齐、对齐或拟合的文本,请使用TextAlignmentPoint特性。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:25:54 | 显示全部楼层
注:
  1. (vlax-property-available-p obj 'InsertionPoint T)

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:33:44 | 显示全部楼层
是的,它当然会返回T,属性彼此独立,并且依赖于对象。
 
只需检查对齐情况,看看要使用哪个。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 11:37:58 | 显示全部楼层
我必须同意并检查路线,以确定使用哪条路线显然是要走的路线。尽管很自然,如果一个属性变成只读依赖于对齐的值,那么vlax-property-available-p将基于该值现在变成只读并返回nil这一事实。你不同意李吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:47:04 | 显示全部楼层
它不是只读的,只是对位置没有影响。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 16:55 , Processed in 0.817616 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表