谢谢你的想法。使用“Rad”替换DXF 40?
如果您的lst变量是静态的,您可以构建如下代码。
(setq lst '((2.5 "M3" 0.06 1.5)
(3.3 "M4" 0.08 1.5)
(4.2 "M5" 0.1 2.5)
(5.0 "M6" 0.12 3.0)
(6.8 "M8" 0.16 4.0)
(8.5 "M10" 0.2 5.0)
(10.5 "M12" 0.24 6.0)
(12.0 "M14" 0.28 7.0)
(14.0 "M16" 0.32 8.0)
(15.5 "M18" 0.36 9.0)
(17.5 "M20" 0.4 10.0)
)
)
(ssget
(append '((0 . "circle") (-4 . "<or"))
(mapcar '(lambda (v) (cons 40 (/ v 2.)))
(mapcar 'car lst)
)
'((-4 . "or>"))
)
)
我建议的是一种不同的方法,使用cond代替创建LST,并设置接下来的3个变量rad=2.5“M3”0.06 1.5最后一个测试是rad>0.0(警报“未找到大小”)
Tharwat一如既往地提供了一个与您的方法相匹配的解决方案,通常有许多方法可以完成相同的任务。
谢谢你,塔瓦先生。
我测试了一下,但没有成功。没关系。我使用半径。
我有两个问题。
1、我想换一层中心线,怎么换?
(setq cir (vlax-invoke space 'addcircle pcen r)
arc (vlax-invoke space 'addarc pcen mr 4.71239 3.14159)
ln1 (vlax-invoke space 'addline p1 p3)
ln2 (vlax-invoke space 'addline p2 p4)
)
(mapcar '(lambda (x)
(vlax-put (car x) 'layer "screw")
(vlax-put (car x) 'color (cadr x))
(vlax-put (car x) "linetype" (caddr x))
(vlax-put (car x) "linetypescale" xk)
)
(list (list cir 33 cel)
(list arc 3 cel)
(list ln1 1 "center")
(list ln2 1 "center")
)
)
2.稍等片刻
不,我之前发布的应该有效,我不知道你是如何运行代码的。
我想你们有两条线,怎么可能是中心线呢?
是的,我的意思是这两条线是中心线。
你好Tharwat先生
问题2。
如果选择圆线型为“连续”,则将圆线宽更改为0.35
(setq cir (vlax-invoke space 'addcircle pcen r)
arc (vlax-invoke space 'addarc pcen mr 4.71239 3.14159)
ln1 (vlax-invoke space 'addline p1 p3)
ln2 (vlax-invoke space 'addline p2 p4)
)
(mapcar '(lambda (x)
(vlax-put (car x) 'layer "screw")
(vlax-put (car x) 'color (cadr x))
(vlax-put (car x) "linetype" (caddr x))
(vlax-put (car x) "linetypescale" xk)
)
(list (list cir 33 cel)
(list arc 3 cel)
(list ln1 1 "center")
(list ln2 1 "center")
)
)
大概试试看。
(mapcar '(lambda (x)
(vlax-put (car x) 'layer "screw")
(vlax-put (car x) 'color (cadr x))
(vlax-put (car x) "linetype" (caddr x))
(vlax-put (car x) "linetypescale" xk)
(if (and (eq (vla-get-objectname (car x)) "AcDbCircle")
(eq (vla-get-linetype (car x)) "Continuous")
)
(vla-put-lineweight (car x) acLnWt035)
)
)
(.....................
有一个简单的拼写错误,我确实纠正了它,再次看看我的最后一个答复。
非常感谢。
如果您在这里将entmake函数与实体DXF代码一起使用,则可以更好更快地获得各种属性。
谢谢你,塔瓦先生。我知道entmake,
(entmake (list (cons 0 "LINE")
(cons 8 "screw");;layer
(CONS 62 1);; colour
(cons 6"CENTER");;linetype
(cons 48 xk) ;;linescale
(cons 10 pt2);; frist point
(cons 11 pt4);;second point
)
)
(entmake (list (cons 0 "TEXT")
(cons 8 "screw")
(CONS 62 6)
(cons 10 textpt)
(cons 40 texth)
(cons 1 text)
(cons 7 "TXT")
(cons 41 1)
(cons 51 0.0)
(cons 71 0)
(cons 72 0)
(cons 73 0)
(list 210 0.0 0.0 1.0)
)
)
但是,我不知道该如何更改lisp的行层:
(mapcar '(lambda (x)
(vlax-put (car x) 'layer "screw")
(vlax-put (car x) 'color (cadr x))
(vlax-put (car x) "linetype" (caddr x))
(vlax-put (car x) "linetypescale" xk)
(if (and (eq (vla-get-objectname (car x)) "AcDbCircle")
(eq (vla-get-linetype (car x)) "Continuous")
)
(vla-put-lineweight cir acLnWt035)
)
)
(list (list cir 33 cel)
(list arc 3 cel)
(list ln1 1 "center")
(list ln2 1 "center")
)
)
如何改变文字的层次?
(if (member "isText" slst)
(progn
(setq txt (vlax-invoke space 'AddText str pcen (* mr 0.4)))
(vla-put-alignment txt acAlignmentTopCenter)
(vla-put-textalignmentpoint
txt
(vlax-3d-point (polar pcen (- _pi2) (* mr 0.17)))
)
)
)
页:
1
[2]