找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1018|回复: 5

[分享]:点取实体,使之显示于对话框image筐中

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-5-22 23:41:41 | 显示全部楼层 |阅读模式

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

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

×
下面:

  1. ;;;  '(pa pb pc pd...px)  -->  '(pa pb pb pc pc pd...px)
  2. (defun li-vector-li (ss / a b ss1)
  3.   (setq a (car ss)
  4.         b (last ss)
  5.         ss (cdr ss)
  6.         ss (reverse (cdr (reverse ss)))
  7.   )
  8.   (mapcar '(lambda (x)(repeat 2(setq ss1 (cons x ss1)))) ss)
  9.   (cons a (reverse (cons b ss1)))
  10. )
  11. ;;;
  12. (defun my-vector_image (name ss sca color1 color2 / a box en midp ptn x y
  13.                              trans_image 2-3d yes b li-shx2pl ss1 lst2sel
  14.                       dxf )
  15. (defun lst2sel(l / ss)(setq ss (ssadd))(foreach e l (ssadd e ss)))
  16. (defun dxf(a b)(cdr(assoc a b)))               
  17.   (defun li-shx2pl (str pt high bl / j len li li1 no pt s)
  18.     (setq li '())
  19.     (setq len (strlen str)
  20.           j 1
  21.     )
  22.     (while (<= j len)
  23.       (if (> (ascii (substr str j)) 140)
  24.         (setq no 2)
  25.         (setq no 1)
  26.       )
  27.       (setq s (substr str j no))
  28.       (setq li1 (xdrx_shx2pl s pt high bl "simplex" "hztxt"))
  29.       (setq pt (polar pt 0 (* high bl)) li1 (cdr li1))                                    
  30.       (setq li (append li li1  ))
  31.       (setq j (+ j no))
  32.     )
  33.     li
  34.   )                                       
  35.   (defun trans_image (ptn box midp x y sca / bl midxy p0 x1 xform xform1
  36.                          xform2 xform3 y1 str pt hi gn color
  37.                     )
  38.     (setq y1 (distance (car box) (last box))
  39.           x1 (distance (car box) (cadr box))
  40.     )
  41.     (if (< y1 1e-3) (setq y1 y))
  42.     (if (< x1 1e-3) (setq x1 x))
  43.     (setq bl (if (< (/ x x1) (/ y y1))
  44.                (/ x x1)
  45.                (/ y y1)
  46.              )
  47.     )
  48.     (setq bl (* bl sca))
  49.     (setq midxy (list (/ x 2.0) (/ y 2.0) 0))
  50.     (setq p0 (mapcar '(lambda (x y)  (- x y)) midxy midp ) )
  51.     (setq xForm (xdrx_matrix_identity 3))
  52.     (setq xform1 (xdrx_matrix_setTransLation xForm p0))
  53.     (setq ptn (mapcar '(lambda (x) (xdrx_point_transform x xform1) )ptn ))
  54.     (setq xform2 (mapcar
  55.                    '(lambda (x)
  56.                       (xdrx_matrix_setScale xform bl midxy)
  57.                     )
  58.                    ptn
  59.                  )
  60.     )
  61.     (setq ptn (mapcar
  62.                 '(lambda (x y)
  63.                    (xdrx_point_transform x y)
  64.                  )
  65.                 ptn
  66.                 xform2
  67.               )
  68.     )
  69.     (setq xform3 (mapcar
  70.                    '(lambda (x)
  71.                       (xdrx_matrix_setMirror xform (list midxy (polar midxy 0 1))
  72.                       )
  73.                     )
  74.                    ptn
  75.                  )
  76.     )
  77.     (setq ptn (mapcar
  78.                 '(lambda (x y)
  79.                    (xdrx_point_transform x y)
  80.                  )
  81.                 ptn xform3
  82.               )
  83.     )
  84.   )                                     
  85.   (defun 2-3d (p)(list (car p) (cadr p) 0))                                       
  86.   (cond
  87.     ((and
  88.        (listp ss)
  89.        (= (type (car ss)) 'ename)
  90.      )
  91.       (setq ss (lst2sel ss)
  92.             yes 1
  93.       )
  94.     )
  95.     ((= (type ss) 'ename)
  96.       (setq ss (lst2sel (list ss))
  97.             yes 1
  98.       )
  99.     )
  100.     ((= (type ss) 'pickset)
  101.       (setq yes 1)
  102.     )
  103.     ((and
  104.        (listp ss)
  105.        (listp (car ss))
  106.      )
  107.       (setq yes 2)
  108.     )
  109.     ((= (type ss) 'str)
  110.       (setq ss(list(list color2 (li-shx2pl ss '(0 0) 600 0.8)))
  111.             yes 2
  112.       )
  113.     )
  114.   )

  115.   (cond
  116.     ((= 1 yes)
  117.       (setq box (xdrx_entity_box ss))
  118.       (setq midp (list (/ (+ (car (caddr box)) (car (car box))) 2)
  119.                        (/ (+ (cadr (caddr box)) (cadr (car box))) 2) 0
  120.                  )
  121.       )
  122.       (start_image name)
  123.       (setq x (dimx_tile name)
  124.             y (dimy_tile name)
  125.       )
  126.       (fill_image 0 0 x y color1)
  127.      (setq j 0 len(sslength ss))
  128.      (while(< j len)
  129.       (setq e(ssname ss j))
  130.         (if (not color2)
  131.           (if (not (dxf 62 (entget e)))
  132.             (setq color (dxf 62 (tblsearch "layer" (dxf 8 (entget e)))))
  133.             (setq color (dxf 62 (entget e)))
  134.           )
  135.           (setq color color2)
  136.         )
  137.         (cond
  138.           ((= "TEXT" (dxf 0 (setq ee (entget e))))
  139.             (setq str (dxf 1 ee)
  140.                   pt (dxf 10 ee)
  141.                   hi (dxf 40 ee)
  142.                   gn (dxf 41 ee)
  143.             )
  144.             (setq en (li-shx2pl str pt hi gn))
  145.           )
  146.           (t
  147.             (setq en (xdrx_getsamplept e)
  148.                   en (li-vector-li en))
  149.           )
  150.         )
  151.         (setq en (mapcar '2-3d en ))
  152.         (setq ptn (trans_image en box midp x y sca))
  153.         (while (cdr ptn)
  154.           (setq a (car ptn)
  155.                 b (cadr ptn)
  156.           )
  157.           (vector_image (fix (car a)) (fix (cadr a)) (fix (car b))
  158.                         (fix (cadr b)) color
  159.           )
  160.           (setq ptn (cddr ptn))
  161.         )(setq j(1+ j))
  162.       )
  163.       (end_image)
  164.     )
  165.     ((= 2 yes)     ; li 已经为--> '((color1(pa pb pb pc pc pd......))(color2(pa pb pb ...)))
  166.      (setq ss1 '())
  167.      (foreach x ss (setq ss1 (append(cadr x) ss1)))
  168.       (setq box (apply 'xdrx_pointsbox  ss1) )
  169.       (setq midp (list (/ (+ (car (caddr box)) (car (car box))) 2)
  170.                        (/ (+ (cadr (caddr box)) (cadr (car box))) 2) 0
  171.                  )
  172.       )
  173.       (start_image name)
  174.       (setq x (dimx_tile name)
  175.             y (dimy_tile name)
  176.       )
  177.       (fill_image 0 0 x y color1)
  178.     (foreach li ss
  179.       (setq ptn (mapcar '2-3d (cadr li) ) color2(car li) )
  180.       (setq ptn (trans_image ptn box midp x y sca))
  181.       (while (cdr ptn)
  182.         (setq a (car ptn)
  183.               b (cadr ptn)
  184.         )
  185.         (vector_image (fix (car a)) (fix (cadr a)) (fix (car b))
  186.                       (fix (cadr b)) color2
  187.         )
  188.         (setq ptn (cddr ptn))
  189.       )
  190.     )
  191.       (end_image)
  192.     )
  193.   )
  194. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2003-5-22 23:43:05 | 显示全部楼层
下面试验:

  1. (defun c:www (/ a b id_dia ss  ss1 what no color)
  2.   (prompt "\n这里做个试验--by AEO,填充image框的0.9倍,底色为0,线颜色1&2随物体3&4为1.")
  3.   (prompt "\n1-选择集,2-entsel,3-点表,4-字符串:")
  4.   (setq no (getstring))
  5.   (cond
  6.     ((= no "1")
  7.       (prompt "\n这里只能"*line,arc,circle,ellipse,text" ")
  8.       (setq ss (ssget '((0 . "*line,arc,circle,ellipse,text"))))
  9.       (setq color nil)
  10.     )
  11.     ((= no "2")
  12.       (prompt "\n这里只能"*line,arc,circle,ellipse,text" ")
  13.       (setq ss (car (entsel)))
  14.       (setq color nil)
  15.     )
  16.     ((= no "3")
  17.       (prompt "\n这里用"xdrx_getsamplept"生成点表,颜色从1递增")
  18.       (setq color 1 ss '() )
  19.       (while(setq e(car(entsel)))
  20.        (if(setq ss1 (xdrx_getsamplept e))
  21.           (setq ss (cons(list color(li-vector-li ss1)) ss))
  22.        )
  23.        (setq color(1+ color))
  24.       ) (setq ss1 ss)
  25.     )
  26.     ((= no "4")
  27.       (setq ss (getstring "\n输入字符串:"))
  28.       (setq color 1)
  29.     )   
  30.   )
  31.   (if (and ss (/= ss ""))
  32.     (progn
  33.       (if (< (setq id_dia (load_dialog "zlj-zw.dcl")) 0 )(exit))
  34.       (new_dialog "zlj_zw" id_dia)
  35.       (my-vector_image "yy" ss 0.9 0 color)
  36.       (action_tile "cancel" "(done_dialog 0)")
  37.       (setq what (start_dialog))
  38.       (unload_dialog id_dia)
  39.     )
  40.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2003-5-22 23:49:04 | 显示全部楼层
用法:

  1. (my-vector_image  name ss sca color1 color2 )
  2. name:image框key
  3. ss:选择集,或曲线(文字也可),或点表,或字符
  4. sca:在image里占的比例
  5. color1:底色
  6. color2:要显示的颜色
复制代码


切记:选的东西不要太多,特别是带弧的
试验的dcl见下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-5-22 23:50:59 | 显示全部楼层
最初由 aeo 发布
[B]下面试验:
[code]
(defun c:www (/ a b id_dia ss  ss1 what no color)
  (prompt "\n这里做个试验--by AEO,填充image框的0.9倍,底色为0,线颜色1&2随物体3&4为1.")
  (prompt "\n1-选择集,2-entsel,3-点表,4-字?.. [/B]


XDRX_API 还有更方便的函数, 直接在图形和DCL坐标系进行矩阵变换,得到DCL IMAGE的数据的函数.
就如天正,理正的一些图形对话框应用,分两类,一类是可以动态变换,如柱子,另一类是固定,如楼梯等等.

以后我会给大家写教学.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2003-5-22 23:55:20 | 显示全部楼层
我用的,不是特别好,经常只占image的一半,(可能我不会用)
要实体进去,还是要转的.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 09:47 , Processed in 0.187018 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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