找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 674|回复: 6

[求助] 请教关于主程序 子程序调用问题

[复制链接]

已领礼包: 201个

财富等级: 日进斗金

发表于 2020-12-11 16:58:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. (defun noc (/ sty1 sty2 sty3);子程序
  2. (defun nob (/ azc1 azc2 ass);子程序
  3. (defun c:sbs (/ ty1 mod0 ptmin ptmax azxy qs1 bh1 ss1);主程序
  4. (setvar "cmdecho" 0)
  5. (setq osm (getvar "osmode"))
  6. (setvar "osmode" 0)
  7. (nob)
  8. (noc)

请大神看看,主子程序间调用有问题吗?
为什么我的变量总出错,变量定义我看着没问题啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-12-11 16:59:24 | 显示全部楼层
每个函数后面的参数都是函数自身的参数,我在反复测试时,为何有时会清空变量,各程序间变量也没有引用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-12-11 19:23:40 | 显示全部楼层
子程序,主程序里面的具体代码贴下
说下哪个变量有问题

点评

出毛病的是nob函数,函数单独执行都没问题,是不是标注样式的表太长了?  详情 回复 发表于 2020-12-11 19:30
这是最后调试完的,有时好使有时不好使,换个文件执行就出错 运行钱需要建一个“”板轮廓线“”图层,画几个矩形  详情 回复 发表于 2020-12-11 19:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-12-11 19:28:29 | 显示全部楼层
本帖最后由 a117034423 于 2020-12-11 19:53 编辑
newer 发表于 2020-12-11 19:23
子程序,主程序里面的具体代码贴下
说下哪个变量有问题

  1. (defun noc (/ sty1 sty2 sty3)
  2. (if (null (tblsearch "LAYER" "编号"))
  3.         (entmake
  4.             (list
  5.                '(0 . "LAYER")
  6.                '(100 . "AcDbSymbolTableRecord")
  7.                '(100 . "AcDbLayerTableRecord")
  8.                '(70 . 0)
  9.                 (cons 2 "编号")
  10.                 (cons 62 7)
  11.             )
  12.          )
  13.   (progn
  14.   (setq sty1 (entget (tblobjname "layer" "编号")))
  15.   (setq sty1 (subst (cons 62 7) (assoc 62 sty1) sty1))
  16.   (entmod sty1)
  17.   )
  18.   )
  19. (if (null (tblsearch "style" "黑体"))
  20.         (entmake
  21.           (list
  22.                '(0 . "STYLE")
  23.                '(100 . "AcDbSymbolTableRecord")
  24.                '(100 . "AcDbTextStyleTableRecord")
  25.                '(2 . "黑体")
  26.                '(70 . 0)
  27.                '(40 . 0.0)
  28.                '(41 . 1.0)
  29.                '(50 . 0.0)
  30.                '(71 . 0)
  31.                '(42 . 300)
  32.                '(3 . "simhei.ttf")
  33.                '(4 . "")
  34.           )
  35.        )
  36.    )
  37. (if (null (tblsearch "dimstyle" "编号"))
  38. (entmake   (list
  39.            '(0 . "dimstyle")
  40.            '(100 . "AcDbSymbolTableRecord")
  41.            '(100 . "AcDbDimStyleTableRecord")
  42.            '(70 . 0)
  43.            (cons 2 "编号") ; 标注样式名
  44.            '(3 . "") ;测量单位
  45.            '(4 . "") ;前后缀 "M<>n"
  46.            '(5 . "ArchTick") ;断点样式
  47.            '(6 . "") ;起始断点样式
  48.            '(7 . "") ;终点断点样式
  49.            '(40 . 1.0) ;全局比例
  50.            '(41 . 0.0) ;箭头尺寸
  51.            '(42 . 150.0) ;起点偏移量
  52.            '(43 . 0.0) ;基线间距
  53.            '(44 . 125.0) ;超出尺寸界线
  54.            '(45 . 0.0) ;舍入值
  55.            '(46 . 0.0) ;延伸线距离
  56.            '(47 . 0.0) ;正公差
  57.            '(48 . 0.0) ;负公差
  58.            '(140 . 300.0) ;标注文字高度
  59.            '(141 . 0.09) ;圆心标记
  60.            '(142 . 0.0) ;短斜线箭头
  61.            '(143 . 25.4) ;对照单位比例系数
  62.            '(144 . 1.0) ;标注线性比例
  63.            '(145 . 0.0) ;标注垂直位置
  64.            '(146 . 1.0) ;公差文字高度比例
  65.            '(147 . -63.125) ;截断线与文字距离
  66.            '(71 . 0) ;是否显示公差
  67.            '(72 . 0) ;创建上下限标注
  68.            '(73 . 0) ;内侧文字水平
  69.            '(74 . 0) ;扩展线外侧文字位置
  70.            '(75 . 1) ;尺寸界线1隐藏
  71.            '(76 . 1) ;尺寸界线2隐藏
  72.            '(77 . 1) ;文字在尺寸线上方
  73.            '(78 . 0) ;消零
  74.            '(170 . 0) ;对照单位显示
  75.            '(171 . 2) ;对照单位小数字数
  76.            '(172 . 1) ;标注线与延伸线关系
  77.            '(173 . 0) ;箭头是否显示
  78.            '(174 . 1) ;文字与延伸线关系
  79.            '(175 . 1) ;隐藏箭头noc
  80.            '(176 . 0) ;标注线颜色
  81.            '(177 . 0) ;标注延伸线颜色
  82.            '(178 . 7) ;标注文字颜色
  83.            '(270 . 2) ;标注类型单位
  84.            '(271 . 0) ;尺寸标注精度
  85.            '(272 . 0) ;公差精度
  86.            '(273 . 2) ;对照单位格式
  87.            '(274 . 2) ;对照单位小数字数
  88.            (cons 340 (tblobjname "style" "黑体")) ;标注文字样式
  89.            '(275 . 0) ;角度单位格式
  90.            '(280 . 0) ;文字对正方式
  91.            '(281 . 1) ;尺寸线1隐藏
  92.            '(282 . 1) ;尺寸线2隐藏
  93.                  )
  94.       )
  95. (progn
  96. (setq sty3 (entget (tblobjname "dimstyle" "编号")))
  97. (setq sty3 (subst (cons 41 0) (assoc 41 sty3) sty3))
  98. (setq sty3 (subst (cons 178 7) (assoc 178 sty3) sty3))
  99. (setq sty3 (subst (cons 140 300) (assoc 140 sty3) sty3))
  100. (entmod sty3)
  101. )
  102.   )
  103. )
  104. ;;;;;;;;;;;;;;;;;;;;
  105. (defun nob (/ azc1 azc2 ass)
  106. (if (null (tblsearch "LAYER" "安装标记"))
  107.         (entmake
  108.             (list
  109.                '(0 . "LAYER")
  110.                '(100 . "AcDbSymbolTableRecord")
  111.                '(100 . "AcDbLayerTableRecord")
  112.                '(70 . 0)
  113.                 (cons 2 "安装标记")
  114.                 (cons 62 3))))
  115. (if (null (tblsearch "block" "安装标记"))
  116. (progn
  117. (entmake (list '(0 . "block") (cons 2 "安装标记") '(70 . 0) (cons 10 (list 0 0 0))))
  118. (setq ass (ssadd))
  119. (entmake (list '(0 . "CIRCLE") (cons 8 "安装标记") (cons 10 (list 0 0 0)) (cons 40 100)))
  120. (setq azc1 (entlast))
  121. (ssadd azc1 ass)
  122. (entmake (list '(0 . "LWPOLYLINE")
  123.                '(100 . "AcDbEntity")
  124.                '(8 . "安装标记")
  125.                '(100 . "AcDbPolyline")
  126.                '(90 . 2)
  127.                '(10 0.0 -65.0 0.0)
  128.                '(40 . 150)
  129.                '(41 . 0)
  130.                '(10 0.0 100.0 0.0)
  131.                '(40 . 0)
  132.                '(41 . 0)
  133.                ))
  134. (setq azc2 (entlast))
  135. (ssadd azc2 ass)
  136. (entmake '((0 . "ENDBLK")))
  137. (vla-erase (vlax-ename->vla-object azc1))
  138. (vla-erase (vlax-ename->vla-object azc2))
  139. )
  140.   )
  141. )
  142. ;;;;;;;;;;获取图元信息坐标函数
  143. (defun c:sbs (/ ty1 mod0 ptmin ptmax azxy qs1 bh1 ss1)
  144. (setvar "cmdecho" 0)
  145. (setq osm (getvar "osmode"))
  146. (setvar "osmode" 0)
  147. (nob)
  148. (noc)
  149. (setq qs1 (getstring "\n请输入分区编号"))
  150. (setq bh1 (getint "\n请输入起始编号"))
  151. (setq ss1 (ssget '
  152.             (
  153.              (-4 . "<AND")
  154.              (0 . "LWPOLYLINE")
  155.              (8 . "板轮廓线")
  156.              (-4 . "AND>")
  157.             )
  158.           )
  159.       
  160.      n  (sslength ss1)
  161.       )
  162.   (repeat n
  163.     (setq ty1 (ssname ss1 (1- n))
  164.           n   (1- n)
  165.           )
  166.     (setq mod0 (vl-remove nil (mapcar  '(lambda (x) (if (= (car x) 10) (cdr x))) (entget ty1))))
  167.     (setq ptmin (apply 'mapcar (cons 'min mod0))) ;;;拾取点表最小坐标值
  168.     (setq ptmax (apply 'mapcar (cons 'max mod0))) ;;;拾取点表最大坐标值
  169.     (setq azxy (list (/ (+ (car ptmax) (car ptmin)) 2) (- (cadr ptmax) 120)))
  170.     (setq txt1 (strcase (strcat "DB-" qs1 "-" (rtos bh1))))
  171.     (setq bh1 (1+ bh1))
  172.     (entmake (list '(0 . "INSERT") '(8 . "安装标记") (cons 2 "安装标记") (cons 10 azxy)))
  173.     (entmake (list
  174.                '(0 . "DIMENSION")
  175.                '(3 . "编号")
  176.                '(8 . "编号")
  177.                '(62 . 3)
  178.                '(100 . "AcDbEntity")
  179.                '(100 . "AcDbDimension")
  180.                 (cons 10 (list (car ptmax) (cadr ptmin)))
  181.                '(70 . 0)
  182.                 (cons 1 txt1)
  183.                '(100 . "AcDbAlignedDimension")
  184.                '(100 . "AcDbRotatedDimension")
  185.                 (cons 13 (list (car ptmax) (cadr ptmin)))
  186.                 (cons 14 (list (- (car ptmax) 2000) (cadr ptmin)))
  187.     )
  188.   )

  189.     )
  190.   (setvar "osmode" osm)
  191.   (princ)
  192.   )

这是最后调试完的,有时好使有时不好使,换个文件执行就出错
运行钱需要建一个“”板轮廓线“”图层,画几个矩形
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-12-11 19:30:01 | 显示全部楼层
newer 发表于 2020-12-11 19:23
子程序,主程序里面的具体代码贴下
说下哪个变量有问题

出毛病的是nob函数,函数单独执行都没问题,是不是标注样式的表太长了?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 201个

财富等级: 日进斗金

 楼主| 发表于 2020-12-12 06:50:02 | 显示全部楼层
没回复啊,人呢都
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 914个

财富等级: 财运亨通

发表于 2020-12-15 00:03:14 | 显示全部楼层
以学习再学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 04:25 , Processed in 0.425292 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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