尘缘一生 发表于 2023-6-8 01:17:47

关于动态信息显示有必要再深入研究

本帖最后由 尘缘一生 于 2023-6-9 06:31 编辑

如题:

今用一天时间,重写这部分代码,加入自己对这一问题的考虑,并求得它的速度提高。
我一直认为,代码本身并不重要,重要的是思路,想法和原理。因此,拿来就用的原则,不赞同,因为,这样对你并没有好处,不会进步的。

对于
[*]vla-get-TextHeight 这个问题,严重怀疑它的正确性!为此,代码全部抛弃它的使用,
[*]改为整合三领函数库,并对标注问题,求得它的实际图距,这样我们再取得标注信息时候,能人为的
[*]看出它的图纸比例是什么。
[*]对于钢筋问题,能显示面积出来
[*]并整合了右键菜单技术,能想写出来就写出来
[*]对于有业内人士提出的,需要显示图层,颜色,线型问题,加进去
[*]效果测试可以安装三领检验它的正确与否
链接:https://pan.baidu.com/s/1l5C1jjXZpLwsRjwjbIxh_w
提取码:ztfv




bai2000 发表于 2023-6-8 22:15:53

sl:yjcaidan ,函数,是关键函数

尘缘一生 发表于 2023-6-9 06:19:28

本帖最后由 尘缘一生 于 2023-6-9 06:25 编辑

不可bai2000 发表于 2023-6-8 22:15
sl:yjcaidan ,函数,是关键函数
记得这是本坛,wowan1314大师源码,可以搜索去下载下。
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=101509&highlight=%D3%D2%BC%FC%B2%CB%B5%A5
三领集成进去的,已经血肉整合,不可直接用了


