乐筑天下

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

[编程交流] 未对齐非线性长度

[复制链接]

4

主题

22

帖子

19

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 22:20:26 | 显示全部楼层 |阅读模式
大家好。
有相当多的LISP的网站上围绕线的长度,但我寻找LISP,可以把几何长度或列表长度旁边的所有选定的线,弧的,普林斯等。在图纸中它自己。
像这样的。
非常感谢。
232031qpb1j9epnflt1plq.jpg
回复

使用道具 举报

4

主题

22

帖子

19

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 22:36:29 | 显示全部楼层
找到了一个Lisp,它完成了我在这里寻找的叫做LengthText的东西,多亏了Lisp的创建者。
http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/line-length-typing-lisp/td-p/2119240
使用它,但长度是在线条的起点提到的,形成一个杂乱使阅读困难。
关于如何修改lisp以使文本可以沿直线移动到中心,有什么指导吗?
  1. ;------------------------------------------------ LenghtOfObject ------------------------
  2. (defun LenghtOfObject (obj / len)
  3. (if (vl-catch-all-error-p (setq len (vl-catch-all-apply 'vlax-curve-getDistAtParam
  4.    (list obj (vl-catch-all-apply 'vlax-curve-getEndParam (list obj)))))) nil len
  5. )
  6. )
  7. ;------------------------------------------------ c:LengthText ------------------------
  8. (defun c:LengthText ( / *ModelSpace* sel)
  9. (vl-load-com)
  10. (setq *ModelSpace* (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-acad-object))))
  11. (setvar "errno" 0) ; when the user on ssget press Enter the errno is set to 52
  12. (while (and (setq sel (ssget))(/= (getvar "errno") 52))
  13.    (if sel
  14.      (progn
  15.        (mapcar (function (lambda (ent / obj olg stpt TxtObj next_pt)
  16.          (setq  Obj (vlax-ename->vla-object ent))
  17.          (if (setq olg (LenghtOfObject obj))
  18.            (progn
  19.              (setq stpt (vlax-curve-getStartPoint obj))
  20.              (setq TxtObj (vla-addText *ModelSpace* (rtos olg 2 2) (vlax-3d-point stpt) (getvar"textsize"))) ;_ end of vla-addText
  21.              (setq next_pt (if (= "AcDbArc" (vlax-get obj 'ObjectName))
  22.                (vlax-curve-getendpoint obj); end point
  23.                (vlax-curve-getPointAtParam obj (1+ (fix (vlax-curve-getParamAtPoint obj stpt))))
  24.              ))
  25.              (vla-put-Rotation TxtObj (angle stpt next_pt))
  26.              (setq stpt (vla-get-InsertionPoint TxtObj))
  27.              (vla-put-alignment TxtObj acAlignmentBottomLeft)
  28.              (vla-put-TextAlignmentPoint TxtObj stpt)
  29.            )
  30.            (if (ssmemb ent sel)(ssdel ent sel))
  31.          )
  32.        ))(vl-remove-if-not '(lambda(x)(= (type x) 'ENAME)) (mapcar 'cadr (ssnamex sel))))
  33.      )
  34.    )
  35. )
  36. (princ)
  37. )
  38. ;------------------------------------------------ c:LenghtText1 ------------------------
  39. (defun c:LengthText1 ( / *ModelSpace* sel Obj )
  40. (vl-load-com)
  41. (setq *ModelSpace* (vla-get-ModelSpace (vla-get-ActiveDocument(vlax-get-acad-object))))
  42. (setvar "errno" 0) ; when the user on ssget press Enter the errno is set to 52
  43. (while (and (setq sel (ssget '((0 . "LINE,POLYLINE,LWPOLYLINE,ARC"))))(/= (getvar "errno") 52))
  44.    (if sel
  45.      (progn
  46.        (mapcar (function (lambda (ent / obj oname stpt TxtObj next_pt)
  47.          (setq  Obj (vlax-ename->vla-object ent))
  48.          (if (LenghtOfObject obj)
  49.            (progn
  50.              (setq oname (vlax-get obj 'ObjectName))
  51.              (setq stpt (vlax-curve-getStartPoint obj))
  52.              (setq TxtObj (vla-addText *ModelSpace* (strcat "%<\\AcObjProp Object(%<\\_ObjId "
  53.                 (vl-princ-to-string (vla-get-ObjectID obj))">%)."(if (= "AcDbArc" oname) "Arc" "")"Length \\f "%lu2%pr2%ps[, mm]">%")
  54.                 (vlax-3d-point stpt) (getvar"textsize"))
  55.              ) ;_ end of vla-addText
  56.              (setq next_pt (if (= "AcDbArc" oname)
  57.                (vlax-curve-getendpoint obj); end point
  58.                (vlax-curve-getPointAtParam obj (1+ (fix (vlax-curve-getParamAtPoint obj stpt))))
  59.              ))
  60.              (vla-put-Rotation TxtObj (angle stpt next_pt))
  61.              (setq stpt (vla-get-InsertionPoint TxtObj))
  62.              (vla-put-alignment TxtObj acAlignmentBottomLeft)
  63.              (vla-put-TextAlignmentPoint TxtObj stpt)
  64.            )
  65.            (if (ssmemb ent sel)(ssdel ent sel))
  66.          )
  67.        ))(vl-remove-if-not '(lambda(x)(= (type x) 'ENAME)) (mapcar 'cadr (ssnamex sel))))
  68.      )
  69.    )
  70. )
  71. (princ)
  72. )

232034y1k5mjgkqj1jpzeq.jpg
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 22:44:25 | 显示全部楼层
为了分享,我提供了附加代码,然后你自己试试。
全部归功于作者
 
在例程中添加此函数
  1. (defun vlax-curve-getMidPoint (obj / len)
  2. (vlax-curve-getPointAtDist
  3.    obj
  4.    (* 0.5
  5.       (vlax-get obj
  6.          (if (vlax-property-available-p obj (setq len "length"))
  7.            len
  8.            (strcat "arc" len)
  9.            ) ;_ end of if
  10.          ) ;_ end of vlax-get
  11.       ) ;_ end of *
  12.    ) ;_ end of vlax-curve-getPointAtDist
  13. ) ;_ end of defun

 
然后替换此vlax曲线getStartPoint
  1. ...
  2. ...
  3. [color="#696969"]  (setq oname (vlax-get obj 'ObjectName))
  4.              (setq stpt ([color="red"]vlax-curve-getStartPoint[/color] obj))
  5.              (setq TxtObj (vla-addText *ModelSpace* (strcat "%<\\AcObjProp Object(%<\\_ObjId "
  6.                 (vl-princ-to-string (vla-get-ObjectID obj))">%)."(if (= "AcDbArc" oname) "Arc" "")"Length \\f "%lu2%pr2%ps[, mm]">%")[/color]
  7. ...
  8. ...

更改为。。
  1. ...
  2. (setq stpt ([color="red"]vlax-curve-getMidPoint[/color] obj))
  3. ...
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 22:47:41 | 显示全部楼层
不,仍然将文本放在端点!
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 23:00:12 | 显示全部楼层
啊哈。。。。。。。。。。LengthText1将文本放置在实体的中点,LengthText将文本放置在起始点!
希望这对大家都有帮助!
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 23:09:05 | 显示全部楼层
 
你好,stevestr,
前一个用于LengthText1,
 
对于LengthText,类似的只是查找和替换
it to vlax curve GetMiddle点
  1. ...
  2. ...
  3. (if (setq olg (LenghtOfObject obj))
  4.            (progn
  5.               (setq stpt ([color="red"]vlax-curve-getStartPoint[/color] obj)) ;<---- this
  6.              (setq TxtObj
  7. ...
  8. ...

 
例子:
  1. ;associative dimension "line"
  2. (defun [color="red"][b]ldim[/b][/color] (lin / p1 p2 mp sz)
  3. ;hanhphuc 14/10/2014
  4. (mapcar 'set '(p1 p2) (mapcar ''((e) (cdr (assoc e (entget lin)))) '(10 11)))
  5. (setq sz (* 0.05 (distance p1 p2)) mp (mapcar '(lambda (a b) (* 0.5 (+ a b))) p1 p2))
  6. (vl-cmdf "_dimaligned" p1 p2 mp)
  7. ('((obj)
  8.     (mapcar
  9.      '(lambda (a b) (vlax-put obj a b))
  10.      '("Arrowhead1Type"         "Arrowhead2Type"          "extensionlineextend"           "extensionlineoffset"
  11. "TextHeight"                 "TextInside"                  "VerticalTextPosition"   "TextGap"
  12. )
  13.      (list 19 19 0. 0. sz :vlax-true 1 sz)
  14.      )
  15.     (vlax-put-property obj 'TextFill :vlax-true)
  16.     )
  17.    (vlax-ename->vla-object (entlast))
  18.    )
  19. ) ;_ end of defun

测试后,您可以只分解,然后返回到行和长度文本
回复

使用道具 举报

4

主题

22

帖子

19

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:13:33 | 显示全部楼层
不为我对这个问题的无知感到骄傲
我试过了,但只通过这一页学会了将文本居中对齐
http://www.theswamp.org/index.php?topic=2359.0
但它只在同一点上更改了文本对齐方式。
六羟甲基三聚氰胺六甲醚。。。。看起来解决方案就在我面前,感谢这个论坛上的优秀人士,让我试试。我可能会大错特错
回复

使用道具 举报

4

主题

22

帖子

19

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 23:28:56 | 显示全部楼层
你是一个救生员。你的第一个帖子做得很好,非常感谢朋友。
这是根据您的说明和结果编辑的最终代码。
  1. (defun c:test (/ var l ss)
  2. (setq        l   '("CMDECHO" "OSMODE" "DIMTIH" "DIMTOH" "DIMASSOC")
  3. var (mapcar 'getvar l)
  4. ) ;_ end of setq
  5. (mapcar 'setvar l '(0 0 0 0 2))
  6. (command "_UNDO" "be")
  7. (if (setq ss (ssget ":L" '((0 . "LINE"))))
  8.    (mapcar '[b][color="red"]ldim[/color][/b] (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  9.    ) ;_ end of if
  10. (command "_UNDO" "e")
  11. (vl-cmdf "_erase" ss "")
  12. (mapcar 'setvar l var)
  13. (princ)
  14. ) ;_ end of defun

232036r03ei15u7hhe3uzu.jpg
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:31 , Processed in 0.564844 second(s), 71 queries .

© 2020-2025 乐筑天下

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