哪位帮忙完善这个板负筋长度文字对分的程序
蛇·蝎·茄子
2011年11月29日 10:08:43
只看楼主

PKPM出来的板负筋,左右相等的时候,经常是在中间标一个数,但是就会跟梁线重叠,因此考虑做个程序,将文字分成两边,每边数字是原数字的一半。现在程序也有了,就是经常会出现莫名的问题,文字的坐标点控制不对。另外,对字体已经设置了字高的情况也会出现bug。这是第一次对着书写的,也不知道哪些地方需要改,恳请各位给点意见程序如下:(defun c:bdf(/ e ent tc newt mc ang st zb zbx zby zg zb1x zb1y zb2x zb2y zb1 zb2)

PKPM出来的板负筋,左右相等的时候,经常是在中间标一个数,但是就会跟梁线重叠,因此考虑做个程序,将文字分成两边,每边数字是原数字的一半。
现在程序也有了,就是经常会出现莫名的问题,文字的坐标点控制不对。
另外,对字体已经设置了字高的情况也会出现bug。
这是第一次对着书写的,也不知道哪些地方需要改,恳请各位给点意见

程序如下:

(defun c:bdf(/ e ent tc newt mc ang st zb zbx zby zg zb1x zb1y zb2x zb2y zb1 zb2)
(setvar "cmdecho" 0)
(setq e (entsel "\n选择要对分的板筋: "))
(setq ent (entget (car e)))
(setq newt (atoi (cdr (assoc 1 ent))))
(if (/= 0 newt)
(progn
(setq tc (cdr (assoc 8 ent)))
(command "._Clayer" tc)
(setq newt (atoi (cdr (assoc 1 ent))))
(setq mc (cdr (assoc -1 ent)))
(setq ang (cdr (assoc 50 ent)))
(setq st (cdr (assoc 7 ent)))
(setq zb (cdr (assoc 10 ent)))
(setq zbx (car zb))
(setq zby (cadr zb))
(setq zg (cdr (assoc 40 ent)))
(setq zb1x (+ zbx (* 0.25 (* newt (cos ang)))))
(setq zb1y (+ zby (* 0.25 (* newt (sin ang)))))
(setq zb2x (- zbx (* 0.25 (* newt (cos ang)))))
(setq zb2y (- zby (* 0.25 (* newt (sin ang)))))
(setq zb1 (list zb1x zb1y))
(setq zb2 (list zb2x zb2y))
(command "text" "s" st zb1 zg (* 180 (/ ang pi)) (/ newt 2))
(command "text" "s" st zb2 zg (* 180 (/ ang pi)) (/ newt 2))
(entdel mc)
)
(princ "\n所选对象不能处理")
)
(setvar "cmdecho" 1)
(princ)
)
免费打赏
蛇·蝎·茄子
2011年11月29日 10:11:53
2楼
上面程序里面有个if的判断,主要是为了避免对非数字字符进行操作,其实应该一开始就判断选择物体的类型的
还有说的字体设置有字高的情况,因为设置有字高的时候,在输入文字的时候,跳过了字高项,后面的就都错了
回复
蛇·蝎·茄子
2011年11月29日 14:34:32
3楼
已经有人指点,bug基本没有了,关掉捕捉就好了
只不过文字样式已定义字高的还是会有问题,不管了,自己用的,不会出这个问题
回复

相关推荐

APP内打开