找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 774|回复: 12

[求助] 参数化 扇形阵列

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-6-2 10:40:05 | 显示全部楼层 |阅读模式

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

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

×
扇形环板 矩形阵列
已知扇形的内径、外径,分瓣的个数
按单块的扇形阵列,并按割缝、边距空开
求出外圈的矩形

如何用lisp编程进行呢?
每次仅仅改变必要参数,其他自动完成

扇形矩形阵列

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-2 10:54:57 | 显示全部楼层
1、图片太小,看不清,重新截取个大的
2、原始没处理的图形的图片, 和 处理后结果的图片,分别截取。
3、附上压缩的DWG(低版本保存),有原始图和 处理的结果,图上注明。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-6-2 11:18:48 | 显示全部楼层

谢谢提出的建议
更改如下:

图1:是已知的条件【处理前的图】
图2:处理后的图

图1 已知

图1 已知

图2 处理后

图2 处理后

扇形 矩形阵列.rar

23.78 KB, 下载次数: 6, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-2 11:28:51 | 显示全部楼层
本帖最后由 newer 于 2017-6-2 11:30 编辑

看了图,画图的时候,为什么不把每个扇形画成一个封闭的多段线呢?画图时候组织好数据,才方便以后的工作,包括统计,选择。

搜狗截图20170602112718.png


结果图里面,矩形高 152.9 ,宽 64.08 是根据什么来的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-6-2 11:32:48 | 显示全部楼层

对的,提醒的很对
我这是偷懒了,我是先根据内径、外径,画同心圆
然后画水平线,在根据瓣数,进行圆形阵列,所以未将扇形进行处理
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-2 21:10:21 | 显示全部楼层
本帖最后由 newer 于 2017-6-2 21:12 编辑