[*];; 右键菜单函数--先关闭捕捉========(一级)========
[*];; pt 表格产生点,len0 格子大小。tuxian 为要作底的文字内容.
[*];; wzlst 为要写的文字表. len1 横向长度,共计5个参数 tuxian 可为nil,其他必须有值.
[*];; 表格横向固定2格,竖向多少格由文字表决定. 横向长度自定. 文字样式随当前
[*];; 返回值:表(1 "dn15").第一个表示选择的第几格,第二项为文字内容.
[*](defun sl:yjcaidan (pt len0 len1 wzlst tuxian / x y pmpt x1 x0 y0 y1 gplst hangshu i n been p1 p2 p3 p4 plst p1lst wznamlst wzgz wpt wzhigh
[*]                     wz oldhi beend loop code newwz e_lst *error* num ln len2 gpt high wz1 p0 k
[*]                   )
[*];;作移动--------
[*](defun do_move (p0)
[*]    (setq i -1)
[*]    (while (and i (< i (length gplst)))
[*]      (setq i (1+ i) wzgz (nth i gplst))
[*]      (if (and
[*]            (< (car (car wzgz)) (car p0) (car (cadr wzgz)))
[*]            (< (cadr (car wzgz)) (cadr p0) (cadr (cadr wzgz)))
[*]            (setq wz (nth i wznamlst))
[*]          )
[*]      (progn
[*]          (setq high (* 1.2 (dxf1 (cadr wz) 40)))
[*]          (setq wz1 (car wz) wz (cadr wz))
[*]          (if (/= wz1 oldwz1)
[*]            (progn
[*]            (redraw)
[*]            (entmod (emod (emod wz 62 6) 40 high))
[*]            (entmod (emod (emod oldwz 62 3) 40 oldhi))
[*]            (setq oldwz1 wz1 oldwz wz)
[*]            (grvecs (list -6 (car wzgz) (caddr wzgz) -6 (caddr wzgz) (cadr wzgz) -6 (cadr wzgz) (last wzgz) -6 (last wzgz) (car wzgz)))
[*]            )
[*]          )
[*]          (setq num (1+ i) i nil)
[*]      )
[*]      )
[*]    )
[*]    (if i
[*]      (progn
[*]      (entmod (emod (emod oldwz 62 3) 40 oldhi))
[*]      (setq oldwz1 nil oldwz nil)
[*]      (redraw)
[*]      )
[*]    )
[*]    num
[*])
[*];;--------
[*](setq e_lst (sysvar '("autosnap" "osmode" "qaflags")))
[*](setvar "osmode" 0) ;关闭
[*](defun *error* (msg)
[*]    (if beend (sl:-erase beend))
[*]    (redraw)
[*]    (mapcar 'eval e_lst) ;;恢复系统变量
[*]    (if (not (member msg '(nil "Function canceled" ";error:quit / exit abort")))
[*]      (princ (strcat "\n exit:" "--->"))
[*]    )
[*])
[*];----------------------
[*](setq x (car pt) y (cadr pt) len2 (+ len1 len1) ln (atoi (rtos (* (length wzlst) 0.5) 2 0)))
[*](setq
[*]    pmpt (sl_pm2pt)
[*]    x1 (+ x len2)
[*]    x0 (car (cadr pmpt))
[*]    y0 (cadr (car pmpt))
[*]    y1 (- y (* ln 0.5 len0))
[*])
[*](and (> x1 x0) (setq x (- x (- x1 x0))))    ;当超过屏幕右边线
[*](and (< y1 y0) (setq y (+ y (- y0 y1))))    ;当超过屏幕底边线
[*];计算起始点及wipeout作底
[*](setq gplst '())
[*](setq
[*]    hangshu (1+ ln)
[*]    i 1
[*]    been (entlast)
[*]    y1 (- y (* ln 0.5 len0))
[*])
[*](setq
[*]    p1 (list x y 0)
[*]    p2 (list (+ x len2) y 0)
[*]    p3 (list x y1 0)
[*]    p4 (list (+ x len2) y1 0)
[*])
[*](sl:solid p1 p2 p3 p4 18) ;;底框
[*](while (<= i hangshu)
[*]    (setq p1 (list x y 0)
[*]      p2 (list (+ x len2) y 0)
[*]      p3 (list (+ x len1) y 0)
[*]      y (- y (* len0 0.5))
[*]    )
[*]    (slch:line p1 p2 nil 7 nil)
[*]    (if (> i 1)
[*]      (setq gplst (cons (list p3 (cadr plst) p2 (last plst)) (cons (list p1 (last plst) p3 (car plst)) gplst)))
[*]    )
[*]    (setq plst (list p1 p2 p3))
[*]    (if (= i 1)
[*]      (setq p1lst plst)
[*]    )
[*]    (setq i (1+ i))
[*]); 画横线结束
[*](setq gplst (reverse gplst))         ; 画竖线
[*](slch:line (car p1lst) (car plst) nil 7 nil)
[*](slch:line (cadr p1lst) (cadr plst) nil 7 nil)
[*](slch:line (caddr p1lst) (caddr plst) nil 7 nil)
[*](setq i -1 n -1 wznamlst '())
[*](repeat (length wzlst)
[*]    (setq
[*]      wz (nth (setq n (1+ n)) wzlst)
[*]      wzgz (nth (setq i (1+ i)) gplst)
[*]      wpt (sl:mid (car wzgz) (cadr wzgz))
[*]      wzhigh (* 0.23 len0)
[*]    )
[*]    (and
[*]      (= wz tuxian)
[*]      (sl:solid (car wzgz) (caddr wzgz) (last wzgz) (cadr wzgz) 7) ;原文字对应的底框soli
[*]    )
[*]    (slmkwz wz wpt (/ wzhigh SLBL) nil nil "PUB_TEXT" nil 2 "m")
[*]    (setq wznamlst (cons (list wz (entlast)) wznamlst))
[*])
[*](setq wznamlst (reverse wznamlst))
[*](setq wz (car wznamlst)
[*]    oldhi (dxf1 (cadr wz) 40)
[*])
[*](setq beend (last_ent been))   ; 所有产生的物体的选择集
[*](setq loop t)
[*](while loop
[*]    (setq code (grread nil 13 2) k (car code) p0 (cadr code))
[*]    (cond
[*]      ((not (member k '(3 11 25))) ;当左键,右键没有响应时
[*]      (setq num (do_move p0))
[*]      )
[*]      ((member k '(11 25)) ;右键 退出
[*]      (setq loop nil)
[*]      )
[*]      ((= k 3);;左键
[*]      (setq num (do_move p0))
[*]      (and oldwz1 (setq loop nil))
[*]      )
[*]    )
[*])
[*](if oldwz1 (setq newwz oldwz1))
[*](sl:-erase beend)
[*](redraw)
[*](mapcar 'eval e_lst)
[*](setq *error* nil)
[*](sl-cishu)
[*](list num newwz)
[*])


页: [1]
查看完整版本: 关于动态信息显示有必要再深入研究