乐筑天下

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

[编程交流] 谁能换一下这个吗

[复制链接]

18

主题

59

帖子

41

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-5 23:56:25 | 显示全部楼层 |阅读模式
我有一个lisp,来自Kent Cooper,大约2010年,在每一条相交的直线上输入一个维度。它似乎仅限于在什么样的物体上断裂。我公司的CAD有他们合并的自定义对象,lisp无法将其识别为对象。有谁能稍微改变一下,给所有物体标注尺寸?非常感谢。
  1. ;;  QuickDimAligned.lsp [command name: QDA]
  2. ;;  To make a collinear series of Aligned Dimensions along
  3. ;;  a single fence line, between all intersections of that line
  4. ;;  with intersectable objects.
  5. ;;  Kent Cooper, July 2010
  6. ;;;;  [optional features could be added: account for other
  7. ;;;;  Coordinate Systems; set layer and/or dimension style]
  8. (defun C:QDA
  9. (/ *error* orth osm blipm dse1 dse2 pt1 pt2 ss obj
  10. intp intc inclist intpt distpt distpts intclist intplist)
  11. (defun *error* (errmsg)
  12.    (if (not (wcmatch errmsg "Function cancelled,quit / exit abort"))
  13.      (princ (strcat "\nError: " errmsg))
  14.    ); end if
  15.    (command)
  16.    (setvar 'osmode osm)
  17.    (setvar 'orthomode orth)
  18.    (setvar 'blipmode blipm)
  19.    (setvar 'dimse1 dse1)
  20.    (setvar 'dimse2 dse2)
  21.    (command "_.undo" "_end")
  22.    (setvar 'cmdecho cmde)
  23. ); end defun - *error*
  24. (vl-load-com)
  25. (setq cmde (getvar 'cmdecho))
  26. (setvar 'cmdecho 0)
  27. (command "_.undo" "_begin")
  28. (setq
  29.    orth (getvar 'orthomode)
  30.    osm (getvar 'osmode)
  31.    blipm (getvar 'blipmode)
  32.    dse1 (getvar 'dimse1)
  33.    dse2 (getvar 'dimse2)
  34. ); end setq
  35. (setvar 'orthomode 0)
  36. (setq
  37.    pt1 (getpoint "\nStarting Point of QuickDim virtual line: ")
  38.    pt2 (getpoint pt1 "\nOther End: ")
  39.    ss (ssget "F" (list pt1 pt2) '((0 . "*LINE,ARC,CIRCLE,ELLIPSE,RAY,SOLID,3DFACE,REGION")))
  40. ); end setq
  41. (setvar 'osmode 0)
  42. (setvar 'blipmode 0)
  43. (setvar 'dimse1 1)
  44. (setvar 'dimse2 1)
  45. (command "_.line" pt1 pt2 "")
  46. (setq templine (entlast))
  47. (repeat (sslength ss); for each object in selection
  48.    (setq
  49.      obj (vlax-ename->vla-object (ssname ss 0))
  50.      intline (vlax-ename->vla-object templine)
  51.      intp (vla-intersectwith obj intline acExtendNone); INTersection Point(s)
  52.      intc (safearray-value (variant-value intp)); INTersection Coord's [all together]
  53.      intclist (append intclist intc); cumulative list for all objects so far
  54.    ); end setq
  55.    (ssdel (ssname ss 0) ss); remove object
  56. ); end repeat
  57. (entdel templine)
  58. (repeat (/ (length intclist) 3); number of [apparent] intersections
  59.    (setq
  60.      intpt (list (car intclist) (cadr intclist) (caddr intclist)); first remaining point
  61.      distpt (cons (distance pt1 intpt) intpt); list: distance followed by point coordinates
  62.      distpts (cons distpt distpts); list of those lists
  63.      intclist (cdddr intclist); remove first point's coordinates for next one
  64.    ); end setq
  65. ); end repeat
  66. (setq intplist ; list of intersections in order of distance from pt1
  67.    (mapcar 'cdr ; strip distances off sorted list
  68.      (vl-sort
  69.        distpts
  70.        '(lambda (p1 p2) (< (car p1) (car p2))); sorted by distance [first element]
  71.      ); end sort
  72.    ); end mapcar
  73. ); end setq
  74. (command "_.dimaligned" (car intplist) (cadr intplist) (cadr intplist))
  75. (setq intplist (cddr intplist)); remove first two points [already used]
  76. (while intplist ; as long as there's still another point
  77.    (command "_.dimcontinue" (car intplist) "" "")
  78.    (setq intplist (cdr intplist))
  79. ); end while
  80. (setvar 'osmode osm)
  81. (setvar "orthomode" orth)
  82. (setvar 'blipmode blipm)
  83. (setvar 'dimse1 dse1)
  84. (setvar 'dimse2 dse2)
  85. (command "_.undo" "_end")
  86. (setvar 'cmdecho cmde)
  87. (princ)
  88. ); end defun - QDA
  89. (prompt "\nType QDA for QuickDimAligned collinear intersection dimensions.")
  90. (princ)
回复

使用道具 举报

18

主题

59

帖子

41

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 00:12:53 | 显示全部楼层
也可以添加一些东西,这样就有了引线吗?这一部分并不重要,但可以节省清理时间。当它就位时,我执行命令,然后必须添加线以延伸到它们正在标注的对象。我知道有几种方法可以做到这一点,但我总是在寻找最快的做事方式(我想这就是典型的懒惰美国人的态度)。。。似乎总有人想指出一些显而易见的命令,这些命令在技术上可以完成这项工作,但仍然需要很长时间。再次感谢您的帮助。这个论坛总是有一些非常有帮助和聪明的人在做一些我做不到的事情。
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 00:25:45 | 显示全部楼层
嗨,诺布尔,
 
您希望对哪种自定义对象进行操作?目前,该例程似乎适用于直线、圆弧、圆、椭圆、射线、实体、三维面和区域。虽然我还没有测试过。
 
仅供参考。。。鉴于这一惯例不是你自己的-论坛上的其他人可能会犹豫修改它(未经作者许可)。我对此并不确定,这可能不是什么问题——只是我发生了一些事情。
回复

使用道具 举报

18

主题

59

帖子

41

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 00:34:08 | 显示全部楼层
我想这是我问题的一部分。我不确定这个物体到底是什么。使用快捷特性时,没有指定为“直线”或“圆”。我想它类似于一条多段线。如果这有任何意义的话,它看起来几乎像一个自定义对象。我使用的命令中有一半不是标准cad。光束和附件命令等。。。这也是我对lisp在这里讲话的无知。我确实看到了代码中对象的主要类型,但我不知道是否有“全对象”代码。
 
至于改写礼节,作为一个新的lisp世界,我的印象是只要信用是一个主要部分
但如果是这样的话,我会理解的。
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 00:51:51 | 显示全部楼层
允许例程“查看”所有对象(而不是过滤掉一些对象)是可能的。但我不能确定你拥有的物体是否会被接受,从中创建维度。
 
出于好奇……当你列出你的自定义对象时,你看到了什么?可能会将文本窗口中显示的文本粘贴到此处。
回复

使用道具 举报

18

主题

59

帖子

41

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 01:04:07 | 显示全部楼层
它不是直线或圆弧之类的标准标题,而是结构支撑或沿着这些线的东西。我下周一在办公室的时候会发一张照片。放假去度假。谢谢你的帮助。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:35 , Processed in 1.187993 second(s), 71 queries .

© 2020-2025 乐筑天下

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