- 积分
- 6367
- 明经币
- 个
- 注册时间
- 2010-11-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 mandala 于 2013-11-19 15:27 编辑
开个贴,大家交流下cass9.1下的编程和应用心得。其实对lisp编程来说,cass9.1还是cass7.0几乎没有什么差别。
我先来问两个问题:
1、为什么cass9.1下,按键盘的“5”(无论大键盘还是小键盘)都会重复上一条cass命令?如果打开cass直接按“5”,那么进入的是"DD"这个程序,如果用工具画了个符号(如路灯)后,那么按“5”就重复画路灯的命令。但是cad内部命令如“pl”等不会重复。我单位所有cass都出现这个情况。
2、cass右侧菜单里“常用文字”一栏里边的文字(如“水泥”,“混”,“塘”等),默认宽高比是0.8,如何更改使它们的宽高比永远为1?
抛砖引玉,贴一个框选dwg中的线,将其变全部为cass下带编码的线型的lisp,可以将LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,circle,统一变成LWPOLYLINE :
注意:1、该lisp需要cad下的express工具集支持,如没安装express无法工作;
2、该命令只列出了变更陡坎的命令。如果大家觉得有用,可以参照(c:dk)里的方式自行添加变更其它线型的命令。
- (defun c:dk ()
- (setvar "CMDECHO" 0)
- (ltlx "10421" "dmtz" "204201" "0")
- ) ;_ 结束defun
- ;给选择集中的多义线加层、线型、编码、宽度
- (defun ltlx ( lt1 ly1 bm1 wide / ss ent num ss1)
- (if (cadr (ssgetfirst))
- (setq ss (ssget))
- (setq
- ss (ssget '((0 . "LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,CIRCLE"))
- ) ;_ 结束ssget
- ) ;_ 结束setq
- ) ;_ 结束if
- (setq ss (connectbypline ss))
- (if (null(tblsearch "ltype" lt1))(command ".linetype" "l" lt1 "acadiso.lin" "" ))
- (command "change" ss "" "p" "lt" lt1 "")
- (command "change" ss "" "p" "la" ly1 "")
- (command "._pedit" "m" ss "" "w" wide "")
- (setq num 0 )
- (repeat (sslength ss)
- (setq ent (ssname ss num))
- (entmod (append (entget ent) (list (append (list -3) (list (append '("south") (list(cons 1000 bm1))))))))
- (setq num (1+ num))
- )
- (princ)
- ) ;_ 结束defun
- ;;子程序,将输入选择集ssp中的LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,circle,统一变成LWPOLYLINE,
- ;;如果其中有首尾相连的线,则连接成一条LWPOLYLINE,
- ;;最后返回一个名为xss的选择集。
- (defun connectbypline (ssp / a xss xn ent)
- (acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide)))
- ;;加载flatten函数
- (setq a 0
- xss (ssadd)
- ) ;_ 结束setq
- (if
- (and (= (sslength ssp) 1)
- (or (= (cdr (assoc 0 (entget (ssname ssp 0)))) "LWPOLYLINE")
- (= (cdr (assoc 0 (entget (ssname ssp 0)))) "POLYLINE")
- ) ;_ 结束or
- ) ;_ 结束and
- (ssadd (ssname ssp 0) xss)
- ;;当选中的仅有一条pline的时候另作处理。
- (progn
- ;;如果有很多图元的话,全部变成pline并加入选择集xss:
- (repeat (sslength ssp)
- (setq xn (ssname ssp a))
- (setq ent (entget xn))
- (cond
- ((= (cdr (assoc 0 ent)) "LWPOLYLINE")
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "POLYLINE")
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "LINE")
- (command "pedit" xn "y" "")
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "SPLINE")
- (setq ss (ssadd))
- (ssadd xn ss)
- (acet-flatn ss nil)
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ent)) "ARC")
- (command "pedit" xn "y" "")
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ((= (cdr (assoc 0 ENT)) "CIRCLE")
- ;;圆的处理比较复杂
- (setq cp (cdr (assoc 10 ent))
- r (cdr (assoc 40 ent))
- ) ;_ 结束setq
- (entmake
- (setq lst (list
- '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(67 . 0)
- '(410 . "Model")
- '(100 . "AcDbPolyline")
- '(90 . 2)
- '(70 . 129)
- (cons 10 (polar cp 0 r))
- '(40 . 0)
- '(41 . 0)
- '(42 . -1)
- (cons 10 (polar cp pi r))
- '(40 . 0)
- '(41 . 0)
- '(42 . -1)
- ) ;list
- ) ;setq
- ) ;entmake
- (command "_matchprop" xn (entlast) "")
- (entdel xn)
- (setq xn (entlast))
- (ssadd xn xss)
- )
- ) ;cond
- (setq a (+ a 1))
- ) ;repeat,以上将每个图元都变成pline并加入了选择集。
- (command "pedit" "m" xss "" "j" 0.1 "") ;;把能连的连上。
- (command "._pedit" "m" xss "" "l" "on" "");;重新生成多义线,使得线型连贯。
- (setq xss xss)
- ) ;progn
- ) ;if
- ) ;_ 结束defun
|
|