明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: Gu_xl

[【Gu_xl】] 【Gu_xl】输出函数局部变量符号表的小工具(源码)

    [复制链接]
发表于 2012-4-24 00:10 | 显示全部楼层
版主精品再现
发表于 2012-4-26 23:23 | 显示全部楼层
是不是用到了递归算法
发表于 2012-4-27 09:18 | 显示全部楼层
非常有用,强烈支持。
不过在对付复杂程序还是有问题,错误: 参数类型错误: stringp nil
使用有些麻烦,如果能做成函数更好。
例如:(fvl 文件名 函数名) 返回值: 函数包括变量和完整程序

在下面程序使用出现错误
  1. (defun get_ltscale(elist / old-elist *error* entltype pattern_length ltscale old-elist pt0 pt1 boolean motion code
  2.         ltscale eltscale new_eltscale n dimdec fawn)

  3.     (defun *error* (msg)
  4.       (if (and (/= msg "Function cancelled")(/= msg "函数被取消"))
  5.   (princ (strcat "<动态线型比例>功能" msg "\n"))
  6.   (if motion(progn(fa-grdraw)(entmod hatch-elist)(setq hatch-elist nil)(ddmodify ename)))
  7.   )
  8.       (princ)
  9.       );;(redraw)
  10.     (defun fa-grdraw()
  11.        (if(= 'list(type pt1))
  12.    (grdraw pt1 pt0 -1)
  13.    )
  14.       )

  15.     (setq auto_ltscale nil)
  16.     (setq entltype(strcase(if(= eltype "BYLAYER")(cdr(assoc 6(tblsearch "layer" elayer)))eltype)))
  17.     (if(not ltnmlst)(make_lt_lists))
  18.     (setq n (vl-position eltype ltnmlst)leng (1- (length ltnmlst))dimdec(getvar"dimdec")
  19.     ltscale (getvar "LTSCALE") old-elist elist pt0 (cadr (grread T 5 0)) boolean T
  20.     pattern_length(cdr (assoc 40 (tblsearch "ltype" entltype))))
  21.     (if(= pattern_length 0.0)(setq  pattern_length 1))
  22.     (if(setq pt1 (osnap pt0 "nea"))(setq pt0 pt1 pt1 nil))
  23.     ;;(setq VIEWCTR(getvar"VIEWCTR")VIEWSIZE (getvar"VIEWSIZE")VSMAX(getvar"VSMAX")VSMIX(getvar"VSMIN"))
  24.     (princ"\n动态线型,按 +、- 切换填充图案:")
  25.     (setq motion (grread T 15 0))    ;;动态绘图
  26.     (setq code(car motion))
  27.     (setq pt1(car (cdr motion)))
  28.     (fa-grdraw)
  29.     (setq fawn T)
  30.     (while boolean
  31.       (setq motion (grread T 15 0))    ;;动态绘图
  32.       (redraw)
  33.       (setq code(car motion))
  34.       (setq pt1(car (cdr motion)))
  35.       (fa-grdraw)
  36.       (cond ((= code 5) ;鼠标移动
  37.        (setq new_eltscale (atof(rtos (/(distance pt1 pt0) pattern_length ltscale) 1 dimdec)))
  38.        (if (/= eltscale new_eltscale)
  39.          (progn
  40.      (setq eltscale new_eltscale)
  41.      (emod eltscale 48);;修改对象数据
  42.      (entmod elist);;修改对象图形显示
  43.      )))
  44.       ((= code 3)(setq eltscale new_eltscale)(setq boolean nil))
  45.       ;鼠标左键按下;;保存线型比例eltype;;退出循环
  46.       ((or(and (= code 2)(= 13 (car (cdr motion))))(= code 11)(= code 25))(setq boolean nil))
  47.       ;;;回车键按下 或者;鼠标右键按下,有的鼠标设置为code = 25;;退出循环
  48.       ((and (= code 2)(or(= 45 pt1)(= 43 pt1)(= 61 pt1))) ;- +
  49.        (setq n(if(= 45 pt1)(if(= n 0)leng (1- n))(if(= n leng)0 (1+ n)))eltype(nth n ltnmlst))
  50.        (emod eltype 6)
  51.        (entmod elist);;修改对象图形显示
  52.        (princ(strcat"\n线型名称:"eltype))
  53.        )
  54.       )
  55.       )
  56.     (fa-grdraw)
  57.     (if(/= code 3)(entmod old-elist));;还原图形显示
  58.     )

点评

放出源码,旨在抛砖引玉,求完善和改进的,可自行改进!我不再更新!  发表于 2012-4-27 12:07
发表于 2012-4-27 10:42 | 显示全部楼层
下载回复
发表于 2012-4-29 03:17 | 显示全部楼层
不错,学习了。。
发表于 2012-4-29 11:11 | 显示全部楼层
好东西好东西好东西好东西好东西
发表于 2012-4-29 16:38 | 显示全部楼层
谢谢版主共享
发表于 2012-4-29 22:00 | 显示全部楼层
这个太好了,正需要,解决了每次一个一个写的麻烦。
发表于 2012-4-29 22:31 | 显示全部楼层
看看G版程序 学习一下
发表于 2012-4-29 22:53 | 显示全部楼层
学习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 07:35 , Processed in 0.187224 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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