找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4207|回复: 15

[公告] xdrx_polyline_setBulgeAt的用法

[复制链接]

已领礼包: 182个

财富等级: 日进斗金

发表于 2013-8-20 22:00:56 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-20 22:22:17 | 显示全部楼层
你想在哪个顶点后面加入弧线段,就给哪个顶点索引(索引从0开始)。

设定一个表来定义是什么意思? 举个具体的例子。
你要设置表,可以先构造数据,然后用 (mapcar '(lambda(x)(apply 'xdrx_polyline_setBulgeAt .......)))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

 楼主| 发表于 2013-8-20 22:38:35 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-20 22:52:40 | 显示全部楼层
kcad2010 发表于 2013-8-20 22:38
如果我是想建立一个正方形 四个角都分别为 R1 R2 R3 R4
应该怎么写?

告诉你个方法,加深你的印象。

你先收工画好你说的图形,倒角好的。 然后entget 它,看看凸度都是多少,4个。

然后你用 (setq e (xdrx_polyline_make t p1 p2 p3 p4)) 画个封闭矩形,点可以在其他地方。
然后        (xdrx_polyline_setbulgeAt e 0 凸度1)
               (xdrx_polyline_setbulgeAt e 1 凸度2)
               (xdrx_polyline_setbulgeAt e 2 凸度3)
              (xdrx_polyline_setbulgeAt e 3 凸度4)
凸度1,2,3,4是你上面看到的按顺序来的。

看看程序给你做什么样了。


另外:接受你的建议,下个版本加入 (xdrx_polyline_setBulgeAt e  <index1 凸度> [<index2 凸度>]... [<indexn 凸度>])这样的配对的参数了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

 楼主| 发表于 2013-8-20 23:02:47 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-20 23:53:59 | 显示全部楼层
kcad2010 发表于 2013-8-20 23:02
你前面讲的我能明白
用(mapcar '(lambda(x)(apply 'xdrx_polyline_setBulgeAt .......)))
怎么写一个通 ...

不用写了,下个版本就支持配对的表了。

上面说的忘了,除了添加弧段,你还要添加4个顶点,因为倒角后变成8个顶点了。 添加顶点直接用:

(xdrx_polyline_addVertexat <LWPOLYLINE实体名> <index> <点> [bulge] [起始宽度][结束宽度])


把凸度直接加进去,就不用单独set了,然后另外四个顶点你需要用xdrx_polyline_setPointAt 移动


看下下面的例子


