明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8093|回复: 42

有一段时间没来,献上俺最近做的一个动态画立面窗的lsp

  [复制链接]
发表于 2012-9-25 21:50:31 | 显示全部楼层 |阅读模式
  1. ;==========================================================立面;
  2. ;-----------------------;
  3. ;  画立面窗  ;
  4. ;-----------------------;
  5. ;  模拟显示数字  ;
  6. ;-----------------------;
  7. (defun feng:num:grvecs ( li / num n temp str po )
  8.   (setq num '(("1" (150 0 0) (150 300 0))
  9.         ("2" (150 0 0) (0 0 0) (0 0 0) (0 150 0) (0 150 0) (150 150 0) (150 150 0) (150 300 0) (150 300 0) (0 300 0))
  10.         ("3" (0 0 0) (150 0 0) (150 0 0) (150 150 0) (150 150 0) (0 150 0) (150 150 0) (150 300 0) (150 300 0) (0 300 0))
  11.         ("4" (150 0 0) (150 150 0) (150 150 0) (150 300 0) (150 150 0) (0 150 0) (0 150 0) (0 300 0))
  12.         ("5" (0 0 0) (150 0 0) (150 0 0) (150 150 0) (150 150 0) (0 150 0) (0 150 0) (0 300 0) (0 300 0) (150 300 0))
  13.         ("6" (150 300 0) (0 300 0) (0 300 0) (0 0 0) (0 0 0) (150 0 0) (150 0 0) (150 150 0) (150 150 0) (0 150 0))
  14.         ("7" (150 0 0) (150 300 0) (150 300 0) (0 300 0))
  15.         ("8" (0 0 0) (150 0 0) (150 0 0) (150 300 0) (150 300 0) (0 300 0) (0 300 0) (0 0 0) (0 150 0) (150 150 0))
  16.         ("9" (0 0 0) (150 0 0) (150 0 0) (150 300 0) (150 300 0) (0 300 0) (0 300 0) (0 150 0) (0 150 0) (150 150 0))
  17.         ("0" (0 0 0) (150 0 0) (150 0 0) (150 300 0) (150 300 0) (0 300 0) (0 300 0) (0 0 0))
  18.         ("." (60 0 0) (90 0 0) (90 0 0) (90 30 0) (90 30 0) (60 30 0) (60 30 0) (60 0 0))
  19.         ("-" (0 150 0) (150 150 0))
  20.         )
  21.   po (last li)
  22.   li (car li)
  23.   str (substr (setq str (apply 'strcat (MAPCAR '(LAMBDA (x) (strcat x "-")) li))) 1 (1- (strlen str)))
  24.   n 0
  25.   )
  26.   (while (<= n (strlen str))
  27.     (setq temp (substr str (setq n (1+ n)) 1)
  28.     po (MAPCAR '+ po '(250 0 0))
  29.     )
  30.     (GRVECS (cons 1 (MAPCAR '(LAMBDA (x) (MAPCAR '+ x po)) (cdr (assoc temp num)))))
  31.     )
  32.   )
  33. ;-----------------------;
  34. ;  画矩形框  ;
  35. ;-----------------------;
  36. (defun feng:window:rec ( ms p1 / p2 gr l1 l2 temp1 temp2 li grvli tt )
  37.   (while (/= (car (setq gr (grread t 4 2))) 3)
  38.     (cond
  39.       ((or (= (cadr gr) 84) (= (cadr gr) 116))
  40.        (if tt (setq tt nil) (setq tt t))
  41.        )
  42.       ((= (car gr) 5)
  43.        (progn
  44.    (redraw)
  45.    (setq p2 (MAPCAR '(LAMBDA (x y) (+ x (* (fix (/ (- y x) (if tt 50 100))) (if tt 50.0 100.0)))) p1 (cadr gr))
  46.          l1 (if (null tt)
  47.         (feng:window:rec:temp (list (list (min (car p1) (car p2)) (min (cadr p1) (cadr p2)) 0)
  48.             (list (max (car p1) (car p2)) (max (cadr p1) (cadr p2)) 0)
  49.             )
  50.           )
  51.         (feng:window:rec:temp (list (list (min (- (* (car p1) 2) (car p2)) (car p2)) (min (cadr p1) (cadr p2)) 0)
  52.             (list (max (- (* (car p1) 2) (car p2)) (car p2)) (max (cadr p1) (cadr p2)) 0)
  53.             )
  54.           )
  55.         )
  56.          l2 (feng:window:rec:temp (MAPCAR '(LAMBDA (x y) (MAPCAR '+ x y)) (list (car l1) (caddr l1)) '((50 50 0) (-50 -50 0))))
  57.          temp (cdr (REVERSE (MAPCAR '(LAMBDA (x y) (abs (- y x))) (car l1) (caddr l1))))
  58.          )
  59.    (GRVECS (cons 1 (REVERSE (cons (car l1) (REVERSE (cdr (apply 'append (MAPCAR '(LAMBDA (x) (list x x)) l1))))))))
  60.    (GRVECS (cons 2 (REVERSE (cons (car l2) (REVERSE (cdr (apply 'append (MAPCAR '(LAMBDA (x) (list x x)) l2))))))))
  61.    (feng:num:grvecs (list (REVERSE (cons (rtos (/ (apply '* temp) 1000000) 2 2) (MAPCAR '(LAMBDA (z) (rtos z 2 0)) temp))) (cadr gr)))
  62.    )
  63.        )
  64.       )
  65.     )
  66.   (redraw)
  67.   (list (list (feng:window:addobject ms l1) (feng:window:addobject ms l2)) (list l1 l2))
  68.   )
  69. (defun feng:window:rec:temp ( li / p1 p2 )
  70.   (list (setq p1 (car li))
  71.   (list (car (setq p2 (cadr li))) (cadr p1) 0)
  72.   p2
  73.   (list (car p1) (cadr p2) 0)
  74.   )
  75.   )
  76. (defun feng:window:addobject ( ms li / pont )
  77.   (setq li (apply 'append (MAPCAR '(LAMBDA (x) (trans x 1 0)) (REVERSE (cons (car li) (REVERSE li)))))
  78.   pont (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length li))))
  79.   )
  80.   (vlax-safearray-fill pont li)
  81.   (vla-AddPolyline ms pont)
  82.   )
  83. (defun feng:window:lz1 ( li po ms / lw hi gr num grli nn n )
  84.   (setq lw (REVERSE (cdr (REVERSE (MAPCAR '(LAMBDA (x y) (abs (- y x))) (car (car li)) (caddr (car li))))))
  85.   hi (if (< (cadr lw) 1500) (setq hi 0) (setq hi (* (fix (/ (cadr lw) 300)) 100)))
  86.   num (* (1+ (fix (/ (car lw) 2000))) 2)
  87.   li (car li)
  88.   )
  89.   (princ "\n调整亮子高度 w->减小 s->增大,调整窗的扇数 a->减少 d->增加...")
  90.   (while (/= (car (setq gr (grread t 4 2))) 3)
  91.     (cond
  92.       ((or (= (cadr gr) 65) (= (cadr gr) 97)) (if (<= num 2) (setq num 1) (setq num (- num 2))))
  93.       ((or (= (cadr gr) 100) (= (cadr gr) 68)) (if (= num 1) (setq num 2) (setq num (+ num 2))))
  94.       ((or (= (cadr gr) 119) (= (cadr gr) 87)) (if (<= hi 100) (setq hi 0) (setq hi (- hi 100))))
  95.       ((or (= (cadr gr) 115) (= (cadr gr) 83)) (if (>= hi (- (cadr lw) 100)) (setq hi 0) (setq hi (+ hi 100))))
  96.       ((= (car gr) 5) (setq po (cadr gr)))
  97.       )
  98.     (if (/= hi 0) (setq grli (list (list (MAPCAR '+ (last li) (list 50 (- hi) 0)) (MAPCAR '+ (caddr li) (list -50 (- hi) 0))))) (setq grli nil))
  99.     (setq nn (/ (car lw) num))
  100.     (repeat (setq n (1- num))
  101.       (if (= (rem n 2) 0)
  102.   (setq grli (cons (list (MAPCAR '+ (car li) (list (* nn n) 50 0)) (MAPCAR '+ (last li) (list (* nn n) -50 0))) grli))
  103.   (setq grli (cons (list (MAPCAR '+ (car li) (list (* nn n) 50 0)) (MAPCAR '+ (last li) (list (* nn n) (if (= hi 0) -50 (- hi)) 0))) grli))
  104.   )
  105.       (setq n (1- n))
  106.       )
  107.     (redraw)
  108.     (MAPCAR '(LAMBDA (x) (GRVECS (cons 2 x))) grli)
  109.     (feng:num:grvecs (list (MAPCAR '(LAMBDA (x) (rtos x 2 0)) (REVERSE (cons hi (cons nn (cons num (REVERSE lw)))))) po ))
  110.     )
  111.   (redraw)
  112.   (MAPCAR '(LAMBDA (x) (vla-addline ms (vlax-3d-point (trans (car x) 1 0)) (vlax-3d-point (trans (cadr x) 1 0)))) grli)
  113.   )
  114. (defun c:gg ( / doc ms p1 li temp l2 *ERROR* objli )
  115.   (defun *ERROR* ( msg )
  116.     (if li (MAPCAR 'vla-Erase (car li)))
  117.     (if objli (MAPCAR 'vla-Erase objli))
  118.     (redraw)
  119.     )
  120.   (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
  121.   ms (vla-get-ModelSpace doc)
  122.   p1 (getpoint "\n请选择一个角点:")
  123.   li (feng:window:rec ms p1)
  124.   )
  125.   (if (null (TBLSEARCH "layer" "feng-el-window")) (vla-put-color (vla-add (vla-get-layers doc) "feng-el-window") 3))
  126.   (MAPCAR '(LAMBDA (x) (vla-put-layer x "feng-el-window")) (car li))
  127.   (MAPCAR '(LAMBDA (x) (vla-put-layer x "feng-el-window") (vla-put-color x 2)) (setq objli (feng:window:lz1 (cadr li) p1 ms)))
  128.   (princ)
  129.   )

俺不会做动态演示,有兴趣的自己试

评分

参与人数 1明经币 +1 收起 理由
liunian0524 + 1

查看全部评分

 楼主| 发表于 2024-5-10 03:52:35 | 显示全部楼层
zmzk 发表于 2024-2-21 19:59
明经里真是 藏龙卧虎,2012年 就编出 如此 不得了的程序,佩服!

太久没再写这些东西,都快看不懂自己写的是啥意思了。哈哈。。。
发表于 2024-5-10 08:25:24 | 显示全部楼层
feng582304 发表于 2024-5-10 03:52
太久没再写这些东西,都快看不懂自己写的是啥意思了。哈哈。。。

应该是现在用不到了吧
发表于 2024-2-21 19:59:26 | 显示全部楼层
明经里真是 藏龙卧虎,2012年 就编出 如此 不得了的程序,佩服!
发表于 2012-9-25 22:01:31 | 显示全部楼层
不错,来个图片

本帖子中包含更多资源

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

x

点评

太感谢您了,好心人。其实里面还有一个没有写说明的功能,就是中间对齐,在画框的时候按T可以达到插入点在中间与角点的切换  发表于 2012-9-25 22:06
发表于 2012-9-26 08:18:00 | 显示全部楼层
发表于 2012-9-26 09:43:31 | 显示全部楼层
这程序怎么执行啊?
发表于 2012-9-26 09:49:06 | 显示全部楼层
不好意思 没注意看……  好东西顶起
发表于 2012-9-26 14:51:37 | 显示全部楼层
牛人真多,俺要好好学习一下!
发表于 2012-9-26 16:52:36 | 显示全部楼层
程序是写得好,实用性方面可能要差些

点评

我倒是经常用,感觉还不错。这很明显就是建筑专业的,对于其它专业的话,肯定没有实用性可言啦。  发表于 2012-9-27 21:10
发表于 2012-9-26 18:01:27 来自手机 | 显示全部楼层
很好顶上………
发表于 2012-10-5 17:16:43 | 显示全部楼层
很好的学习资料
发表于 2012-10-9 10:43:52 | 显示全部楼层
楼主的程序真好

能不能与来一个动态画剖切符号的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-21 01:27 , Processed in 0.179667 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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