乐筑天下

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

[编程交流] 属性对齐自动

[复制链接]

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 14:58:55 | 显示全部楼层 |阅读模式
大家好,
在我的图形文件中,有许多属性需要按照标准对齐。(属性位于块参照中)。
手动操作需要很多时间。
所有属性都位于多段线的中间。我想通过lisp自动对齐。
因此,当运行命令时,ATT1应移动并对齐到多边形的起点,
ATT2应移动并对齐到多边形线的端点(请参见随附的.dwg文件)
 
样品图纸
 
请帮助我处理lisp。
 
提前谢谢。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 15:03:27 | 显示全部楼层
也许你贴错了图纸?没有带属性的块参照,而是有属性定义,并且没有一个与多段线的端点对齐。此外,案例1和案例3似乎完全相同,但预期结果不同?
 
编辑:您可能还希望查看案例1多段线从右上角到左下角的情况。
回复

使用道具 举报

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 15:11:00 | 显示全部楼层
嗨,罗伊,
是的,我上传了错误的图纸。
请看这个更新的。
样品图纸
实际上,我需要根据图纸中可用的空间对齐三个不同的箱子。
 
谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:12:12 | 显示全部楼层
可以在起始点附近拾取样条线、直线、圆弧、样条等,使att1到达终点。然后打开ATT。绘制结果。选择的原因是,如果只使用起点、终点,则可能会在错误的一端绘制ATT。从右到左画的线。
 
 
需要一些简单的defuns,我相信有人会发布,我需要找到defuns组,现在必须做真正的工作。开始http://www.cadtutor.net/forum/showthread.php?104805-使用翻转选项测量
回复

使用道具 举报

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 15:19:56 | 显示全部楼层
嗨,比格尔,
抱歉耽搁了。
实际上我不明白你说的话,而且我不是Lisp程序的专家。你能帮我一下吗。
 
 
谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:22:39 | 显示全部楼层
对不起,最近很忙,没有空余时间,我看看今晚是否有空,其他人可以加入。
 
第2部分现在有了一个重头戏,像块属性处于奇数角度这样的两个问题无助于自动化。
 
请问att1和att2值来自哪里?我忽略了拾取ex块,而是在创建时将其插入正确的位置。测线、柱脚和圆弧。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:25:57 | 显示全部楼层
这里有一些东西要看,它需要相当多的工作,但我纠正了块角度,使其正常工作,并删除了额外编码的需要,它需要发挥文字位置和可读性检查。我仍然认为没有必要先插入块,而不是在末尾添加。
 
  1. (defun stend ( / d1 d2 temp)
  2. (setq stpt   (vlax-curve-getstartPoint Obj)
  3.                endpt  (vlax-curve-getEndPoint Obj)
  4. d1 (distance stpt pt)
  5.                d2 (distance endpt pt)
  6. )
  7. (if (> d1 d2)
  8.         (progn
  9.                 (setq temp stpt)
  10.                 (setq stpt endpt)
  11.                 (setq endpt temp)
  12.         )
  13. )
  14. )
  15. (defun ispline ( /  co-ordsxy I xy co-ords numb len ang1 ang2)
  16. (stend)
  17. (setq co-ords   (vlax-safearray->list     (vlax-variant-value       (vlax-get-property
  18.    obj     "Coordinates"       )    )   )
  19. )
  20. (setq len (length co-ords))
  21. (setq numb (/ len 2))
  22. (setq I 0)
  23. (repeat numb
  24. (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords) ))
  25. (setq co-ordsxy (cons xy co-ordsxy))
  26. (setq I (+ I 2))
  27. )
  28. (alert"check direction here")
  29. (setq ang1 (angle (nth 1 co-ordsxy)(nth 0 co-ordsxy)))
  30. (if (= numb 2)
  31. (setq ang2  ang1)
  32. (setq  ang2 (angle (nth (- numb 1) co-ordsxy)(nth  (- numb 2) co-ordsxy)))
  33. )
  34. (command  "-insert" "att1" endpt 1 "" ang1 (rtos (car stpt) 2 2 ))
  35. (command  "-insert" "att2" stpt 1 "" ang2 (rtos (cadr stpt) 2 2 ))
  36. )
  37. (defun isline ( /  ang)
  38. (stend)
  39. (setq ang (angle stpt endpt))
  40. (command  "-insert" "att1" stpt 1 "" ang (rtos (car stpt) 2 2 ))
  41. (command  "-insert" "att2" endpt 1 "" ang (rtos (car stpt) 2 2 ))
  42. )
  43. (defun isarc ( / )
  44. (alert "Non supported item at this time")(exit)
  45. )
  46. (defun iscirc ( / )
  47. (alert "Non supported item at this time")(exit)
  48. )
  49. ;;;; starts here
  50. (defun  endptlabel1 ( /  ent)
  51. (setq ent (entsel "pick object near end for start"))
  52. (SETQ ANGBASEE (GETVAR "ANGBASE"))
  53. (SETQ ANGDIRR (GETVAR "ANGDIR"))
  54. (SETQ AUNITSS (GETVAR "AUNITS"))
  55. (SETVAR "ANGBASE" 0.0)
  56. (SETVAR "ANGDIR" 0)
  57. (SETVAR "AUNITS" 3)
  58. (setq    pt (cadr ent))
  59. (setq obj (vlax-ename->vla-object (car ent)))
  60. (setq objname (vla-get-objectname obj))
  61. (setvar 'attdia 0)
  62. (cond
  63. ((= objname "AcDbPolyline")(ispline))
  64. ((= objname "AcDbLine")(isline))
  65. ((= objname "acDbArc")(isarc))
  66. ((= objname "AcDbCircle" )(iscircle))
  67. )
  68. (SETVAR "ANGBASE" angbasee)
  69. (SETVAR "ANGDIR" angdirr)
  70. (SETVAR "AUNITS" aunitss)
  71. (princ)
  72. )
  73. (defun  c:aaa ()
  74. (endptlabel1)
  75. )
  76. (defun c:bbb ()
  77. (endptlabel2)
  78. )
回复

使用道具 举报

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 15:30:12 | 显示全部楼层
你好,比格尔,
非常感谢您的代码。
我已经试过了上面你发的代码。嗯,这是可行的,但它更新了两端的长度。
但我必须将属性从选定位置移到两端。(块属性已放置在我的DWG中),因此首先我必须选择属性,然后选择线。之后,选定的属性以与直线相同的旋转角度移动到直线的两端。
 
再次感谢。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:35:42 | 显示全部楼层
我知道文本需要一些对齐工作。
 
但我的大问题是,为什么你要插入块,然后把它们连接到线柱上,等等,我会直接把块添加到对象上,这就是我在代码中试图展示的。这似乎是一个三步过程,而不是一步。
 
可以在开始处添加pick两个块,读取其属性值,并创建新的添加到代码中
回复

使用道具 举报

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 15:38:52 | 显示全部楼层
实际上,我正在开发一个GIS应用程序,其中块属性将自动放置在多段线的中心顶部。之后,我们需要将该块属性移动到两端。手动对齐需要一些时间。这就是为什么我在这里问,是否可以通过lisp完成。这对我很有帮助。
 
 
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 23:24 , Processed in 1.340692 second(s), 72 queries .

© 2020-2025 乐筑天下

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