【编程申请】批量标半径
一般的半径标注都要一个一个的点,有没有多选的那种,所有被选中的曲线都自动标注半径(在曲线中心)。应该还是很实用的,特别是批量的时候,, <p></p><p>试试下面的程序,如果要放到特定的层,自己去加吧</p><p>(defun c:rds (/ rs n po px py rv ang1 ang2 angc cx cy rslst)<br/> (setq rs (ssget '((0 . "arc,circle"))))<br/> (if rs<br/> (progn<br/> (setq n 0)<br/> (repeat (sslength rs)<br/> (setq rslst (entget (ssname rs n)))<br/> (setq po (cdr (assoc 10 rslst)));圆心<br/>;;; (princ " center is:")<br/>;;; (princ po)<br/> (setq px (car po))<br/> (setq py (cadr po))<br/> (setq rv (cdr (assoc 40 rslst)));半径<br/>;;; (princ "radius is:")<br/>;;; (princ rv)<br/> (cond<br/> ((= "ARC" (cdr (assoc 0 rslst)))<br/>;;; (princ "\n")<br/>;;; (princ "arc")</p><p> (setq ang1 (cdr (assoc 50 rslst)))<br/> (setq ang2 (cdr (assoc 51 rslst)))<br/> (setq angc (/ (+ ang2 ang1) 2.0))<br/> (setq cx (+ px (* rv (cos angc))))<br/> (setq cy (+ py (* rv (sin angc))))<br/>;;; (princ "\n poic is")<br/>;;; (princ (list cx cy))<br/> )<br/> ((= "CIRCLE" (cdr (assoc 0 rslst)))<br/>;;; (princ "\n")<br/>;;; (princ "circle")<br/> (setq angc (/ pi 4.0))<br/> (setq cx (+ px (* rv (cos angc))))<br/> (setq cy (+ py (* rv (sin angc))))<br/>;;; (princ "\n poic is")<br/>;;; (princ (list cx cy))<br/> )<br/> )<br/> (command "dimradius" (list (ssname rs n) (list cx cy 0)) "")<br/> (setq n (1+ n))<br/> )<br/> )<br/> )<br/>)</p> (defun c:test ()<br/> (setq ss (ssget '((0 . "ARC,CIRCLE")))<br/> i -1<br/> )<br/> (while (setq s1 (ssname ss (setq i (1+ i))))<br/> (setq pt (xyp-get-dxf 10 s1))<br/> (command "dim" "rad"(list s1 pt) "" "" "e")<br/> )<br/> (princ)<br/>)<br/>(defun xyp-get-DXF (code ename) (cdr (assoc code (entget ename)))) <p>很好 我有时也很用着 但能统计下相同的有几个并能以列表的形式输出就好</p>
页:
[1]