5币 求标注等分小程序
本帖最后由 cjjh8301 于 2012-4-28 11:06 编辑要求程序可实现将整个的标注等量拆分成N个标注,N是键盘输入值,主要是针对线性及对齐标注,如圆弧、角度标注也能实现则更好。
本帖最后由 dwg001 于 2012-5-1 08:19 编辑
;;;;dwg001 早期练习
;; 现小作修改
(defun c:df (/ang ang1-0 dimstl dist dxf ent i inter j l lay obj oldecho oldla oldmode oldsty p0 p0- p1 p2 p2- r)
(setq oldmode (getvar 'osmode)
oldla (getvar 'clayer)
oldecho (getvar 'cmdecho)
oldsty(getvar 'dimstyle)
)
(setvar 'osmode0)
(setvar 'cmdecho 0)
(while (setq obj (entsel "\n...选择需等分的标注> "))
(setq
J (getint "\n...输入等分标注数> ")
ent (car obj)
dxf (entget ent)
lay (cdr (assoc 8 dxf))
dimstl (cdr (assoc 3 dxf))
)
(if (and obj (> J 1) (= (cdr (assoc 0 dxf)) "DIMENSION"))
(progn
(setq i 0
r 0
)
(command "-layer" "s" lay "")
(command "dimstyle" "r" dimstl)
(setq P0 (cdr (assoc 10 dxf))
P2 (cdr (assoc 13 dxf))
P1 (cdr (assoc 14 dxf))
)
(setq L (distance p1 p0)
ang1-0 (angle P1 P0)
p0- (polar p0(- ang1-0(/ pi 2)) 50)
p2- (polar p2ang1-0 50)
inter (inters p0 p0-p2 p2- nil))
(if (/= L (distance p2 inter))(progn
(setq dxf (subst
(cons 13 (polar inter (- ang1-0 pi) L))
(assoc 13 dxf)
dxf) )
(entmod dxf)
(setqP2 (cdr (assoc 13 dxf)))
) );end_ if
(setq ang(angle P1 P2)
dist (/ (distance P1 P2) J)
P2 (polar P1 ang dist)
)
(command "dim1" "ali" P1 P2 P0 "")
(while (< r (- J 1))
(setq P2 (polar P2 ang dist))
(command "dim" "con" P2 "" "e")
(setq r (1+ r))
)
(setq i (1+ i))
(entdel ent)
)
)
(setvar 'clayer oldla)
(command "dimstyle" "r" oldsty)
)
(princ "\n...等分标注数=")
(princ J)
(princ "\n...[学lisp练习: 尺寸标注等分]")
(setvar 'osmode oldmode)
(setvar 'cmdecho oldecho)
(princ)
)
类此命题都得有配合调试用的图纸(*.Dwg)
得包含充分的样例,分述原图与成果图
若只有概念性的描述殆望同行才能解读出 实际很简单,就是一个命令实现等分标注的功能,比如图中的标注100变成4个25标注。 本帖最后由 dwg001 于 2012-4-29 09:24 编辑
早期的一个练习,试试.
dwg001 发表于 2012-4-29 09:25 static/image/common/back.gif
;;学lisp早期的练习, 试试.
;;dwg001 早期练习
请问 dwg001 ,如何改,才能先选择标注,再输入等分数,且空选时,程序退出? 程序可用,但是有个问题,等分后标注都归0层了,能不能改下,等分后图层不变呀。 小作修改,见5楼更新.再试试.
用了一会,发现个问题比较影响使用的,就是标注起点不在一直线的话,线性标准等分后标注都旋转了,如图
等分之后连标注样式都改了啊
页:
[1]
2