竣工偏差
你好我一直试图修改ASMI的Deviation_Tag例程,该例程在两个拾取点之间产生x,y偏差,但没有成功。与用箭头显示结果不同,我希望将结果显示在带有+/-前缀的框中,并且在启动lisp时可以选择设置比例。
ASMI的偏差标签。lsp引用了四个包含箭头和属性定义的图形文件,我已经创建了自己的块(Deviation_BOX.dwg),我可以简单地更改代码来加载这个文件(所有四个象限都是同一个文件-不太理想,但我不太清楚)。
上面的链接是到原始文件和附件显示了我的屠宰努力。如果有人能在+/-前缀和刻度方面帮助我,我将不胜感激。
有什么好处,但不是现在必须的,将是从块的最近角到竣工点(第二个拾取点)的箭头。这可以是四个角中的任意一个,具体取决于块的放置位置。
我被这件事难住了。
谢谢
私有
DevBox。LSP
样品图纸
偏差箱。图纸 看看这4个角箭头等,我知道在CIV3d tbm标签是一个痛苦。
http://www.cadtutor.net/forum/showthread.php?104628-使用文本文件添加和操作动态块 嗨BIGAL
我不确定我是否遗漏了什么,但我在那个帖子上找不到任何有用的东西。我只是试着选取两个点(一个是设计位置,另一个是竣工位置),并根据样本在方框中绘制两个点之间的偏差。上图。如果我在你发送的链接中遗漏了什么,可能是因为我不是lisp专家。
谢谢
嗨,不是每个人都有像你这样的更新版本的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会帮助你,祝你好运 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
(defun +rtos (x u p)
(strcat (if (> x 0)
"+"
""
)
(rtos x u p)
)
)
(+rtos 10. 2 0)
"+10"
(+rtos -10. 2 0)
"-10"
谢谢hanhphuc。我已将您的代码添加到上面的代码中。非常感谢你的帮助。
我将不得不尝试显示一个箭头,从方框的最近角到竣工点。欢迎提出建议 你为什么不使用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)
)
别担心。
ronjonp分享了他的想法
虽然2007版没有命令mleader,但IMO qleader也可以这样做。
好主意。由于创建了线,如果仅在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]