明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4256|回复: 9

cass下的lisp编程技术和应用:(交流贴)

[复制链接]
发表于 2013-11-17 20:25 | 显示全部楼层 |阅读模式
本帖最后由 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)里的方式自行添加变更其它线型的命令。

  1. (defun c:dk ()
  2. (setvar "CMDECHO" 0)
  3. (ltlx "10421" "dmtz" "204201" "0")
  4. ) ;_ 结束defun


  5. ;给选择集中的多义线加层、线型、编码、宽度
  6. (defun ltlx ( lt1 ly1 bm1 wide / ss ent num ss1)
  7.   (if (cadr (ssgetfirst))
  8.     (setq ss (ssget))
  9.     (setq
  10.       ss (ssget  '((0 . "LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,CIRCLE"))
  11.    ) ;_ 结束ssget
  12.     ) ;_ 结束setq
  13.   ) ;_ 结束if
  14. (setq ss (connectbypline ss))
  15. (if (null(tblsearch "ltype" lt1))(command ".linetype" "l" lt1 "acadiso.lin" "" ))
  16. (command "change" ss "" "p" "lt" lt1 "")
  17.   (command "change" ss "" "p" "la" ly1 "")
  18.     (command "._pedit" "m" ss "" "w" wide "")
  19.   (setq num 0 )
  20.   (repeat (sslength ss)
  21.   (setq ent (ssname  ss num))
  22.   (entmod (append (entget ent) (list (append (list -3) (list (append '("south") (list(cons 1000 bm1))))))))
  23.   (setq num (1+ num))
  24.   )
  25.   (princ)
  26. ) ;_ 结束defun

  27. ;;子程序,将输入选择集ssp中的LINE,POLYLINE,LWPOLYLINE,SPLINE,ARC,circle,统一变成LWPOLYLINE,
  28. ;;如果其中有首尾相连的线,则连接成一条LWPOLYLINE,
  29. ;;最后返回一个名为xss的选择集。

  30. (defun connectbypline (ssp / a xss xn ent)
  31.   (acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide)))
  32.   ;;加载flatten函数
  33.   (setq  a   0
  34.   xss (ssadd)
  35.   ) ;_ 结束setq
  36.   (if
  37.     (and (= (sslength ssp) 1)
  38.    (or (= (cdr (assoc 0 (entget (ssname ssp 0)))) "LWPOLYLINE")
  39.        (= (cdr (assoc 0 (entget (ssname ssp 0)))) "POLYLINE")
  40.    ) ;_ 结束or
  41.     ) ;_ 结束and
  42.      (ssadd (ssname ssp 0) xss)
  43.      ;;当选中的仅有一条pline的时候另作处理。
  44.      (progn
  45.        ;;如果有很多图元的话,全部变成pline并加入选择集xss:
  46.        (repeat (sslength ssp)
  47.    (setq xn (ssname ssp a))
  48.    (setq ent (entget xn))
  49.    (cond
  50.      ((= (cdr (assoc 0 ent)) "LWPOLYLINE")
  51.       (ssadd xn xss)
  52.      )
  53.      ((= (cdr (assoc 0 ent)) "POLYLINE")
  54.       (ssadd xn xss)
  55.      )
  56.      ((= (cdr (assoc 0 ent)) "LINE")
  57.       (command "pedit" xn "y" "")
  58.       (setq xn (entlast))
  59.       (ssadd xn xss)
  60.      )
  61.      ((= (cdr (assoc 0 ent)) "SPLINE")
  62.       (setq ss (ssadd))
  63.       (ssadd xn ss)
  64.       (acet-flatn ss nil)
  65.             (setq xn (entlast))
  66.       (ssadd xn xss)
  67.      )
  68.      ((= (cdr (assoc 0 ent)) "ARC")
  69.       (command "pedit" xn "y" "")
  70.       (setq xn (entlast))
  71.       (ssadd xn xss)
  72.      )
  73.      ((= (cdr (assoc 0 ENT)) "CIRCLE")
  74.       ;;圆的处理比较复杂
  75.       (setq cp (cdr (assoc 10 ent))
  76.       r  (cdr (assoc 40 ent))
  77.       ) ;_ 结束setq
  78.       (entmake
  79.         (setq lst  (list
  80.         '(0 . "LWPOLYLINE")
  81.         '(100 . "AcDbEntity")
  82.         '(67 . 0)
  83.         '(410 . "Model")
  84.         '(100 . "AcDbPolyline")
  85.         '(90 . 2)
  86.         '(70 . 129)
  87.         (cons 10 (polar cp 0 r))
  88.         '(40 . 0)
  89.         '(41 . 0)
  90.         '(42 . -1)
  91.         (cons 10 (polar cp pi r))
  92.         '(40 . 0)
  93.         '(41 . 0)
  94.         '(42 . -1)
  95.       )    ;list
  96.         )        ;setq
  97.       )        ;entmake
  98.       (command "_matchprop" xn (entlast) "")
  99.       (entdel xn)
  100.       (setq xn (entlast))
  101.       (ssadd xn xss)
  102.      )
  103.    )        ;cond
  104.    (setq a (+ a 1))
  105.        )        ;repeat,以上将每个图元都变成pline并加入了选择集。
  106.        (command "pedit" "m" xss "" "j" 0.1 "") ;;把能连的连上。
  107.         (command "._pedit" "m" xss "" "l" "on" "");;重新生成多义线,使得线型连贯。
  108.       (setq xss xss)
  109.      )          ;progn
  110.   )          ;if
  111. ) ;_ 结束defun
发表于 2013-11-17 21:18 | 显示全部楼层
楼主,有没有cass里提取横断面的程序
 楼主| 发表于 2013-11-17 21:59 | 显示全部楼层
没有。我主要搞地籍测绘,不用横断面。
发表于 2013-11-18 16:29 | 显示全部楼层
谢谢楼主的分享与交流
发表于 2013-11-18 16:43 | 显示全部楼层
宽高比的修改:将cass图打开--->文件--->cass参数配置  中修改
发表于 2013-11-18 21:49 | 显示全部楼层
交流下cass9.1下的编程和应用心得
楼主是不是先放出吸引人的好贴或好代码?
 楼主| 发表于 2013-11-19 14:29 | 显示全部楼层
本帖最后由 mandala 于 2013-11-19 15:28 编辑
461045462 发表于 2013-11-18 16:43
宽高比的修改:将cass图打开--->文件--->cass参数配置  中修改

嗯知道了,谢谢。

对于第一个问题我的表述不够清楚,是这样的:

为什么cass9.1下,按键盘的“5”(无论大键盘还是小键盘)都会重复上一条cass命令?如果打开cass直接按“5”,那么进入的是"DD"这个程序,如果用工具画了个符号(如路灯)后,那么按“5”就重复画路灯的命令。但是cad内部命令如“pl”等不会重复。我单位所有cass都出现这个情况。
发表于 2014-9-21 19:02 | 显示全部楼层
非常感谢了。很详细啊!
发表于 2014-9-22 13:22 | 显示全部楼层
楼主,是不是关于cass9.0中一些新的功能  利用lisp来实现,这样就可以替代cass9.0的功能了,
发表于 2014-11-4 09:22 | 显示全部楼层
没看明白要表达啥,cass中命令S好像就能解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 12:22 , Processed in 0.924564 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表