xdtb_drawrec.gif


  1. (defun c:tt ()
  2.   (if (and
  3.         (setq r (getreal "\n半径<退出>:"))
  4.         (setq p1 (getpoint "\n矩形第一点<退出>:"))
  5.         (setq p3 (getcorner p1 "\n矩形对角点<退出>:"))
  6.       )
  7.     (progn
  8.       (setq vec (mapcar '- p3 p1)
  9.             v (list (car vec) 0.0 0.0)
  10.             p2 (mapcar '+ p1 v)
  11.             v (list 0.0 (cadr vec) 0.0)
  12.             p4 (mapcar '+ p1 v)
  13.             bulge (xdrx_math_tan (/ pi 8))
  14.             h+ (list  r 0.0 0.0)
  15.             h- (list (- r) 0.0 0.0)
  16.             v- (list 0.0 (- r) 0.0)
  17.             v+ (list  0.0 r 0.0)
  18.       )
  19.       (setq e (xdrx_polyline_make t p1 p2 p3 p4))
  20.       (xdrx_polyline_addVertexAt e 1 (mapcar '+ p2 h-) bulge)
  21.       (xdrx_polyline_setPointAt  e 2 (mapcar '+ p2 v+))
  22.       (xdrx_polyline_addVertexAt e 3 (mapcar '+ p3 v-) bulge)
  23.       (xdrx_polyline_setPointAt  e 4 (mapcar '+ p3 h-))
  24.       (xdrx_polyline_addVertexAt e 5 (mapcar '+ p4 h+) bulge)
  25.       (xdrx_polyline_setPointAt  e 6 (mapcar '+ p4 v-))
  26.       (xdrx_polyline_addVertexAt e 0 (mapcar '+ p1 v+) bulge)
  27.       (xdrx_polyline_setPointAt  e 1 (mapcar '+ p1 h+))
  28.     )
  29.   )
  30.   (princ)
  31. )


点评

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

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

 楼主| 发表于 2013-8-21 07:57:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

 楼主| 发表于 2013-8-21 08:02:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

 楼主| 发表于 2013-8-21 08:05:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-21 08:19:19 | 显示全部楼层
XDSoft 发表于 2013-8-20 23:53
不用写了,下个版本就支持配对的表了。

上面说的忘了,除了添加弧段,你还要添加4个顶点,因为倒角后 ...

老大的程序还可以这样改写
  1. (defun c:tt ()
  2.   (if (and
  3.         (setq r (getreal "\n半径<退出>:"))
  4.         (setq p1 (getpoint "\n矩形第一点<退出>:"))
  5.         (setq p3 (getcorner p1 "\n矩形对角点<退出>:"))
  6.       )
  7.     (progn
  8.       (setq vec (mapcar '- p3 p1)
  9.             v (list (car vec) 0.0 0.0)
  10.             p2 (mapcar '+ p1 v)
  11.             v (list 0.0 (cadr vec) 0.0)
  12.             p4 (mapcar '+ p1 v)
  13.             bulge (xdrx_math_tan (/ pi 8))
  14.             h+ (list  r 0.0 0.0)
  15.             h- (list (- r) 0.0 0.0)
  16.             v- (list 0.0 (- r) 0.0)
  17.             v+ (list  0.0 r 0.0)
  18.             p1_- (mapcar '+ p1 v+)
  19.             p1_+ (mapcar '+ p1 h+)
  20.             p2_- (mapcar '+ p2 h-)
  21.             p2_+ (mapcar '+ p2 v+)
  22.             p3_- (mapcar '+ p3 v-)
  23.             p3_+ (mapcar '+ p3 h-)
  24.             p4_- (mapcar '+ p4 h+)
  25.             p4_+ (mapcar '+ p4 v-)
  26.       )
  27.       (setq e (xdrx_polyline_make t  p1_- p1_+ p2_- p2_+ p3_- p3_+ p4_- p4_+))
  28.       (mapcar '(lambda(x)(apply 'xdrx_polyline_setBulgeAt (list e x bulge)))'(0 2 4 6))
  29.     )
  30.   )
  31.   (princ)
  32. )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-21 08:21:01 | 显示全部楼层
kcad2010 发表于 2013-8-21 08:05
xdrx_math_tan 这个是什么。我cad2005好像用不了这个?

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

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-21 08:51:43 | 显示全部楼层
kcad2010 发表于 2013-8-21 08:42
我有一个问题不知道老大是怎么看的
xdrx_polyline_make 你说要升版那如果我们现在写的好lisp以后下新的a ...

再给你个改编的版本,这个好理解了。用圆和多段线交点去求那8个顶点。
  1. (defun c:tt ( / bulge e e1 int intl p p1 p2 p3 p4  r v vec x)
  2.   (defun _t(e p r / e1 int) ;;给圆心半径,算出倒角后两顶点
  3.      (setq e1 (xdrx_circle_make p r)
  4.            int (xdrx_entity_intersectwith e e1)
  5.      )
  6.      (xdrx_entity_delete e1)
  7.      int
  8.   )
  9.   (if (and
  10.         (setq r (getreal "\n半径<退出>:"))
  11.         (setq p1 (getpoint "\n矩形第一点<退出>:"))
  12.         (setq p3 (getcorner p1 "\n矩形对角点<退出>:"))
  13.       )
  14.     (progn
  15.       (setq vec (mapcar '- p3 p1)
  16.             v (list (car vec) 0.0 0.0)
  17.             p2 (mapcar '+ p1 v)
  18.             v (list 0.0 (cadr vec) 0.0)
  19.             p4 (mapcar '+ p1 v)
  20.             bulge (xdrx_math_tan (/ pi 8))
  21.       )
  22.       (setq e (xdrx_polyline_make t  p1 p2 p3 p4)
  23.             intl (apply 'append (mapcar '(lambda(x)(_t e x r))(list p1 p2 p3 p4)));;四个顶点变成倒角后的8个顶点
  24.             intl (xdrx_points_sortOnCurve  e intl t);;顶点表沿着曲线排序,保证点顺序正确
  25.       )
  26.       (xdrx_entity_delete e)
  27.       (setq e(apply 'xdrx_polyline_make (cons t intl)));;绘制8个顶点多段线
  28.       (mapcar '(lambda(x)(apply 'xdrx_polyline_setBulgeAt (list e x bulge)))'(1 3 5 7));;添加弧段
  29.     )
  30.   )
  31.   (princ)
  32. )


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-21 08:56:17 | 显示全部楼层
kcad2010 发表于 2013-8-21 08:42
我有一个问题不知道老大是怎么看的
xdrx_polyline_make 你说要升版那如果我们现在写的好lisp以后下新的a ...

你没跟踪过API,你没理解老大的意思,意思是,现在只支持单参数的,以后支持多参数

比如现在的设置凸度,你只能 (xdrx_polyline_setBulgeAt e p0 0.5), 你要修改多个,只能重复的写,改编后,就在一个函数就搞定了,省略循环处理了。
改后应该是这样:(xdrx_polyline_setBulgeAt e p0 0.5 p1 0.3 p2 0.4.....pn 0.3),不会影响你原来的写过的程序的,因为(xdrx_polyline_setBulgeAt e p0 0.5)这样的还一样用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 182个

财富等级: 日进斗金

 楼主| 发表于 2013-8-21 09:20:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 12:11 , Processed in 0.475963 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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