乐筑天下

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

[编程交流] 竣工偏差

[复制链接]

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:04:20 | 显示全部楼层 |阅读模式
你好
 
我一直试图修改ASMI的Deviation_Tag例程,该例程在两个拾取点之间产生x,y偏差,但没有成功。与用箭头显示结果不同,我希望将结果显示在带有+/-前缀的框中,并且在启动lisp时可以选择设置比例。
 
ASMI的偏差标签。lsp引用了四个包含箭头和属性定义的图形文件,我已经创建了自己的块(Deviation_BOX.dwg),我可以简单地更改代码来加载这个文件(所有四个象限都是同一个文件-不太理想,但我不太清楚)。
 
上面的链接是到原始文件和附件显示了我的屠宰努力。如果有人能在+/-前缀和刻度方面帮助我,我将不胜感激。
 
有什么好处,但不是现在必须的,将是从块的最近角到竣工点(第二个拾取点)的箭头。这可以是四个角中的任意一个,具体取决于块的放置位置。
 
我被这件事难住了。
 
谢谢
私有
DevBox。LSP
样品图纸
偏差箱。图纸
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:11:48 | 显示全部楼层
看看这4个角箭头等,我知道在CIV3d tbm标签是一个痛苦。
 
http://www.cadtutor.net/forum/showthread.php?104628-使用文本文件添加和操作动态块
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:24:18 | 显示全部楼层
嗨BIGAL
 
我不确定我是否遗漏了什么,但我在那个帖子上找不到任何有用的东西。我只是试着选取两个点(一个是设计位置,另一个是竣工位置),并根据样本在方框中绘制两个点之间的偏差。上图。如果我在你发送的链接中遗漏了什么,可能是因为我不是lisp专家。
 
谢谢
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:30:51 | 显示全部楼层
 
嗨,不是每个人都有像你这样的更新版本的cad,所以不能测试你的块。
 
但在我看来,如果去掉abs,它应该显示为负值
 
i、 e:(rtos(abs(…));删除绝对数
 
  1. (rtos(*(car deVal)1000)2 0)
  2. (rtos(*(cadr deVal)1000)2 0))

 
FWIW我记得它有点像“竣工”(理论和实际点)?不使用块。
 
它使用TEXTSIZE作为关联比例。
 
