乐筑天下

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

[编程交流] 将文本移动到中点o

[复制链接]

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-5 23:32:53 | 显示全部楼层 |阅读模式
我对这个程序有意见。如果一行的长度发生变化,我让它的每一边(上面和下面)有两个文本移动到该行的中间。假设我想把一行缩短或加长。通过运行此例程,文本位置应更新到新的行中点。
 
文本每侧偏移dimscale变量距离的一半。我利用句柄来选择文本,因为它们总是分别为行的句柄名+1和+2。
 
我不确定我做错了什么,但这两篇文章的位置不对。要么在直线的三分之一或三分之二,要么有时它正确居中,但在垂直于直线的方向上,它是不正确的(比应该的低一点)。
 
任何帮助都将不胜感激。
 
 
  1. (defun c:ht (/)      
  2.    (setq sslns (ssget '((0 . "LINE"))))
  3.    (setq cnthdl (sslength sslns))
  4.    (setq offset (/ (getvar "dimscale") 2))
  5.    (while (>= (setq cnthdl (1- cnthdl)) 0)   
  6.    (setq tpent (ssname sslns cnthdl))
  7.      (setq lndt (entget tpent))
  8.    (setq lnlng (distance (cdr (assoc 10 lndt)) (cdr (assoc 11 lndt))))
  9.    (setq lndx (- (cadr (assoc 11 lndt)) (cadr (assoc 10 lndt))))
  10.    (setq lndy (- (caddr (assoc 11 lndt)) (caddr (assoc 10 lndt))))
  11.    (setq lndz (- (cadddr (assoc 11 lndt)) (cadddr (assoc 10 lndt))))
  12.    (setq gpln (list (+ (cadr (assoc 10 lndt)) (/ lndx 2)) (+ (caddr (assoc 10 lndt)) (/ lndy 2)) (+ (cadddr (assoc 10 lndt)) (/ lndz 2))))   
  13.    (if (/= lndy 0)
  14.        (setq txtendpt (list (- (+ (cadr (assoc 10 lndt)) (/ lndx 2)) offset) (+ (caddr (assoc 10 lndt)) (/ lndy 2)) (+ (cadddr (assoc 10 lndt)) (/ lndz 2))))
  15.        (setq txtendpt (list (+ (cadr (assoc 10 lndt)) (/ lndx 2)) (+ (+ (caddr (assoc 10 lndt)) (/ lndy 2)) offset) (+ (cadddr (assoc 10 lndt)) (/ lndz 2))))
  16.    )
  17.    
  18.    (setq txthdl (dec2hex (1+ (hex2dec (cdr (assoc 5 lndt))))))
  19.    (setq txtprop (entget (handent txthdl)))
  20.    (setq txtdimhdl (dec2hex (+ (hex2dec (cdr (assoc 5 lndt))) 2)))
  21.    
  22.    (setq txtdimprop (entget (handent txtdimhdl)))
  23.    (setq 2txts (ssadd (handent txthdl) (ssadd (handent txtdimhdl))))
  24.    (setq gptxt1 (cdr (assoc 11 txtdimprop)))
  25.    (command "move" 2txts "" gptxt1 txtendpt)
  26.    
  27.    )
  28. (princ)
  29. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 23:45:47 | 显示全部楼层
另一种不同的方法是拾取线,所以有10和11的起点和终点,你们得到距离stpt endpt,然后得到角度stpt endpt。避免所有协会
 
好的,现在在角度处使用距stpt的极分距离/2.0,然后添加到角度90+&90-再次使用极坐标计算txtpt1&2
 
  1. (seqt stpt (cdr (assoc 10 lndt)))
  2. (setq endpt (cdr (assoc 11 lndt)))
  3. (setq lnlng (/ (distance stpt endpt )2.0))
  4. (setq ang (angle stpt endpt))
  5. (setq midpt (polar stpt lnlng ang))
  6. (setq txt1 (polar midpt (getvar "dimscale") (+ (/ pi 2.0) ang)) ; note pi is a reserved variable name
  7. (setq txt2 (polar midpt (getvar "dimscale") (- (/ pi 2.0) ang))
回复

使用道具 举报

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-5 23:57:17 | 显示全部楼层
非常感谢。你的帮助对我很有启发。我确实根据您的代码调整了代码,但它的行为仍不符合预期。文本会飞到不同的位置。我真的不明白出了什么问题。上述两种代码都应该运行良好。你认为这与持有剩余值的变量有关吗?
 
下面我附上了两行文字和文件。下限是应该的。上限是在代码执行之后。
 
 
  1. (defun c:ht (/)               
  2. (setq txtsta nil txtend nil)
  3. (setq sslns (ssget '((0 . "LINE"))))
  4. (setq cnthdl (sslength sslns))
  5. (setq offset (/ (getvar "dimscale") 2))
  6. (while (>= (setq cnthdl (1- cnthdl)) 0)       
  7. (setq tpent (ssname sslns cnthdl))
  8.        (setq lndt (entget tpent))
  9. (setq lnlng (/ (distance (cdr (assoc 10 lndt)) (cdr (assoc 11 lndt))) 2))
  10. (setq ang (angle (cdr (assoc 10 lndt)) (cdr (assoc 11 lndt))))
  11. (setq midpt (polar (cdr (assoc 10 lndt)) lnlng ang))
  12. (setq txthdl (dec2hex (1+ (hex2dec (cdr (assoc 5 lndt))))))
  13. (setq txtprop (entget (handent txthdl)))
  14. (setq txtdimhdl (dec2hex (+ (hex2dec (cdr (assoc 5 lndt))) 2)))
  15. (setq txtdimprop (entget (handent txtdimhdl)))
  16. (setq 2txts (ssadd (handent txthdl) (ssadd (handent txtdimhdl))))
  17. (setq txtsta (cdr (assoc 11 txtdimprop)))
  18. (setq txtend (polar midpt offset (+ (/ pi 2.0) ang)))
  19. (command "move" 2txts "" txtsta txtend)
  20. )
  21. (princ)
  22. )

 
第2行文字。图纸
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 00:03:13 | 显示全部楼层
虽然我不太明白您要做的一切,但这是一个使用entmake的简单线标签机:
 
  1. [b][color=BLACK]([/color][/b]defun c:lnlabel [b][color=FUCHSIA]([/color][/b]/ tof ss i en ed p10 p11 la ta mpt tp bp[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq tof [b][color=NAVY]([/color][/b]getvar [color=#2f4f4f]"DIMSCALE"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"LINE"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  4.         [b][color=NAVY]([/color][/b]setq i 0[b][color=NAVY])[/color][/b]
  5.         [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  6.                [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  7.                     p10 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 10 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  8.                     p11 [b][color=GREEN]([/color][/b]cdr [b][color=BLUE]([/color][/b]assoc 11 ed[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  9.                     la [b][color=GREEN]([/color][/b]angle p10 p11[b][color=GREEN])[/color][/b]
  10.                     ta [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]< [b][color=RED]([/color][/b]* pi 0.5[b][color=RED])[/color][/b] la [b][color=RED]([/color][/b]* pi 1.5[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]+ la pi[b][color=BLUE])[/color][/b] la[b][color=GREEN])[/color][/b]
  11.                     mpt [b][color=GREEN]([/color][/b]mapcar '[b][color=BLUE]([/color][/b]lambda [b][color=RED]([/color][/b]a b[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]* [b][color=PURPLE]([/color][/b]+ a b[b][color=PURPLE])[/color][/b] 0.5[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] p10 p11[b][color=GREEN])[/color][/b]
  12.                     tp [b][color=GREEN]([/color][/b]polar mpt [b][color=BLUE]([/color][/b]+ ta [b][color=RED]([/color][/b]* pi 0.5[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] tof[b][color=GREEN])[/color][/b]
  13.                     bp [b][color=GREEN]([/color][/b]polar mpt [b][color=BLUE]([/color][/b]+ ta [b][color=RED]([/color][/b]* pi 1.5[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] tof[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  14.                [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"TEXT"[/color][b][color=BLUE])[/color][/b]
  15.                               [b][color=BLUE]([/color][/b]cons 1 [color=#2f4f4f]"ABOVE"[/color][b][color=BLUE])[/color][/b]
  16.                               [b][color=BLUE]([/color][/b]cons 7 [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"TEXTSTYLE"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  17.                               [b][color=BLUE]([/color][/b]cons 8 [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"CLAYER"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  18.                               [b][color=BLUE]([/color][/b]cons 10 tp[b][color=BLUE])[/color][/b]
  19.                               [b][color=BLUE]([/color][/b]cons 11 tp[b][color=BLUE])[/color][/b]
  20.                               [b][color=BLUE]([/color][/b]cons 40 [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"TEXTSIZE"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  21.                               [b][color=BLUE]([/color][/b]cons 41 1.0[b][color=BLUE])[/color][/b]
  22.                               [b][color=BLUE]([/color][/b]cons 50 ta[b][color=BLUE])[/color][/b]
  23.                               [b][color=BLUE]([/color][/b]cons 72 4[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  24.                [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"TEXT"[/color][b][color=BLUE])[/color][/b]
  25.                               [b][color=BLUE]([/color][/b]cons 1 [color=#2f4f4f]"BELOW"[/color][b][color=BLUE])[/color][/b]
  26.                               [b][color=BLUE]([/color][/b]cons 7 [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"TEXTSTYLE"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  27.                               [b][color=BLUE]([/color][/b]cons 8 [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"CLAYER"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  28.                               [b][color=BLUE]([/color][/b]cons 10 bp[b][color=BLUE])[/color][/b]
  29.                               [b][color=BLUE]([/color][/b]cons 11 bp[b][color=BLUE])[/color][/b]
  30.                               [b][color=BLUE]([/color][/b]cons 40 [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"TEXTSIZE"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
  31.                               [b][color=BLUE]([/color][/b]cons 41 1.0[b][color=BLUE])[/color][/b]
  32.                               [b][color=BLUE]([/color][/b]cons 50 ta[b][color=BLUE])[/color][/b]
  33.                               [b][color=BLUE]([/color][/b]cons 72 4[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  34.                [b][color=MAROON]([/color][/b]setq i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  35. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
您可以使用相同的基本引擎(entmod)编辑组11和50的中点和文本角度。
 
-大卫
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:15:45 | 显示全部楼层
另一种方法是使用dims并关闭所有箭头,明显地,长度将更新,其他文本也将移动到中心,只需在末端做一个交叉窗口,这样它就会拾取隐藏的dim定位器。您将需要创建暗样式。
回复

使用道具 举报

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-6 00:29:03 | 显示全部楼层
在David的帮助下,我设法解决了这个问题,因为我想让代码也适用于Z方向的行。再次感谢。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 00:42:08 | 显示全部楼层
很高兴你成功了。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 00:44 , Processed in 0.361623 second(s), 66 queries .

© 2020-2025 乐筑天下

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