第二篇 第四部分 主代码函数调用
我是不是有点太磨叽了……几天了,才到主代码。
所有准备工作全部就绪,开始写主代码。
1
起点和终点煎蛋,且格式一样,没有什么特殊的地方。
直接调用三个函数。
代码如下:
- (setq startZH startZH_Input)
- (stringZH startZH)
- (setq starPoint (VLAX-CURVE-GETSTARTPOINT OBJCenterLine))
- (setq startAngle (angleCAL OBJCenterLine starPoint))
- (label normalAngle normalLength startAngle starPoint fontHeight ZHK+M)
- (setq endZH (+ totalDistance startZH_Input))
- (stringZH endZH)
- (setq endPoint (VLAX-CURVE-GETENDPOINT OBJCenterLine))
- (setq endAngle (angleCAL OBJCenterLine endPoint))
- (label normalAngle normalLength endAngle endPoint fontHeight ZHK+M)
一定一定要把参数命名写好,事半功倍的行为。
2 功能拆分
中间桩号就比较麻烦,这里要引入一个新函数 repeat ,用于循环标注。
照样开始拆分功能。
A 获得主线的实际长度。
B 根据标注长度和标注间距,计算出需要标注多少个桩号。
C 计算实际桩号的标注间距。
D 第二个桩号调整(因为起始桩号不一定是整桩,所以起始桩号与第二个桩号之间的距离不一定和标注间距相等)。
E 标注桩号。
F 将标注点加上实际标注间距。
G 标注桩号。
3 获得曲线长度
通过两个VLA函数获取。
- (setq OBJCenterLine_Distance (VLAX-CURVE-GETDISTATPOINT OBJCenterLine (VLAX-CURVE-GETENDPOINT OBJCenterLine)))
VLAX-CURVE-GETENDPOINT (定义 - 曲线 - 获得 终点),传递一条VLA曲线,获得终点坐标。
VLAX-CURVE-GETDISTATPOINT (定义 - 曲线 - 获得 起点 距离),传递一个VLA曲线的坐标,获得与起点的距离。
VLA函数真是又长又软啊。
4 计算桩号个数、实际标注间距和实际标注个数
- (setq trueLabelSpace (/ OBJCenterLine_Distance (/ totalDistance labelSpace)))
- (setq NN (FIX (/ OBJCenterLine_Distance trueLabelSpace)))
这个就不再解释了。
5 第二个桩号调整
- (setq midZH (+ startZH_Input (- labelSpace (REM startZH_Input labelSpace))))
首先,将起始桩号除以标注间距,再取余数,得到碎桩数值。
然后将标注间距减去碎桩数值,得到实际间距。
然后将起点桩号加上实际间距,得到实际桩号。
6 非首桩号
- (setq midZH (+ labelSpace (* UU labelSpace) (* (FIX (/ startZH_Input labelSpace)) labelSpace)))
起始桩号除以标注间距,取整,再乘标注间距,就能得到起始桩号往小的方向,最近的一个标注间距倍数的桩号。
比如标注间距20米,起始231.11米,先得到11.xxxx,取整为11,乘20得220。
先固定加一个标注间距,得到第二个桩号数值。
这里是240。
UU 代表这是第几个桩号,乘以标注间距,就依次得到了每个桩号。
6 标注点
- (REM startZH_Input labelSpace)
首先,将起始桩号除以标注间距,再取余数,得到碎桩数值。
- (- trueLabelSpace (REM startZH_Input labelSpace))
然后将实际标注间距,减去碎桩数值,就得到起始桩号和第二个桩号那一段的实际标注距离。
- (+ (* UU trueLabelSpace) (- trueLabelSpace (REM startZH_Input labelSpace)))
然后就是加上第几个桩号乘以实际间距,就得到相应的标注点距离了。
- (setq midPoint
- (VLAX-CURVE-GETPOINTATDIST OBJCenterLine
- (+ (* UU trueLabelSpace) (- trueLabelSpace (REM startZH_Input labelSpace)))
- )
- )
VLAX-CURVE-GETPOINTATDIST ,(定义 - 曲线 - 获得 点 按照 距离)
自然语言编程来袭,传递曲线和距离,获得点坐标。
7 标注
获得桩号文字和标注点后,剩下的就是调用函数了。
- (setq midAngle (angleCAL OBJCenterLine midPoint))
- (label normalAngle normalLength midAngle midPoint fontHeight ZHK+M)
8 repeat 函数的使用
repeat 函数需要给一个上限,告诉程序运行这么多次。
其通用模板为:
- (repeat NN
- (XXX)
- )
repeat 函数很煎蛋,只适合用于循环次数固定的用法。
如果不知道循环次数,但知道循环结束条件,可以采用 while 。
唯一的变化就是将上限NN数值变为判定语句。
|