从画到生成合成到一块了,试试


  1. (defun c:tt ()
  2.   (defun XD::Pnt:TransTemp (pt vec)
  3.     (mapcar '+ pt (xdrx_vector_product vec 1.0))
  4.   )
  5.   (defun _drawcircle ()
  6.     (xdrx_setmark)
  7.     (setq e1    (xdrx_circle_make cen #xd_var_banshu_innerR)
  8.           e2    (xdrx_circle_make cen #xd_var_banshu_outerR)
  9.           pts1  (xdrx_getpropertyvalue
  10.                   e1
  11.                   "getsamplepoints"
  12.                   (1+ #xd_var_banshu)
  13.                 )
  14.           pts2  (xdrx_getpropertyvalue
  15.                   e2
  16.                   "getsamplepoints"
  17.                   (1+ #xd_var_banshu)
  18.                 )
  19.           pa1   (xdrx_curve_getparamatpoint e1 (cadr pts1))
  20.           pa2   (xdrx_curve_getparamatpoint e2 (cadr pts2))
  21.           houdu (- #xd_var_banshu_outerR #xd_var_banshu_innerR)
  22.     )
  23.     (mapcar '(lambda (x y) (xdrx_line_make x y)) pts1 pts2)
  24.     (setq ss (xdrx_getss))
  25.     (xdrx_entity_setproperty ss "color" 7)
  26.     (setq g1 (xdge::constructor e1)
  27.           g2 (xdge::constructor e2)
  28.     )
  29.     (xdge::setpropertyvalue g1 "setinterval" 0.0 pa1)
  30.     (xdge::setpropertyvalue g2 "setinterval" 0.0 pa2)
  31.     (setq gl1   (xdge::constructor "kLineseg3d" (car pts1) (car pts2))
  32.           gl2   (xdge::constructor "klineseg3d" (cadr pts2) (cadr pts1))
  33.           gpL   (xdge::constructor "kCompositecrv3d" (list g1 gl1 g2 gl2))
  34.           pmid1 (xdge::getpropertyvalue g1 "midpoint")
  35.           pmid2 (xdge::getpropertyvalue g2 "midpoint")
  36.           temp  (xdge::constructor "kLineseg3d" pmid1 pmid2)
  37.           pmid  (xdge::getpropertyvalue temp "midpoint")
  38.           dir   (xdrx_curve_getfirstderiv e1 pmid1)
  39.     )
  40.     (xdge::entity:make gpl)
  41.     (xdge::free g1 g2 gl1 gl2 gpl temp)
  42.     (xdrx_entity_align
  43.       (entlast)
  44.       pmid
  45.       (xd::pnt:transtemp pmid dir)
  46.       pmid
  47.       (xd::pnt:transtemp pmid (getvar "ucsxdir"))
  48.     )
  49.     (entlast)
  50.   )
  51.   (defun _init ()
  52.     (if (not #xd_var_banshu)
  53.       (setq #xd_var_banshu 5)
  54.     )
  55.     (if (not #xd_var_banshu_gap)
  56.       (setq #xd_var_banshu_gap 20.0)
  57.     )
  58.     (if (not #xd_var_banshu_innerR)
  59.       (setq #xd_var_banshu_innerR 100.0)
  60.     )
  61.     (if (not #xd_var_banshu_outerR)
  62.       (setq #xd_var_banshu_outerR 130.0)
  63.     )
  64.   )
  65.   (defun _input ()
  66.     (if
  67.       (setq
  68.         val (getint (xdrx_prompt "\n输入瓣数<" #xd_var_banshu ">:" t))
  69.       )
  70.        (setq #xd_var_banshu val)
  71.     )
  72.     (if (setq
  73.           val
  74.            (getreal
  75.              (xdrx_prompt "\n输入割缝距离<" #xd_var_banshu_gap ">:" t)
  76.            )
  77.         )
  78.       (setq #xd_var_banshu_gap val)
  79.     )
  80.     (if (setq val
  81.                (getreal
  82.                  (xdrx_prompt "\n输入内径<" #xd_var_banshu_innerR ">:" t)
  83.                )
  84.         )
  85.       (setq #xd_var_banshu_innerR val)
  86.     )
  87.     (if (setq val
  88.                (getreal
  89.                  (xdrx_prompt "\n输入外径<" #xd_var_banshu_outerR ">:" t)
  90.                )
  91.         )
  92.       (setq #xd_var_banshu_outerR val)
  93.     )
  94.   )
  95.   (defun _getrec ()
  96.     (xdrx_setmark)
  97.     (repeat (1- #xd_var_banshu)
  98.       (xdrx_entity_copy
  99.         e
  100.         pmid
  101.         (mapcar '+
  102.                 pmid
  103.                 (xdrx_vector_product
  104.                   (getvar "ucsydir")
  105.                   (* (setq i (1+ i)) (+ houdu #xd_var_banshu_gap))
  106.                 )
  107.         )
  108.       )
  109.     )
  110.     (setq ss (xdrx_getss)
  111.           ss (ssadd e ss)
  112.     )
  113.     (setq box (xdrx_entity_box ss))
  114.     (setq box
  115.            (xdrx_points_offset #xd_var_banshu_gap (xd::pnts:close box))
  116.     )
  117.     (xdrx_polyline_make box t)
  118.     (ssadd (entlast) ss)
  119.   )
  120.   ;;主程序开始
  121.   (xdrx_begin)
  122.   (_init)
  123.   (_input)
  124.   (if (setq cen (getpoint "\n点取圆心<退出>:"))
  125.     (progn
  126.       (setq e (_drawcircle)
  127.             i 0
  128.       )
  129.       (_getrec)
  130.       (XD::Drag:SimpleMove ss "\n插入点:" 5 t)
  131.     )
  132.   )
  133.   (xdrx_end)
  134.   (princ)
  135. )


同心圆分瓣数.gif


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-2 21:58:03 | 显示全部楼层
本帖最后由 newer 于 2017-6-2 22:03 编辑

加个函数,让大样图反过来,支持UCS

搜狗截图20170602215808.png

搜狗截图20170602220227.png

  1. (defun c:tt ()
  2.   (defun XD::Pnt:TransTemp (pt vec)
  3.     (mapcar '+ pt (xdrx_vector_product vec 1.0))
  4.   )
  5.   (defun _drawcircle ()
  6.     (xdrx_setmark)
  7.     (setq e1    (xdrx_circle_make (trans cen 1 0) #xd_var_banshu_innerR)
  8.           e2    (xdrx_circle_make (trans cen 1 0) #xd_var_banshu_outerR)
  9.           pts1  (xdrx_getpropertyvalue
  10.                   e1
  11.                   "getsamplepoints"
  12.                   (1+ #xd_var_banshu)
  13.                 )
  14.           pts2  (xdrx_getpropertyvalue
  15.                   e2
  16.                   "getsamplepoints"
  17.                   (1+ #xd_var_banshu)
  18.                 )
  19.           pa1   (xdrx_curve_getparamatpoint e1 (cadr pts1))
  20.           pa2   (xdrx_curve_getparamatpoint e2 (cadr pts2))
  21.           houdu (- #xd_var_banshu_outerR #xd_var_banshu_innerR)
  22.     )
  23.     (mapcar '(lambda (x y) (xdrx_line_make x y)) pts1 pts2)
  24.     (setq ss (xdrx_getss))
  25.     (xdrx_entity_setproperty ss "color" 7)
  26.     (setq g1 (xdge::constructor e1)
  27.           g2 (xdge::constructor e2)
  28.     )
  29.     (xdge::setpropertyvalue g1 "setinterval" 0.0 pa1)
  30.     (xdge::setpropertyvalue g2 "setinterval" 0.0 pa2)
  31.     (setq gl1   (xdge::constructor "kLineseg3d" (car pts1) (car pts2))
  32.           gl2   (xdge::constructor "klineseg3d" (cadr pts2) (cadr pts1))
  33.           gpL   (xdge::constructor "kCompositecrv3d" (list g1 gl1 g2 gl2))
  34.           pmid1 (xdge::getpropertyvalue g1 "midpoint")
  35.           pmid2 (xdge::getpropertyvalue g2 "midpoint")
  36.           temp  (xdge::constructor "kLineseg3d" pmid1 pmid2)
  37.           pmid  (xdge::getpropertyvalue temp "midpoint")
  38.           dir   (xdrx_vector_negate (xdrx_curve_getfirstderiv e1 pmid1))
  39.     )
  40.     (xdge::entity:make gpl)
  41.     (xdge::free g1 g2 gl1 gl2 gpl temp)
  42.     (xdrx_entity_align
  43.       (entlast)
  44.       pmid
  45.       (xd::pnt:transtemp pmid dir)
  46.       pmid
  47.       (xd::pnt:transtemp pmid (getvar "ucsxdir"))
  48.     )
  49.     (entlast)
  50.   )
  51.   (defun _init ()
  52.     (if (not #xd_var_banshu)
  53.       (setq #xd_var_banshu 5)
  54.     )
  55.     (if (not #xd_var_banshu_gap)
  56.       (setq #xd_var_banshu_gap 20.0)
  57.     )
  58.     (if (not #xd_var_banshu_innerR)
  59.       (setq #xd_var_banshu_innerR 100.0)
  60.     )
  61.     (if (not #xd_var_banshu_outerR)
  62.       (setq #xd_var_banshu_outerR 130.0)
  63.     )
  64.   )
  65.   (defun _input ()
  66.     (if
  67.       (setq
  68.         val (getint (xdrx_prompt "\n输入瓣数<" #xd_var_banshu ">:" t))
  69.       )
  70.        (setq #xd_var_banshu val)
  71.     )
  72.     (if (setq
  73.           val
  74.            (getreal
  75.              (xdrx_prompt "\n输入割缝距离<" #xd_var_banshu_gap ">:" t)
  76.            )
  77.         )
  78.       (setq #xd_var_banshu_gap val)
  79.     )
  80.     (if (setq val
  81.                (getreal
  82.                  (xdrx_prompt "\n输入内径<" #xd_var_banshu_innerR ">:" t)
  83.                )
  84.         )
  85.       (setq #xd_var_banshu_innerR val)
  86.     )
  87.     (if (setq val
  88.                (getreal
  89.                  (xdrx_prompt "\n输入外径<" #xd_var_banshu_outerR ">:" t)
  90.                )
  91.         )
  92.       (setq #xd_var_banshu_outerR val)
  93.     )
  94.   )
  95.   (defun _getrec ()
  96.     (xdrx_setmark)
  97.     (repeat (1- #xd_var_banshu)
  98.       (xdrx_entity_copy
  99.         e
  100.         pmid
  101.         (mapcar '+
  102.                 pmid
  103.                 (xdrx_vector_product
  104.                   (getvar "ucsydir")
  105.                   (* (setq i (1+ i)) (+ houdu #xd_var_banshu_gap))
  106.                 )
  107.         )
  108.       )
  109.     )
  110.     (setq ss (xdrx_getss)
  111.           ss (ssadd e ss)
  112.     )
  113.     (setq box (xdrx_entity_box ss))
  114.     (setq box
  115.            (xdrx_points_offset #xd_var_banshu_gap (xd::pnts:close box))
  116.     )
  117.     (xdrx_polyline_make (xd::pnts:ucs2wcs box) t)
  118.     (ssadd (entlast) ss)
  119.   )
  120.   ;;主程序开始
  121.   (xdrx_begin)
  122.   (_init)
  123.   (_input)
  124.   (if (setq cen (getpoint "\n点取圆心<退出>:"))
  125.     (progn
  126.       (setq e (_drawcircle)
  127.             i 0
  128.       )
  129.       (_getrec)
  130.       (XD::Drag:SimpleMove ss "\n插入点:" 5 t)
  131.     )
  132.   )
  133.   (xdrx_end)
  134.   (princ)
  135. )


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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-6-2 22:06:59 | 显示全部楼层

谢谢版主,测试了一下,基本可以的,代码还没来得及看呢,谢谢了
不过整列的时候,扇形与扇形的最短的距离怎么设置的呢
如下图中的13.49这个尺寸,这个是否也可像边距一样,由用户手工输入后确定呢?


边距 割缝

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-2 22:14:34 | 显示全部楼层
本帖最后由 newer 于 2017-6-2 22:16 编辑

边缘控制间距是必须的? 程序是用中间点处的距离等于 割缝 的距离 控制的。

如果想边缘控制,用下三角函数,换算成中间间距值就行了。不过,我认为中间间距控制就足够了吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-6-2 22:22:08 | 显示全部楼层

圆心的中心距离=边距,这样子的话,每件扇形间的最小距离就无法控制了
扇形间的最小距离和边距是两个不同的控制参数

我先看看程序吧,是否可以将中心距离改一下

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-6-2 22:31:37 | 显示全部楼层

行,你试试改改代码吧,现在是弧线中间地方,间距等于输入的割缝的距离。 你把它变小些(找出和边线距离的关系)。
不清楚的地方,再发帖吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2017-6-3 10:36:42 | 显示全部楼层
本帖最后由 lanyf 于 2017-6-3 10:38 编辑

newer版主,我看了一下代码,由于我是刚刚接触
以前看的书都是讲的Auto lisp Visual lisp,这个是用XDRX API写的,很多地方不是很懂,能帮我解释一下吗


代码在代码的框里怎么提交不了?
先直接粘在网页里吧

(defun _drawcircle ()
    (xdrx_setmark);;;创建选择集开始
    (setq e1    (xdrx_circle_make (trans cen 1 0) #xd_var_banshu_innerR);画圆(内径)
          e2    (xdrx_circle_make (trans cen 1 0) #xd_var_banshu_outerR);画圆(外径)
          pts1  (xdrx_getpropertyvalue
                  e1
                  "getsamplepoints"
                  (1+ #xd_var_banshu);;;为什么用瓣数+1啊
                );;什么作用,得到什么样子的属性啊,是点的坐标吗?
          pts2  (xdrx_getpropertyvalue
                  e2
                  "getsamplepoints"
                  (1+ #xd_var_banshu)
                )
          pa1   (xdrx_curve_getparamatpoint e1 (cadr pts1));;;得到内圆上面的哪个点啊?
          pa2   (xdrx_curve_getparamatpoint e2 (cadr pts2))
          houdu (- #xd_var_banshu_outerR #xd_var_banshu_innerR)
    )
    (mapcar '(lambda (x y) (xdrx_line_make x y)) pts1 pts2);;这是画的哪根线呢?能在CAD里面一步步执行,执行到这看一画了什么吗?
    (setq ss (xdrx_getss));;;创建选择集结束
    (xdrx_entity_setproperty ss "color" 7);什么作用啊,为什么要将"color”设置为7呢?
    (setq g1 (xdge::constructor e1);;;将内圆构造实体??构造实体什么作用啊?为什么构造实体?方便修改或取属性吗?
          g2 (xdge::constructor e2)
    )
    (xdge::setpropertyvalue g1 "setinterval" 0.0 pa1);;;什么作用?
    (xdge::setpropertyvalue g2 "setinterval" 0.0 pa2)
    (setq gl1   (xdge::constructor "kLineseg3d" (car pts1) (car pts2))
          gl2   (xdge::constructor "klineseg3d" (cadr pts2) (cadr pts1))
          gpL   (xdge::constructor "kCompositecrv3d" (list g1 gl1 g2 gl2))
          pmid1 (xdge::getpropertyvalue g1 "midpoint");;;圆的中点吗?
          pmid2 (xdge::getpropertyvalue g2 "midpoint")
          temp  (xdge::constructor "kLineseg3d" pmid1 pmid2)
          pmid  (xdge::getpropertyvalue temp "midpoint")
          dir   (xdrx_vector_negate (xdrx_curve_getfirstderiv e1 pmid1))
    )
    (xdge::entity:make gpl)
    (xdge::free g1 g2 gl1 gl2 gpl temp)
    (xdrx_entity_align
      (entlast)
      pmid
      (xd::pnt:transtemp pmid dir)
      pmid
      (xd::pnt:transtemp pmid (getvar "ucsxdir"))
    )
    (entlast)
  )

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

使用道具 举报

已领礼包: 812个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 04:26 , Processed in 0.369926 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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