在这里,我修复了“osmode”的小错误
  1. (defun c:devtest (/ p1 p2 p3 *error* var os osaved delta _mirror s ip)
  2. [color="green"] ;sub-functions to be included here
  3. ;[b]defun _mirror & defun delta[/b]
  4. ;to adjust scale,
  5. ;command: [b]TEXTSIZE[/b] [/color]
  6. (defun *error* (msg)
  7.    (if        var
  8.      (mapcar 'setvar var osaved)
  9.      )
  10.    )
  11. (if (not (tblsearch "LAYER" "DIFF"))
  12.    (vl-cmdf "-Layer" "m" "DIFF" "")
  13.    )
  14. (setq        var    '(osmode angbase angdir cmdecho clayer mirrtext)
  15. osaved (mapcar 'getvar var)
  16. os     (car osaved) ; or favourite osmode = 40
  17. )
  18. (mapcar 'setvar var (list os (/ pi 2.0) 1 0 "DIFF" 0))
  19. (terpri)
  20. (while (and (setq p1 (getpoint "\rTheoretical point..       "))
  21.       (setq p2 (getpoint p1 "\rActual point..            "))
  22.       (setvar 'osmode 0)
  23.       (setq p3 (getpoint p2 "\rPlacing arrow..           "))
  24.       )
  25.    ([color="blue"]delta[/color] p1 p2 p3)
  26.    (setvar 'osmode os)
  27.    )
  28. (if osaved
  29.    (mapcar 'setvar var osaved)
  30.    )
  31. (princ)
  32. )

 
如果关于封盖问题,BIGAL会帮助你,祝你好运
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:32:54 | 显示全部楼层
DWG文件重新上传为v2013。谢谢你指出这一点。我刚换了一台新的笔记本电脑(显然不是很好)。
 
我去掉了abs,并反转了两个变量ppPos和bsPos,因此偏差显示为从提议到设计,而不是从设计到提议。这是可行的,并且确实在需要的地方显示了负号,但我被如何在那里放置加号以显示正偏差所困扰-我知道假设没有符号的数字是正的,但我只是认为在这种情况下看起来会更好。
 
这就是我所处的位置:
 
  1. ; Original code by ASMI (Deviation_Tag.LSP) - CADTutor
  2. ; Badly butchered by Demesne 11/07/18
  3. (defun c:devbox( / *error* oldEcho ppPos bsPos deVal insBl)
  4.   (defun *error* (msg)
  5.     (setvar "CMDECHO" oldEcho)
  6.   ); end of *error*
  7.   
  8.   (defun +rtos (x u p)
  9.      (strcat
  10.     (if (> x 0)
  11.       "+"
  12.       "")
  13.     (rtos x u p)
  14.   )
  15.    )
  16.   (setq oldEcho(getvar "cmdecho"))
  17.   (setvar "CMDECHO" 0)
  18.   
  19.   (setq bsPos(getpoint "\nPick proposed position > "))
  20.   (setq ppPos(getpoint "\nPick as-built position > "))
  21.   
  22.   (setq deVal(mapcar '- ppPos bsPos))
  23.   
  24.   (setq insBl "Deviation_BOX")
  25.   
  26.   (if
  27.     (not(tblsearch "block" insBl))
  28.     (progn
  29.       (if
  30.        (setq blPath(findfile(strcat insBl ".dwg")))
  31.     (command "-insert" blPath "_s" "1" pause "0"
  32.           (+rtos(*(car deVal)1000)2 0)
  33.           (+rtos(*(cadr deVal)1000)2 0))
  34.        (alert(strcat "\n*** File " (strcat insBl ".dwg") " not found! *** "))
  35.       ); end if
  36.     ); end progn
  37.     (command "-insert" insBl "_s" "1" pause "0"
  38.       (+rtos(*(car deVal)1000) 2 0)
  39.       (+rtos(*(cadr deVal)1000) 2 0))
  40.   ); end if
  41.   
  42. (setvar "cmdecho" oldEcho)
  43. (princ)
  44. ); end of c:devbox
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:38:21 | 显示全部楼层
 
  1. (defun +rtos (x u p)
  2. (strcat (if (> x 0)
  3.     "+"
  4.     ""
  5.     )
  6.   (rtos x u p)
  7.   )
  8. )
  9. (+rtos 10. 2 0)
  10. "+10"
  11. (+rtos -10. 2 0)
  12. "-10"
回复

使用道具 举报

7

主题

32

帖子

25

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:46:49 | 显示全部楼层
谢谢hanhphuc。我已将您的代码添加到上面的代码中。非常感谢你的帮助。
 
我将不得不尝试显示一个箭头,从方框的最近角到竣工点。欢迎提出建议
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:55:01 | 显示全部楼层
你为什么不使用mleader?以下是一些示例代码(假设您当前的mleaderstyle包含文本)
  1. (defun c:foo (/ p1 p2 p3 r)
  2. (cond        ((and (setq p1 (getpoint "\nPick first point:"))
  3.       (setq p2 (getpoint "\nPick second point:"))
  4.       (setq r (mapcar '(lambda (x)
  5.                          (strcat (cond ((minusp x) "")
  6.                                        ("+")
  7.                                  )
  8.                                  (rtos (* x 1000) 2 0)
  9.                          )
  10.                        )
  11.                       (mapcar '- p1 p2)
  12.               )
  13.       )
  14. )
  15. (entmakex (list '(0 . "line") '(8 . "deviation") '(62 .  (cons 10 p1) (cons 11 p2)))
  16. (setq p2 (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.)))
  17. (if (setq p3 (getpoint p2 "\nSpecify leader landing location: "))
  18.    (command "_.mleader" p2 p3 (strcat "E " (car r) "\\PN " (cadr r)))
  19. )
  20. )
  21. )
  22. (princ)
  23. )
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:59:20 | 显示全部楼层
 
别担心。
ronjonp分享了他的想法
虽然2007版没有命令mleader,但IMO qleader也可以这样做。
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:10:49 | 显示全部楼层
 
 
好主意。由于创建了线,如果仅在WCS中工作,我有一个想法,即使用场线的delta属性 160422trci7phd9d6df7rj.png
 
v2007使用qleader而不是mleader。
 
[编辑]
现场自动乘法公式在windows x64测试的x86(32位)中似乎不起作用
直线的增量特性参照UCS,即:在命令重新生成时,在不同UCS或WCS中工作时,可以更新偏差值
-在“and”表达式中计算trans UCS和输出“str”
-由于entlast不是多行文字,因此在addleader之后,多行文字对齐entmod不起作用
 
仅适用于WINDOWS x86(32位)
[code](vl load com)(defun c:devtest2(/*error*p1 p2 p3 ex del obj str mtx)(setvar'fielddisplay 0)(setq*msps*((lambda(doc)(foreach x'(ActiveDocument ActiveLayout Block)(setq doc(vlax get doc x)))(vlax get acad object))*error*'((msg)(princ“\n*cancel*”)(while(and(setq p1(getpoint“\n pick 1st point…))(setq p2(getpoint“\n点击第二点…))(setq en(entmakex(vl list*'(0。“LINE”)'(8。“DEVISION”)'(62.8)(mapcar(λb)(cons a(set b(trans(eval b)1 0)))'(10 11)'(p1 p2)))obj(vlax ename->vla object en)p2(mapcar)(λ(a b)(*(+a b)0.5))p1 p2))(setq p3(getpoint(trans p2 0 1)”\n指定引线着陆位置:“)(setq p3(trans p3 1 0)del(vlax get obj三角洲);str(XY->field obj 2 3 0)str(XY->field32 obj 2 0 1000 0);对于acad2007-windows x86(32位))(progn(vla addleader*msps*(vlax safearray fill(vlax make safearray 5’(0.5))(append p2 p3))(progn(setq mtx(vla addmtext*msps*(vlax-3d-point p3)(*(+5(apply'max(mapcar)(λ)(strlen(rtos x 2 3)))del))(getvar'textsize))str));;;使用vla方法(mapcar’(λ(a b)(vlax put mtx a b))’(附着点旋转)(列表(if(car(mapcar’<p2 p3))4 6)((-2.pi)(角度’(0.0.0。)(getvar'ucsxdir)))mtx)acLineWithArrow));progn);while(*error*nil)(princ));;;Windows x86(32位);;;XY->FIELD32:生成快速XY点字段代码-hanhphuc;;;obj-VLA对象;;;u-单位1=科学2=小数3=工程4=建筑5=分数6=电流;;;prec-精度;;;sc-乘数因子(学分:受李·麦克的fieldmath启发);;;模式-(点、*文字、圆弧、圆、椭圆和三角形)0=默认;;;(直线、圆弧、椭圆)1=起点,2=终点;V1.1:修复以支持起点和终点,维护5个参数(defun XY->field32(obj u prec sc mode/prop pfx XY)(setq XY 0;;;用户最喜欢的前缀格式默认值0=E&N,1=X&Y pfx(if(zerop XY)'(“E”“N”)'(“X”“Y”))(if(和(setq prop(nth mode(vl remove nil)(mapcar)(lambda(X)(if(vlax-property-available-p obj X)X))'(“坐标”“Center”“插入点”“TextPosition”“Origin”“Delta”“StartPoint”“EndPoint”)(非(vlax-erased-p obj))(
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 00:44 , Processed in 2.854163 second(s), 74 queries .

© 2020-2025 乐筑天下

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