Demesne 发表于 2022-7-5 15:04:20

竣工偏差

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

BIGAL 发表于 2022-7-5 15:11:48

看看这4个角箭头等,我知道在CIV3d tbm标签是一个痛苦。
 
http://www.cadtutor.net/forum/showthread.php?104628-使用文本文件添加和操作动态块

Demesne 发表于 2022-7-5 15:24:18

嗨BIGAL
 
我不确定我是否遗漏了什么,但我在那个帖子上找不到任何有用的东西。我只是试着选取两个点(一个是设计位置,另一个是竣工位置),并根据样本在方框中绘制两个点之间的偏差。上图。如果我在你发送的链接中遗漏了什么,可能是因为我不是lisp专家。
 
谢谢

hanhphuc 发表于 2022-7-5 15:30:51

 
嗨,不是每个人都有像你这样的更新版本的cad,所以不能测试你的块。
 
但在我看来,如果去掉abs,它应该显示为负值
 
i、 e:(rtos(abs(…));删除绝对数
 
(rtos(*(car deVal)1000)2 0)
(rtos(*(cadr deVal)1000)2 0))
 
FWIW我记得它有点像“竣工”(理论和实际点)?不使用块。
 
它使用TEXTSIZE作为关联比例。
 
在这里,我修复了“osmode”的小错误

(defun c:devtest (/ p1 p2 p3 *error* var os osaved delta _mirror s ip)

;sub-functions to be included here
;defun _mirror & defun delta


;to adjust scale,
;command: TEXTSIZE
(defun *error* (msg)
   (if        var
   (mapcar 'setvar var osaved)
   )
   )
(if (not (tblsearch "LAYER" "DIFF"))
   (vl-cmdf "-Layer" "m" "DIFF" "")
   )
(setq        var    '(osmode angbase angdir cmdecho clayer mirrtext)
osaved (mapcar 'getvar var)
os   (car osaved) ; or favourite osmode = 40
)
(mapcar 'setvar var (list os (/ pi 2.0) 1 0 "DIFF" 0))
(terpri)
(while (and (setq p1 (getpoint "\rTheoretical point..       "))
      (setq p2 (getpoint p1 "\rActual point..            "))
      (setvar 'osmode 0)
      (setq p3 (getpoint p2 "\rPlacing arrow..         "))
      )
   (delta p1 p2 p3)
   (setvar 'osmode os)
   )

(if osaved
   (mapcar 'setvar var osaved)
   )

(princ)
)

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

Demesne 发表于 2022-7-5 15:32:54

DWG文件重新上传为v2013。谢谢你指出这一点。我刚换了一台新的笔记本电脑(显然不是很好)。
 
我去掉了abs,并反转了两个变量ppPos和bsPos,因此偏差显示为从提议到设计,而不是从设计到提议。这是可行的,并且确实在需要的地方显示了负号,但我被如何在那里放置加号以显示正偏差所困扰-我知道假设没有符号的数字是正的,但我只是认为在这种情况下看起来会更好。
 
这就是我所处的位置:
 
; Original code by ASMI (Deviation_Tag.LSP) - CADTutor
; Badly butchered by Demesne 11/07/18

(defun c:devbox( / *error* oldEcho ppPos bsPos deVal insBl)

(defun *error* (msg)
    (setvar "CMDECHO" oldEcho)
); end of *error*

(defun +rtos (x u p)
   (strcat
    (if (> x 0)
      "+"
      "")
    (rtos x u p)
)
   )

(setq oldEcho(getvar "cmdecho"))
(setvar "CMDECHO" 0)

(setq bsPos(getpoint "\nPick proposed position > "))
(setq ppPos(getpoint "\nPick as-built position > "))

(setq deVal(mapcar '- ppPos bsPos))

(setq insBl "Deviation_BOX")

(if
    (not(tblsearch "block" insBl))
    (progn
      (if
       (setq blPath(findfile(strcat insBl ".dwg")))
    (command "-insert" blPath "_s" "1" pause "0"
          (+rtos(*(car deVal)1000)2 0)
          (+rtos(*(cadr deVal)1000)2 0))
       (alert(strcat "\n*** File " (strcat insBl ".dwg") " not found! *** "))
      ); end if
    ); end progn
    (command "-insert" insBl "_s" "1" pause "0"
      (+rtos(*(car deVal)1000) 2 0)
      (+rtos(*(cadr deVal)1000) 2 0))
); end if

(setvar "cmdecho" oldEcho)
(princ)
); end of c:devbox

hanhphuc 发表于 2022-7-5 15:38:21

 

(defun +rtos (x u p)
(strcat (if (> x 0)
    "+"
    ""
    )
(rtos x u p)
)
)

(+rtos 10. 2 0)
"+10"
(+rtos -10. 2 0)
"-10"


Demesne 发表于 2022-7-5 15:46:49

谢谢hanhphuc。我已将您的代码添加到上面的代码中。非常感谢你的帮助。
 
我将不得不尝试显示一个箭头,从方框的最近角到竣工点。欢迎提出建议

ronjonp 发表于 2022-7-5 15:55:01

你为什么不使用mleader?以下是一些示例代码(假设您当前的mleaderstyle包含文本)
(defun c:foo (/ p1 p2 p3 r)
(cond        ((and (setq p1 (getpoint "\nPick first point:"))
      (setq p2 (getpoint "\nPick second point:"))
      (setq r (mapcar '(lambda (x)
                       (strcat (cond ((minusp x) "")
                                     ("+")
                               )
                               (rtos (* x 1000) 2 0)
                       )
                     )
                      (mapcar '- p1 p2)
              )
      )
)
(entmakex (list '(0 . "line") '(8 . "deviation") '(62 .(cons 10 p1) (cons 11 p2)))
(setq p2 (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.)))
(if (setq p3 (getpoint p2 "\nSpecify leader landing location: "))
   (command "_.mleader" p2 p3 (strcat "E " (car r) "\\PN " (cadr r)))
)
)
)
(princ)
)

hanhphuc 发表于 2022-7-5 15:59:20

 
别担心。
ronjonp分享了他的想法
虽然2007版没有命令mleader,但IMO qleader也可以这样做。

hanhphuc 发表于 2022-7-5 16:10:49

 
 
好主意。由于创建了线,如果仅在WCS中工作,我有一个想法,即使用场线的delta属性
 
v2007使用qleader而不是mleader。
 
[编辑]
现场自动乘法公式在windows x64测试的x86(32位)中似乎不起作用
直线的增量特性参照UCS,即:在命令重新生成时,在不同UCS或WCS中工作时,可以更新偏差值
-在“and”表达式中计算trans UCS和输出“str”
-由于entlast不是多行文字,因此在addleader之后,多行文字对齐entmod不起作用
 
仅适用于WINDOWS x86(32位)
(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))(
页: [1]
查看完整版本: 竣工偏差