找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: eachy

[讨论]:关于矩阵在ACAD二次开发中的应用的讨论...

[复制链接]

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-12-17 01:33:02 | 显示全部楼层
最初由 aeo 发布
[B];你试一下:都用你的api
;先画一个曲度很大的弧curve
(setq curve (car (entsel)))
(setq len(cadr (xdrx_getarea curve)) ) ;长度
(setq p1(car(xdrx_curve_GetPoint curve))) ;弧起点
(setq p2(xdrx_curve_get... [/B]


你这样求终点肯定有误差,对距离小于总长的肯定没有问题。

因为你的距离是自己除完等分然后再乘回来(其中就有误差了)。

XDRX_API提供了所有的ARX的关于CURVE类的处理方法,具体问题用具体的方法或者组合。

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

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2002-12-17 01:56:26 | 显示全部楼层
不管了,最后点如果不在就硬加进去!
又有问题了:
用了一下(xdrx_PickSet_redraw ss)
求出ss后单独用可以,放到程序里就不行了(程序里求的ss都能进行command操作,肯定对的)
出错见图:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-12-17 03:10:35 | 显示全部楼层
最初由 aeo 发布
[B]不管了,最后点如果不在就硬加进去!
又有问题了:
用了一下(xdrx_PickSet_redraw ss)
求出ss后单独用可以,放到程序里就不行了(程序里求的ss都能进行command操作,肯定对的)
出错见图: [/B]


1、你别用其他的API,就单独测试一个SS,在程序里面看是否还有问题?

2、你下载了最新的XDRX_API了吗?10月24日更新

3、如果还有问题,把你的LISP程序用附件传到论坛


  1. <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="650" id="AutoNumber1" height="498">
  2.   <tr>
  3.     <td width="100%" height="489">
  4.       <iframe name="I1" width="100%" height="100%" src="http://www.xdcad.net/down/show.php?id=237">
  5. 浏览器不支持嵌入式框架或配置为不显示嵌入式框架
  6.       </iframe>
  7.     </td>
  8.   </tr>
  9. </table>
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2002-12-17 22:21:01 | 显示全部楼层
晓东:
(xdrx_PickSet_redraw ss)还是不行,帮看看.
程序很好的执行了,不过把xdrx_PickSet_redraw 给注释掉了,你把注释去掉试试.

程序是把物体随一曲线等分或等距array,用你的xarray总觉的不是那么回事,所以重写了.
小用了一下api里的矩阵转换,弄清楚花了不少时间,蛮好用的.

欢迎大家用和改进!

  1. (defun c:xa (/ $get_point1 getpd _dist array-it _len box curve how num p0 ss
  2.                ss1 yes-mi yes-ro
  3.             )
  4.   (defun $get_point1 (e n dist / j pt ptl)
  5.     (setq j 1)
  6.     (while (< j n)
  7.       (setq pt (xdrx_curve_getpointatdist e (* j dist)))
  8.       (if pt
  9.         (setq ptl (cons pt ptl))
  10.       )
  11.       (setq j (1+ j))
  12.     )
  13.     (reverse ptl)
  14.   )                                       
  15. ; ************************
  16.   (defun getpd (/ no s-pd)
  17.     (if (not #xarray_dist)
  18.       (setq #xarray_dist 100)
  19.     )
  20.     (setq s-pd (getstring (strcat "\nNumber to divide\(add X\)or Distance("
  21.                                   (rtos #xarray_dist 2 2) "):"
  22.                           )
  23.                )
  24.     )
  25.     (cond
  26.       ((setq no (xdrx_txtsrch s-pd "x"))
  27.         (setq s-pd (substr s-pd 1 (1- (car no))))
  28.         (setq s-pd (atoi s-pd))
  29.         (setq s-pd (cons 0 s-pd))
  30.       )
  31.       (t
  32.         (if (= s-pd "")
  33.           (setq s-pd #xarray_dist)
  34.           (setq s-pd (atof s-pd))
  35.         )
  36.         (setq s-pd (cons 1 s-pd))
  37.       )
  38.     )
  39.   )                                       
  40. ; ***************************to array
  41.   (defun array-it (p0 ss yes-ro yes-mi num _dist how / angl p1 p2 pntl pntl1
  42.                       xform xform1 xform2 ss1
  43.                   )
  44.     (setq p1 (car (xdrx_curve_GetPoint curve)))
  45.     (setq p2 (caddr (xdrx_curve_GetPoint curve)))
  46.     (setq pntl ($get_point1 curve num _dist)         ; mid point
  47.           pntl (cons p1 pntl)                        ; first point
  48.     )                                       
  49.     (if (= how 0)
  50.       (setq pntl (reverse (cons p2 (reverse pntl)))) ; last point
  51.     )                                     
  52.     (if (= yes-ro "Yes")
  53.       (setq angl (mapcar
  54.                    '(lambda (x)
  55.                       (cadr (xdrx_getperpline curve x))
  56.                     )
  57.                    pntl
  58.                  )
  59.       )
  60.     )
  61.     (if yes-mi
  62.       (setq angl nil
  63.             angl (mapcar
  64.                    '(lambda (x)
  65.                       (- (cadr (xdrx_getperpline curve x)) pi)
  66.                     )
  67.                    pntl
  68.                  )
  69.       )
  70.     )
  71.     (setq pntl1 (mapcar
  72.                   '(lambda (x)
  73.                      (mapcar
  74.                        '-
  75.                        x
  76.                        p0
  77.                      )
  78.                    )
  79.                   pntl
  80.                 )
  81.     )
  82.     (setq xForm (xdrx_matrix_identity 3)
  83.           xForm1 (mapcar
  84.                    '(lambda (x)
  85.                       (xdrx_matrix_setTransLation xForm x)
  86.                     )
  87.                    pntl1
  88.                  )
  89.     )
  90.     (if (= yes-ro "Yes")
  91.       (progn
  92.         (setq xform2 (mapcar
  93.                        '(lambda (x y)
  94.                           (xdrx_matrix_setRotation xform x '(0 0 1) y)
  95.                         )
  96.                        angl
  97.                        pntl
  98.                      )
  99.         )
  100.         (setq xform1 (mapcar
  101.                        '(lambda (x y)
  102.                           (xdrx_matrix_product x y)
  103.                         )
  104.                        xform2
  105.                        xform1
  106.                      )
  107.         )
  108.       )
  109.     )
  110.     (c:xdrx_setmark)
  111.     (mapcar
  112.       '(lambda (x)
  113.          (xdrx_entity_transformedcopy ss x)
  114.        )
  115.       xForm1
  116.     )
  117.     (setq ss1 (c:xdrx_getss))
  118.   )                                       
  119. ; ***************************************main
  120.   (prompt "\nthe object to xarray")
  121.   (setq ss (ssget))
  122.   (if ss
  123.     (progn
  124.       (setq p0 (getpoint "base-point\(return for middle point\):"))
  125.       (if (not p0)
  126.         (setq box (xdrx_entity_box ss)
  127.               p0 (xdrx_midp (car box) (caddr box))
  128.         )
  129.       )
  130.       (setq curve (car (xdrx_entsel "\npickSel a curve<esc>:" '((0 . "*line,arc,circle,ellipse")))))
  131.     )
  132.   )
  133.   (if (and
  134.         ss
  135.         curve
  136.       )
  137.     (progn
  138.       (xdrx_begin)
  139.       (xdrx_ucson)
  140.       (princ (strcat "\nLength of Curve:" (rtos (setq _len (cadr
  141.                                                                  (xdrx_getarea curve)
  142.                                                            )
  143.                                                 )
  144.                                                 2 2
  145.                                           )
  146.              )
  147.       )
  148.       (setq _dist (getpd))
  149.       (setq how (car _dist)
  150.             _dist (cdr _dist)
  151.       )
  152.       (if (= how 0)
  153.         (setq num _dist
  154.               _dist (/ _len _dist)
  155.         )
  156.         (setq num(1+ (fix (/ _len _dist))))
  157.       )
  158.       (setq #xarray_dist _dist)
  159.       (initget "Yes No")
  160.       (setq yes-ro (getkword "\nRotate it while?<(Yes)or No>"))
  161.       (if (not yes-ro)
  162.         (setq yes-ro "Yes")
  163.       )
  164.       (setq ss1 (array-it p0 ss yes-ro nil num _dist how))
  165.        ; (xdrx_PickSet_redraw ss1)
  166.       (if (= yes-ro "Yes")
  167.         (progn
  168.           (initget "Yes No")
  169.           (setq yes-mi (getkword "\nMirror all<Yes or (No)>?"))
  170.           (if (not yes-mi)
  171.             (setq yes-mi "No")
  172.           )
  173.           (if (= "Yes" yes-mi)
  174.             (progn
  175.               (command "erase" ss1 "")
  176.               (array-it p0 ss yes-ro t num _dist how)
  177.             )                               
  178.        ; (xdrx_PickSet_redraw ss1 t)
  179.           )
  180.         )
  181.       )
  182.       (xdrx_ucsoff)
  183.       (xdrx_end)
  184.     )
  185.   )
  186.   (princ)
  187. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 16:03 , Processed in 0.165983 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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