本帖最后由 小男人漏水 于 2017-12-21 11:01 编辑
 - (defun c:fff (/ ss i e cpt pts pt1)
- (while (and (setq s1 (entsel "\n选择3/4螺纹线孔 :"))
- (setq ent (entget (car s1)))
- (wcmatch (setq tn (cdr(assoc 0 ent))) "ARC,"))
- (setq pt1 (cadr s1))
- (setq r (cdr(assoc 40 ent)))
- ;判断是否有2细线层。没有新建细线层
- (if (=(tblobjname "LAYER" "2细线层") nil)
- (progn
- (entmake (list
- '(0 . "LAYER")
- '(100 . "AcDbSymbolTableRecord")
- '(100 . "AcDbLayerTableRecord")
- '(6 . "bylayer") ;线型
- '(62 . 4) ;颜色
- '(70 . 0) ;图层状态
- (cons 2 "2细线层") ;图层名
- )
- )
- )
- )
- ;所选线改变为2细线层
- (setq *laysel* (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
- ;(if (and (setq en (car (entsel "\n选择目标对象:")))
- (if (and (setq en (car s1))
- (setq obj (vlax-ename->vla-object en))
- (setq cor (vla-get-color obj))
- ;(setq pt (getpoint "\n基点:"))
- )
- (progn
- ;; 分辨颜色
- (cond ((= cor 256) ;_ 随层
- (setq cor (vla-get-color (vla-item *laysel* (vla-get-layer obj))))
- )
- ((= cor 0) ;_ 随块
- (setq cor 7)
- ) )
- ;; 筛选图层
- (vlax-for lay *laysel*
- (if (= (vla-get-color lay) cor)
- (setq lay-lst (cons (vla-get-name lay) lay-lst))
- ) )
- (if lay-lst
- (foreach lay lay-lst
- (if lay-str
- (setq lay-str (strcat lay-str "," lay))
- (setq lay-str lay)
- )
- )
- )
- ;; 形成选择集
- (if lay-str
- (setq ss (ssget "x" (list '(-4 . "<OR") (cons 0 lay-str) (cons 62 cor) '(-4 . "OR>"))))
- (setq ss (ssget "x" (list (cons 62 cor))))
- )
- (vl-cmdf "change" ss "" "p" "la" "2细线层" "lt" "bylayer" "c" "bylayer" "")
- ;(vl-cmdf "move" ss "" pt)
- ;(vl-cmdf pause)
- )
- )
- ;;判断筛选直径等于所选圆弧直径并且线处于2细线层
- (setq ss (ssget (list '(0 . "arc")'(-4 . "=")(cons 40 r)'(8 . "2细线层"))) i -1)
- (while (setq e (ssname ss (setq i (1+ i))))
- (setq cpt(cdr(assoc 10 (entget e))))
- (if(not(member cpt pts))
- (setq pts(cons cpt pts)) ) )
- (length pts)
- ;;判断筛选
- (setq qztxt (if (setq qz (length pts)) (strcat (itoa qz) "-") ""))
- (if (= 1 (length pts))
- (setq qztxt ""))
- ;判断孔数量是否为1
- (if (= tn "ARC") (progn
- (setq r (cdr(assoc 40 ent)))
- (command ".LENGTHEN" (car s1) "")
- (if (>= (getvar "PERIMETER") (* 1.5 pi)) (progn
- (setq qztxt (strcat qztxt "M" (rtos (+ r r) 2) "压铆螺母" ))
- (command "DIMDIAMETER" pt1 "T" qztxt PAUSE)
- )
- ;(command "DIMRADIUS" pt1 "T" (strcat qztxt "<>") PAUSE)
- )
- )
- ;(command "DIMDIAMETER" pt1 "T" (strcat qztxt "<>") PAUSE)
- )
- )
- (princ)
- )
这个代码步骤是:1.选择4/3圆弧后,并加入2号层
2.筛选出重复圆弧后,统计不重复数量N
3.然后标注出N-M*压铆螺母
现在出现2个问题,
1.第一个是输入命令: fff
选择3/4螺纹线孔 :应用程序错误: 命令输入时发送的类型无效
但是不影响结果。
2.选择弧线以后框选范围出现无法标注:这个问题是间断性出现的。
《
选择3/4螺纹线孔 :应用程序错误: 命令输入时发送的类型无效
选择对象: 找到 1 个
选择对象: 指定对角点: 找到 0 个
选择对象: 指定对角点: 找到 3 个 (1 个重复),总计 3 个
选择对象: .LENGTHEN
选择对象或 [增量(DE)/百分数(P)/全部(T)/动态(DY)]:
当前长度: 10.4720,包含角: 300
选择对象或 [增量(DE)/百分数(P)/全部(T)/动态(DY)]:
命令: DIMDIAMETER
选择圆弧或圆:
选择圆弧或圆: T
*无效选择*
需要单个对象。
; 错误: 函数被取消
》》》
劳烦各位大神给看看,上面的代码都是在咋们群里兄弟提供后我自己拼接了一下。
|