找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 763|回复: 6

[原创]:另一种等分

[复制链接]
发表于 2003-1-13 14:27:18 | 显示全部楼层 |阅读模式

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

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

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

使用道具 举报

发表于 2003-1-17 00:16:12 | 显示全部楼层
最初由 kfboyxwa 发布
[B]我用不了 [/B]

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-1-17 00:30:10 | 显示全部楼层

Re: [原创]:另一种等分

最初由 aeo 发布
[B]前几天画图,遇到的问题:
一段墙8000用300的柱子等分为5份(5个窗,4个柱,也可以5个窗6个柱).
由于不知道五等分好看还是六等分好看,算呀算,花了不少时间,晚上决定写一下.
这下不用犯愁了.
大家用得着的话,试试.
[c... [/B]


在曲线上,好像阵列后,不平行了(是否就要这效果?)

推荐你使用矩阵的方法,用 xdrx_entity_transFormedCopy 代码要精简好多(篇幅至少应该缩短一半),有空你试试。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2003-1-20 23:02:26 | 显示全部楼层

Re: Re: [原创]:另一种等分

最初由 XDSoft 发布
在曲线上,好像阵列后,不平行了(是否就要这效果?)
推荐你使用矩阵的方法,用 xdrx_entity_transFormedCopy 代码要精简好多...  有空你试试。


1就要这样,法线方向的.
2没原物体,xdrx_entity_transFormedCopy 就没必要了,做个标记而已,我只要画一定长度的线.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
xdrx_entity_transFormedCopy 到是用过,可惜贴了个把月了,你也不答,
不引用了,再贴一次.
顺便把我认为的错也改了(xdrx_curve_getarea)

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

  1. ;欢迎大家试用和改进! by aeo
  2. (defun c:xa (/ $get_point1 getpd _dist array-it _len box curve how num p0 ss
  3.                ss1 yes-mi yes-ro
  4.             )
  5.   (defun $get_point1 (e n dist / j pt ptl)
  6.     (setq j 1)
  7.     (while (< j n)
  8.       (setq pt (xdrx_curve_getpointatdist e (* j dist)))
  9.       (if pt
  10.         (setq ptl (cons pt ptl))
  11.       )
  12.       (setq j (1+ j))
  13.     )
  14.     (reverse ptl)
  15.   )                                       
  16. ; ************************
  17.   (defun getpd (/ no s-pd)
  18.     (if (not #xarray_dist)
  19.       (setq #xarray_dist 100)
  20.     )
  21.     (setq s-pd (getstring (strcat "\n等分数\(加X\)或距离("
  22.                                   (rtos #xarray_dist 2 2) "):"
  23.                           )
  24.                )
  25.     )
  26.     (cond
  27.       ((setq no (xdrx_txtsrch s-pd "x"))
  28.         (setq s-pd (substr s-pd 1 (1- (car no))))
  29.         (setq s-pd (atoi s-pd))
  30.         (setq s-pd (cons 0 s-pd))
  31.       )
  32.       (t
  33.         (if (= s-pd "")
  34.           (setq s-pd #xarray_dist)
  35.           (setq s-pd (atof s-pd))
  36.         )
  37.         (setq s-pd (cons 1 s-pd))
  38.       )
  39.     )
  40.   )                                       
  41. ; ***************************to array
  42.   (defun array-it (p0 ss yes-ro yes-mi num _dist how / angl p1 p2 pntl pntl1
  43.                       xform xform1 xform2 ss1
  44.                   )
  45.     (setq p1 (car (xdrx_curve_GetPoint curve)))
  46.     (setq p2 (caddr (xdrx_curve_GetPoint curve)))
  47.     (setq pntl ($get_point1 curve num _dist)         ; mid point
  48.           pntl (cons p1 pntl)                        ; first point
  49.     )                                       
  50.     (if (= how 0)
  51.       (setq pntl (reverse (cons p2 (reverse pntl)))) ; last point
  52.     )                                     
  53.     (if (= yes-ro "Yes")
  54.       (setq angl (mapcar
  55.                    '(lambda (x)
  56.                       (cadr (xdrx_getperpline curve x))
  57.                     )
  58.                    pntl
  59.                  )
  60.       )
  61.     )
  62.     (if yes-mi
  63.       (setq angl nil
  64.             angl (mapcar
  65.                    '(lambda (x)
  66.                       (- (cadr (xdrx_getperpline curve x)) pi)
  67.                     )
  68.                    pntl
  69.                  )
  70.       )
  71.     )
  72.     (setq pntl1 (mapcar
  73.                   '(lambda (x)
  74.                      (mapcar
  75.                        '-
  76.                        x
  77.                        p0
  78.                      )
  79.                    )
  80.                   pntl
  81.                 )
  82.     )
  83.     (setq xForm (xdrx_matrix_identity 3)
  84.           xForm1 (mapcar
  85.                    '(lambda (x)
  86.                       (xdrx_matrix_setTransLation xForm x)
  87.                     )
  88.                    pntl1
  89.                  )
  90.     )
  91.     (if (= yes-ro "Yes")
  92.       (progn
  93.         (setq xform2 (mapcar
  94.                        '(lambda (x y)
  95.                           (xdrx_matrix_setRotation xform x '(0 0 1) y)
  96.                         )
  97.                        angl
  98.                        pntl
  99.                      )
  100.         )
  101.         (setq xform1 (mapcar
  102.                        '(lambda (x y)
  103.                           (xdrx_matrix_product x y)
  104.                         )
  105.                        xform2
  106.                        xform1
  107.                      )
  108.         )
  109.       )
  110.     )
  111.     (c:xdrx_setmark)
  112.     (mapcar
  113.       '(lambda (x)
  114.          (xdrx_entity_transformedcopy ss x)
  115.        )
  116.       xForm1
  117.     )
  118.     (setq ss1 (c:xdrx_getss))
  119.   )                                       
  120. ; ***************************************main
  121.   (prompt "\n请选取要阵列的实体<退出>")
  122.   (setq ss (ssget))
  123.   (if ss
  124.     (progn
  125.       (setq p0 (getpoint "\n基点:\(回车取中点\):"))
  126.       (if (not p0)
  127.         (setq box (xdrx_entity_box ss)
  128.               p0 (xdrx_midp (car box) (caddr box))
  129.         )
  130.       )
  131.       (setq curve (car (xdrx_entsel "\n点取一个路径<esc>:" '((0 . "*line,arc,circle,ellipse")))))
  132.     )
  133.   )
  134.   (if (and
  135.         ss
  136.         curve
  137.       )
  138.     (progn
  139.       (xdrx_begin)
  140.       (xdrx_ucson)
  141.       (princ (strcat "\n当前路径长:"
  142.              (rtos (setq _len (xdrx_curve_getDistAtPoint curve(last (xdrx_curve_GetPoint curve))) )2 2)))
  143.       (setq _dist (getpd))
  144.       (setq how (car _dist)
  145.             _dist (cdr _dist)
  146.       )
  147.       (if (= how 0)
  148.         (setq num _dist
  149.               _dist (/ _len _dist)
  150.         )
  151.         (setq num (fix (1+(/ _len _dist))))
  152.       )
  153.       (setq #xarray_dist _dist)
  154.       (initget "Yes No")
  155.       (setq yes-ro (getkword "\n要随着转吗<(Yes)or No>?"))
  156.       (if (not yes-ro)
  157.         (setq yes-ro "Yes")
  158.       )
  159.       (setq ss1 (array-it p0 ss yes-ro nil num _dist how))
  160.       [COLOR=red];  (xdrx_PickSet_redraw ss1)   [/COLOR]
  161.       (if (= yes-ro "Yes")
  162.         (progn
  163.           (initget "Yes No")
  164.           (setq yes-mi (getkword "\n要内外镜向吗<Yes or (No)>?"))
  165.           (if (not yes-mi)
  166.             (setq yes-mi "No")
  167.           )
  168.           (if (= "Yes" yes-mi)
  169.             (progn
  170.               (command "erase" ss1 "")
  171.               (array-it p0 ss yes-ro t num _dist how)
  172.             )                               
  173.        [COLOR=red]; (xdrx_PickSet_redraw ss1 t)[/COLOR]
  174.           )
  175.         )
  176.       )
  177.       (xdrx_ucsoff)
  178.       (xdrx_end)
  179.     )
  180.   )
  181.   (princ)
  182. )


晓东把xdrx_PickSet_redraw 注释去掉试试,我这不行.我要问的就是这!

忘写用法了,有人问过的:
选物体,选路径,回答几份
12等分键入12x  如键12就是距离为12.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2003-2-10 22:33:44 | 显示全部楼层
1 从图上看:等距或等分 仍然是 两角尖之间的curve长度相等
  autocad的Divide Measure完全可以 很简单地作到. 以前
  贴过论坛上作到控制起终点
2 "另一种等分" 我发贴请求过(有贴要求同我):是将上边的
   curve长度 改为distance(两角尖之间的直线),其余同上.
   可Divide Measure 可控制起终点

1 我发贴请求的"另一种等分" 无从得到
2 请楼主考虑:曲线是一个GROUP 起点可选 default为曲线的起点
                                     终点可选 default为曲线的终端点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 03:29 , Processed in 0.443258 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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