尺寸等分
请问将上面的尺寸标注改为多个等分显示,谢谢 论坛早就有了:;等分尺寸(dwg001)
(defun c:dfcc(/ ang dist dxf ent i j obj p0 p1 p2 r)
(command "undo" "be")
(setq J (getint "\n请输入等分数:")
obj (entsel "\n请选择需等分的标注:")
ent (car obj)
dxf (entget ent))
(if (and obj (> J 1) (= (cdr (assoc 0 dxf)) "DIMENSION"))
(progn (setq i 0 r 0)
(setq P0 (cdr (assoc 10 dxf))
P2 (cdr (assoc 13 dxf))
P1 (cdr (assoc 14 dxf)))
(setq ang (angle P1 P2))
(setq dist (/ (distance P1 P2) J))
(setq 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)))
(command "undo" "e")
(princ)) xyp1964 发表于 2013-3-21 20:00
思路:量取两点距离,算出单个长度,再标注n个标注
D:\坐标类\等分标注 QWQWQWQ 发表于 2017-12-27 11:54
学了多年,自己用VB搞定了
思路:量取两点距离,算出单个长度,再标注n个标注 取出距离的属性和尺寸界线的位置点,循环标注等分的次数,就可以了吧! (defun c:dtt ()
(if (setq ss (ssget '((0 . "DIMENSION")(-4 . "<OR")(70 . 32)(70 . 33)(70 . 34)(70 . 37)(-4 . "OR>")))) (progn
(setvar "DIMZIN" 8)
(setvar "LUPREC" 1) ; 此处设定小数精度
(setq i 0)
(setq div (getint "\n输入要等分的量: "))
(repeat (sslength ss)
(setq ent (entget(ssname ss i))
txt (cdr(assoc 42 ent))
dtxt (if(>(cdr(assoc 70 ent))33)(rtos(/(* txt 180) pi div) 2 0)(rtos(/ txt div)))
ent (subst (cons 1 (strcat (itoa div) "x" dtxt "=<>")) (assoc 1 ent) ent))
(entmod ent)
(setq i (1+ i))
)
))
(princ)
) 上面的代码是我要的结果 上面的代码不是我要的结果 你到底要干嘛 我要的是如6000尺寸分三段为2000,2000,2000
它写出的是3*200=6000 试试这个呢 请改成直接等分课标标注线就好,谢谢
;;;一键等分标注直线或多线段
;;;暂未加入等分圆弧、圆等功能,待有时间再完善。
;;;编写者:程圣彬
;;;时间:2012-12-08
;;;2012-12-10 改选取对象为指定两点
;;;2013-03-04 修正了撤销操作是系统变量没有恢复的bug
(defun c:bzdfdf ( / *error*_bak *error*_my angle_p0p2 dist_offset div_no ent_object ent_pt i i_dco i_ppn osmode_old point1 point2 pt_coordinate pt_dco pt_end pt_list pt_list_dco pt_list_dco_length pt_name pt_pline_list pt_pline_list_length pt_pline_no pt_start pt1 pt3 repeat_no ss_after_div ss_object)
(setq point1 (getpoint "\n指定第一点"))
(setq point2 (getpoint point1 "\n指定第二点"))
(setq div_No (getint "\n 输入等分数量: "))
(setq dist_offset (getdist "\n 输入标注偏移距离: "))
(command "_.undo" "BE")
(setq *error*_bak *error*)
(setq *error* *error*_my)
(setq osmode_old (getvar "osmode"))
(setvar "CMDECHO" 0)
(setvar "osmode" 0)
(graphscr)
(entmake (list '(0 . "LINE") (cons 10 point1) (cons 11 point2)))
;;;(princ "\n 选择要等分标注的对象: ")
(setq ss_object (ssget "L"))
;;;(setq ss_object (entget (ssname (ssget "L") 0)))
(setq ent_object (entget (ssname ss_object 0)))
(if (= (cdr (assoc 0 ent_object)) "LWPOLYLINE")
(progn
(setq Pt_pline_No (length ent_object));获得多义线组码表的长度
(setq i_PpN 0);设定提取义线组码表中顶点坐标的循环初始值
(setq Pt_pline_list nil);设定提取义线组码表中顶点坐标列表的初始值
(repeat Pt_pline_No
(if (= (car (nth i_PpN ent_object)) 10)
(setq Pt_pline_list (append Pt_pline_list (list (cdr (nth i_PpN ent_object)))))
)
(setq i_PpN (1+ i_PpN))
)
(setq Pt_pline_list_length (length Pt_pline_list));获取多义线顶点列表的长度
(setq pt_start (nth 0 Pt_pline_list));获取多义线的起点
(setq pt_end (nth (- Pt_pline_list_length 1) Pt_pline_list));获取多义线的终点
)
(progn
(setq pt_start (cdr (assoc 10 ent_object)));获取直线的起点
(setq pt_end (cdr (assoc 11 ent_object)));获取直线的终点
)
)
;;;(setq dist_offset 100)
(command "_.DIVIDE" ss_object div_No)
(setq ss_after_div (ssget "P"));获取等分点
(setq repeat_No (sslength ss_after_div);获取等分点数量
i 0
)
(setq Pt_list nil)
(repeat repeat_No
(setq Pt_name (ssname ss_after_div i));获取等分点图元名
(setq ent_Pt (entget Pt_name));获取等分点组码
(setq Pt_coordinate (cdr (assoc 10 ent_Pt)));获取等分点坐标
(setq Pt_list (append Pt_list (list Pt_coordinate)));生成等分点列表
(setq i (1+ i))
)
(setq Pt_list_DCO (append (cdr Pt_list) (list pt_end)));获取去除首个等分点的并加入直线或多义线短点的列表
(setq pt1 (car Pt_list);取得等分点的第一个点
angle_p0p2 (angle pt_start pt1)
pt3 (polar pt_start (- angle_p0p2 (dtr 90)) dist_offset);取得标注线的位置
)
(command "_.dimaligned" pt_start pt1 pt3);标注起点及第一个等分点
(setq Pt_list_DCO_length (length Pt_list_DCO))
(setq i_DCO 0)
(repeat Pt_list_DCO_length
(setq Pt_DCO (car Pt_list_DCO))
(command "_.DIMCONTINUE" Pt_DCO);连续标注
(setq Pt_list_DCO (cdr Pt_list_DCO))
)
(command "_.DIMCONTINUE" "" "");结束连续标注
(command "_.ERASE" ss_object "");删除直线
(command "_.ERASE" ss_after_div "");删除等分点
(command "_.undo" "E")
(setq *error* *error*_bak)
(setvar "CMDECHO" 1)
(setvar "osmode" osmode_old)
(princ "\n -->-->>等分标注<dfbz>完成<<--<--【By:程圣彬Date:2012-12-08】 ")
(princ)
)
(princ "\n -->-->>一键等分标注直线或多线段,暂未加入等分圆弧、圆等功能,待有时间再完善<<--<--")
(princ "\n -->-->> 等分标注<dfbz> <<--<--【By:程圣彬Date:2012-12-08】")
(princ)
;;;出错系统变量恢复函数
(defun *error*_my (msg)
(command)
(setq *error* *error*_bak)
(setvar "CMDECHO" 1)
(setvar "osmode" osmode_old)
; (print msg)
)
;;; ===角度转弧度===
(defun dtr (ang0)
(* ang0 (/ pi 180.0))
)
(princ)