找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3883|回复: 18

[有奖答题] 练习:此图的参数化

[复制链接]

已领礼包: 1742个

财富等级: 堆金积玉

发表于 2013-8-15 16:54:28 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 炫翔 于 2013-8-15 16:56 编辑

32Q}MLOXFN61NTIH(SSQ8}6.jpg
根据上图的提供的尺寸,做成参数,自动生成图形

也就是说:假如:输入100,与左下角点,就可直接生成上面的图形

以防假冒,主要以说明思路为准!

CAD的做法地址:http://www.xdcad.net/forum/thread-670130-1-1.html

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-15 17:28:32 | 显示全部楼层
本帖最后由 newer 于 2013-8-15 17:39 编辑

xdrx_boxcen.gif

用XDRX API写个,一路都是矩阵。
  1. (defun c:tt()
  2.    (if (and (setq dis (getreal "\n长度<退出>:"))
  3.             (setq pt (getpoint "\n基点<退出>:"))
  4.        )
  5.      (progn
  6.         (setq p1 (mapcar '+ pt '(30 30 0)) ;;p1 p2 p3左边三个圆心,半径任意,这里是30
  7.               p2 (mapcar '+ p1 '(0 60 0))
  8.               p3 (polar p1 (/ pi 6.0) 60)
  9.               p4 (mapcar '+ p3 '(0 100 0))
  10.               mat0(xdrx_matrix_identity 3)
  11.               mat (xdrx_matrix_setmirror mat0 (list p3 p4)) ;;中间圆心竖直线P3 P4做镜像线构建镜像矩阵
  12.         )
  13.         (xdrx_setmark)
  14.         (setq e1 (xdrx_circle_make p1 30)  ;;绘制左边和中间的3个园
  15.               e2 (xdrx_circle_make p2 30)
  16.               e3 (xdrx_circle_make p3 30)
  17.         )
  18.         (xdrx_entity_transformedcopy e1 mat) ;;镜像左边两个圆,得到右边两个圆
  19.         (xdrx_entity_transformedcopy e2 mat)
  20.         (setq ss (xdrx_getss)
  21.               box (xdrx_entity_box ss) ;;所有圆的包围盒
  22.               len (distance (car box)(cadr box)) ;;底边的长度和输入的距离比值得到缩放系数
  23.               scl (/ dis len)
  24.               mat (xdrx_matrix_setscale mat0 scl pt) ;;以基点PT构建缩放矩阵
  25.         )
  26.         (xdrx_entity_transform ss mat) ;;缩放所有圆
  27.         (setq box (xdrx_entity_box ss));;最终结果圆的包围盒
  28.         (apply 'xdrx_polyline_make (cons t box));;绘制封闭外框
  29.         (xdrx_dimension_MakeAlign (car box)(cadr box) (mapcar '- pt '(0 20 0)));;尺寸标注
  30.     )
  31.    )
  32.    (princ)
  33. )

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 好思路

查看全部评分

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-8-15 18:02:14 | 显示全部楼层
  1. (defun c:tt(/ pt0 pt1 pt2 pt3 pt4 pt5 pt01 pt02 pt03 sc0 dis ang ss)
  2.   (setq pt0(getpoint "\n图形基点:")
  3.         sc0(getpoint pt0 "\n底边尺寸:")    ;可以旋转
  4.         dis(distance pt0 sc0)
  5.         ang(angle pt0 sc0)
  6.         ss (ssadd)
  7.   )
  8.   (setq pt1 (polar (polar pt0 0 1) (/ pi 2) 1)
  9.         pt2 (polar pt1 (/ pi 6) 2)
  10.         pt3 (polar pt1 (/ pi 2) 2)
  11.         pt4 (polar pt2 (/ pi 6) 2)
  12.         pt5 (polar pt4 (/ pi -2) 2)
  13.         pt02(polar (polar pt4 0 1) (/ pi 2) 1)
  14.         pt01(polar pt0 (/ pi 2) 4)
  15.         pt03(polar pt02 (/ pi -2) 4)
  16.   )
  17.   (ssadd (mkc pt1) ss)          ;创建新实体,同时构建新实体选择集
  18.   (ssadd (mkc pt2) ss)
  19.   (ssadd (mkc pt3) ss)
  20.   (ssadd (mkc pt4) ss)
  21.   (ssadd (mkc pt5) ss)
  22.   (ssadd (mkl pt0 pt01) ss)
  23.   (ssadd (mkl pt0 pt03) ss)
  24.   (ssadd (mkl pt01 pt02) ss)
  25.   (ssadd (mkl pt03 pt02) ss)
  26.   (command "._scale" ss "" pt0 (/ dis (distance pt0 pt03)))
  27.   (command "._rotate" ss "" pt0 (* 180 (/ ang pi)))
  28.   (princ)
  29. )

  30. (defun mkl(pt1 pt2)  ;画线
  31.   (entmakex
  32.     (list '(0 . "LINE")
  33.           (cons 10 pt1)
  34.           (cons 11 pt2)
  35.     )
  36.   )
  37. )

  38. (defun mkc(pt)  ;画圆
  39.   (entmakex
  40.     (list '(0 . "CIRCLE")
  41.           (cons 10 pt)
  42.           '(40 . 1)
  43.     )
  44.   )
  45. )

点评

元老的方法最适合新手,简单易懂,学习了!  详情 回复 发表于 2013-8-15 19:52

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 跟我的思路差不多

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-15 18:18:25 | 显示全部楼层
你思路是啥啊,翔版主,LL-J长老的程序没注释,思路大家一时想不到,你说说你的思路。

点评

也是根据极坐标 来实现 最后缩放, 待后面,我给大家看书上的一个解答,貌似更好些  详情 回复 发表于 2013-8-15 18:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

 楼主| 发表于 2013-8-15 18:20:52 | 显示全部楼层
本帖最后由 炫翔 于 2013-8-15 18:22 编辑
newer 发表于 2013-8-15 18:18
你思路是啥啊,翔版主,LL-J长老的程序没注释,思路大家一时想不到,你说说你的思路。

也是根据极坐标 来实现 最后缩放,不过,中间,我会考虑阵列的方法
待后面,我给大家看书上的一个解答,貌似更好些


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

使用道具 举报

已领礼包: 1742个

财富等级: 堆金积玉

 楼主| 发表于 2013-8-15 18:31:21 | 显示全部楼层
书上的拿出来给大家参考,看看哪种方法程序大小与执行的速度最快

别小看这个实例,实例可以扩大的,但是方法始终是一样的

  1. (defun c:xx()
  2. (setvar "cmdecho" 0)
  3. (setq oldlay (getvar "clayer"))
  4. (setq os (getvar "osmode"))
  5. (setvar "osmode" 0)
  6. (setq w (getreal "输入底部宽度<100>:"))
  7. (setq rp1 (getpoint "\n输入左下角点:"))
  8. (if (null w) (setq w 100.0))
  9. (setq r (/ w 2 (1+ (sqrt 3))))
  10. (setq cp1 (polar rp1 (/ pi 4) (* r (sqrt 2))))
  11. (setq cp2 (polar cp1 (/ pi 6) (* r 2)))
  12. (setq rp2 (polar rp1 0 w))
  13. (setq rp3 (polar rp2 (/ pi 2) (* 4 r)))
  14. (setq gap (* 2 (sqrt 3) r))
  15. (command "-layer" "m" "str" "c" 4 "" "")
  16. (command "rectang" rp1 rp3)
  17. (command "circle" cp1 r)
  18. (command "array" (entlast) "" "r" 2 2 (* r 2) gap)
  19. (command "circle" cp2 r)  
  20. (command "-layer" "m" "dim" "c" 1 "" "")  
  21. (command "dim1" "hor" rp1 rp2 (polar rp1 (* pi 1.5) 10) "")
  22. (setvar "osmode" os)
  23. (setvar "clayer" oldlay)
  24. (prin1)
  25. )

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-8-15 19:52:42 | 显示全部楼层

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-15 19:59:16 来自手机 | 显示全部楼层
做出1单位的,后面做成普通块或动态块来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3884个

财富等级: 富可敌国

发表于 2013-8-15 20:36:15 | 显示全部楼层
长度是直径的1加根号3倍,计算半径,剩下的就简单了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-15 20:49:14 来自手机 | 显示全部楼层

正解,计算半径是基本,其他就不拘泥于方式了,command entmake vla transformcopy(api)…来自: Android客户端

点评

我的那个程序可没计算半径,利用ACAD自己的图形算法自己去算的。  详情 回复 发表于 2013-8-15 20:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-15 20:54:42 | 显示全部楼层
st788796 发表于 2013-8-15 20:49
正解,计算半径是基本,其他就不拘泥于方式了,command entmake vla transformcopy(api)…

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-8-15 21:18:22 | 显示全部楼层
newer 发表于 2013-8-15 18:18
你思路是啥啊,翔版主,LL-J长老的程序没注释,思路大家一时想不到,你说说你的思路。

我的这段代码应该是不用注解的,很容易看懂。既然说了,我就啰嗦几句。

1. 开始的输入,我采用了双getpoint的方法,变通地同时得到距离和转角。
2. 随后采用polar来计算圆心(半径为1)和直线端点,为防止开方计算带来误差,所以所有点都是采用polar的方法计算。
3. 采用entmakex构造圆和直线,好处是可以直接得到实体名,并直接加进选择集。
4. 按比例缩放并旋转到指定位置和大小,这一步用矩阵变换或许更有“力度”,但对于非API代码,这有一定难度,不如command来得直接。

这种程序原本没有什么难度,只是繁琐一些,应该出彩的地方应该是矩阵变换,不过我不太会,只好作罢。不甘寂寞,也就在输入部分加了一点小花。

点评

没我那句话,也得不到两位精彩的解释,长老: http://bbs.xdcad.net/thread-670123-1-1.html 这个帖子有些习题,长老提携提携新人。  详情 回复 发表于 2013-8-15 21:22

评分

参与人数 1D豆 +5 收起 理由
炫翔 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-15 21:22:42 | 显示全部楼层
ll_j 发表于 2013-8-15 21:18
我的这段代码应该是不用注解的,很容易看懂。既然说了,我就啰嗦几句。

1. 开始的输入,我采用了双get ...

没我那句话,也得不到两位精彩的解释,长老: http://bbs.xdcad.net/thread-670123-1-1.html
这个帖子有些习题,长老提携提携新人。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-15 22:48:13 来自手机 | 显示全部楼层
newer 发表于 1&nbsp;小时前

我的那个程序可没计算半径,利用ACAD自己的图形算法自己去算的。

呵呵,开始没仔细看,可以少一次entity_box, transform所有圆和box来自: Android客户端

点评

你还是没仔细看,程序里面从来没算半径到底等于什么,里面的半径30给什么都可以,1,2,3000都行,都是用图形自己得到的。不能少一次BOX。  详情 回复 发表于 2013-8-15 23:11
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-15 23:11:42 | 显示全部楼层
st788796 发表于 2013-8-15 22:48
呵呵,开始没仔细看,可以少一次entity_box, transform所有圆和box

你还是没仔细看{:soso_e113:},程序里面从来没算半径到底等于什么,里面的半径30给什么都可以,1,2,3000都行,都是用图形自己得到的。不能少一次BOX。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 15:07 , Processed in 0.354612 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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