找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4248|回复: 17

[教学] API应用系列之选择集非等比缩放

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-6-25 19:16:17 | 显示全部楼层 |阅读模式

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

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

×
非做块炸开方法,利用 xdrx_entity_transformedcopy 函数,直接实现非等比缩放

xdrx_entity_TransformedCopy

功    能:用转换矩阵作用一个实体或者选择集,获得转换后的实体的COPY,添加到数据库。

调用格式:(xdrx_entity_TransformedCopy <实体或者选择集> <三维转换矩阵>)

返 回 值:无
  1. (defun c:xscle (/ ss p xscl yscl mat0)
  2.   (if (and (setq ss (ssget))
  3.     (setq p (getpoint "\nBaspoint: "))
  4.     (setq xscl (getreal "\nXScalefactor: "))
  5.     (setq yscl (getreal "\nYscalefactor: "))
  6.       )
  7.     (progn
  8.       (setq mat0 (list (list xscl 0. 0. (- (car p)))
  9.          (list 0. yscl 0. (- (cadr p)))
  10.          (list 0. 0. 1. 0.)
  11.          (list 0. 0. 0. 1.)
  12.    )
  13.       )
  14.       (xdrx_entity_transformedcopy ss mat0)
  15.       (vl-cmdf ".erase" ss "")
  16.     )
  17.   )
  18.   (princ)
  19. )

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-7-25 08:47:33 | 显示全部楼层
1、 WIPEOUT的问题,以后会有更好的解决方案,现在需要加载WIPEOUT.ARX,对低版本的。
2、 xdrx_entity_setXXXX类 现在有更好,更方便的,统一的函数 xdrx_entity_setProPerty, 论坛搜索下这个关键字,前段有说明
       API参数是有规律的,如果你懂ARX,更容易理解,打开ARX帮助手册,函数名都是对应着对象和里面ARX参数的顺序(大都)
     (xdrx_entity_setcolor ent 2) -----> 改为黄色

3、API的DRAG函数,都是灵活组合的,

     (xdrx_drag_initget flag keyword) 设置
      flag = (+ 1 2 4 16 256 512....) 组合值
      keywrod = "A B C" 这样的空格分开的单个字母 ,不要写Ax 这样的,Ax可以写到提示字符串里面。

4、 xdrx_sentEntToDb 下版会解决。

5、 object_iterator可以对任意对象容易进行遍历,我整理下说明在发布用法
  
     现在可以用 xdrx_object_get 和xdrx_object_next 组合遍历任何对象容器

     (setq e (xdrx_object_get "block" "abc"))
     (while (setq e (xdrx_object_next))
         (setq el (cons e el))
     )
     
     el ---  就是所有块ABC内的实体表了。

    其他容器一样、各种符号表,词典。。。。

6、  xdrx_dragsscale  现在改为  xdrx_drag_scale
       xdrx_dragssmove 现在改为 xdrx_drag_move

     拖动函数的应用最好看下发布的自由拷贝里面的源代码,看下 xdrx_drag_initget xdrx_drag_setmode xdrx_drag_setMatirx 的组合应用。

点评

期待新的遍历函数! 真的是种革命啊  详情 回复 发表于 2013-7-27 01:27
谢谢xd老大的耐心解答! 作者就是不一样阿 我回去用用看!  详情 回复 发表于 2013-7-27 01:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-6-26 21:26:02 来自手机 | 显示全部楼层
看了下,没有加上z变换,lwpolyline如果有弧变换后就分开了,因为arc变换后可能为ellipse,非弧了,polyline没有特别
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-26 21:28:18 | 显示全部楼层

  1.       (setq mat0 (list (list xscl 0. 0. (- (car p)))
  2.          (list 0. yscl 0. (- (cadr p)))
  3.          (list 0. 0. 1. 0.)
  4.          (list 0. 0. 0. 1.)
  5.      )
构建不等比矩阵的代码,是不是有些问题? 用那些CAR P CADRP是什么意思?能讲讲吗?

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-26 21:30:44 | 显示全部楼层
测试,对一个LWPOLYLINE缩放,LWPOLYLINE没了。

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-26 21:54:20 | 显示全部楼层
研究了下,写了两个函数,

http://www.xdcad.net/forum/thread-669074-1-1.html

http://www.xdcad.net/forum/thread-669073-1-1.html

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-26 21:55:14 | 显示全部楼层
st788796 发表于 2013-6-26 21:26
看了下,没有加上z变换,lwpolyline如果有弧变换后就分开了,因为arc变换后可能为ellipse,非弧了,polyline ...

没弧的LWPOLYLINE,我测试的是。

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-6-26 21:56:16 来自手机 | 显示全部楼层
autocad用的是4x4矩阵,最后一行固定不变的(0. 0. 0. 1.),最后一列是位移,\三个数是是比例变换,其他是映射等变换
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-6-26 22:09:12 | 显示全部楼层
本帖最后由 newer 于 2013-6-26 22:13 编辑
st788796 发表于 2013-6-26 21:56
autocad用的是4x4矩阵,最后一行固定不变的(0. 0. 0. 1.),最后一列是位移,\三个数是是比例变换,其他是映 ...

是的,不等比变换,没(- (cadr p)) 这项,这项是 0.0

典型的是这样的:

  1. 命令: !pj
  2. (9.23438 126.748 0.0)

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2013-6-26 23:32:20 | 显示全部楼层
这个函数和 CAD 的 Transform 算法应该不一样,对 Pline 还有 BUG,如果把 Pline Explode 后对选择集变换是可以的,至于基点,正确的应该是用这个非等比矩阵变换这个基点后设置位移,当时只是为了演示这个 Transformedcopy , 基点是临时加上的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

发表于 2013-7-24 23:46:45 | 显示全部楼层
本帖最后由 cre8o 于 2013-7-24 23:51 编辑
newer 发表于 2013-6-26 21:28
构建不等比矩阵的代码,是不是有些问题? 用那些CAR P CADRP是什么意思?能讲讲吗?

cadr p 是矩阵位移的y向量吧 没测试不清楚 话说难道只加载api有很多函数就不能用了吗? 我2010x64英文版架载了xdrxapix64 结果make_block make_block_wipeout都不能使用.. 难道一定要加载环境库的吗?

点评

64位没测试过,现在的API里面的WIPEOUT是用的低版本的方法,不是用的AcDbWipeOUT类实现的,以后准备对高版本CAD改变实现方法。 你说的很多不能用是什么? 是上面两个WIPEOUT,还是还有什么其他的,如果有,请把函  详情 回复 发表于 2013-7-25 00:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-7-25 00:14:30 | 显示全部楼层
cre8o 发表于 2013-7-24 23:46
cadr p 是矩阵位移的y向量吧 没测试不清楚 话说难道只加载api有很多函数就不能用了吗? 我2010x64英文版 ...

64位没测试过,现在的API里面的WIPEOUT是用的低版本的方法,不是用的AcDbWipeOUT类实现的,以后准备对高版本CAD改变实现方法。

你说的很多不能用是什么? 是上面两个WIPEOUT,还是还有什么其他的,如果有,请把函数名列出来。

点评

归纳了一下 基本只有一个就是wipeout的问题比较没头绪 其他都还好 下面列一下 环境: cad2010x64英文版; XDRX_API.R18.X64.arx; ExpressTool对应版; 未安装工具箱的init基础环境 我只用lisp 1 (xdrx_block_make_  详情 回复 发表于 2013-7-25 08:11
另外 我想问问哪里有2010版api的说明文件? 我只下到06版 对照起来差别还是挺大的 lisp下xdrx的函数多了不少 乍一看有700多个 有些函数看到明显是替代原来函数的 问题是不知道怎么用  详情 回复 发表于 2013-7-25 00:25
好 我正拿来写点应用 整理好了发出来  详情 回复 发表于 2013-7-25 00:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

发表于 2013-7-25 00:20:32 | 显示全部楼层
XDSoft 发表于 2013-7-25 00:14
64位没测试过,现在的API里面的WIPEOUT是用的低版本的方法,不是用的AcDbWipeOUT类实现的,以后准备对高 ...

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

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

发表于 2013-7-25 00:25:06 | 显示全部楼层
XDSoft 发表于 2013-7-25 00:14
64位没测试过,现在的API里面的WIPEOUT是用的低版本的方法,不是用的AcDbWipeOUT类实现的,以后准备对高 ...

另外 我想问问哪里有2010版api的说明文件? 我只下到06版 对照起来差别还是挺大的 lisp下xdrx的函数多了不少 乍一看有700多个 有些函数看到明显是替代原来函数的 问题是不知道怎么用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

发表于 2013-7-25 08:11:17 | 显示全部楼层
XDSoft 发表于 2013-7-25 00:14
64位没测试过,现在的API里面的WIPEOUT是用的低版本的方法,不是用的AcDbWipeOUT类实现的,以后准备对高 ...

归纳了一下 基本只有一个就是wipeout的问题比较没头绪 其他都还好
下面列一下
环境: cad2010x64英文版; XDRX_API.R18.X64.arx; ExpressTool对应版; 未安装工具箱的init基础环境 我只用lisp
1
(xdrx_block_make_wipeout ent ) 返回nil  看起来好像是参数表不对 但是2006版chm的block_make_wipeout的参数表说明刚好有点儿缺
在表里看到了 xdrx_wipeout_make 用同样方式调用 依然无效 因为没有说明 也不好多试了
后来发现运行时cad命令行有个提示:
请事先安装AutoCAD快捷工具或者将wipeout.arx拷贝到ACAD搜索目录! 仅提示一次..
而实际上我的ET是一直随手安装的 除ET外cad不装任何插件 而我完整安装了ET之后也没有找到那个wipeout.arx..我猜只是版本问题
另外我看了一下 我加载arx的初始信息和这个帖子不一样 http://www.xdcad.net/forum/forum.php?mod=viewthread&tid=668715
我只有下面这一句 :
Command: ***  == AutoCAD 应用程序开发接口XdRx_API For AutoCAD Build 2013.7.23  ==  ***
               XDRX_API.R18.X64.arx successfully loaded.
自此才开始怀疑是不是没装基础环境的问题.. 想不通呀..求解答
2
xdrx_dragssrotate 使用正常 但不支持关键字  而06说明上的那个xdrx_dragssscale 似乎删掉了
测试代码
(setq ss (ssget))
(setq pt (getpoint "\n基点"))
(xdrx_drag_initget "Ax Bx Cx")
;(XDRX_INITGET "Ax Bx Cx") ;此处试验过 无效
;(initget "Ax Bx Cx");此处试验过 无效
(xdrx_dragssrotate "AAA" ss pt)
按Ax 返回 nil 按A 返回 invalid point

没了xdrx_dragssscale 其他看见又多了不少drag函数 一共18个 不敢乱试
发现有setMode 和setMatrix 又看到专门加了个高效的grdraw 一时让我无限遐想阿 还得请大师介绍一下draggen和其余几个的参数表 不然不敢试
提到这个用任意点表绘图的xdrx_grdraw 我想问问 有将任意实体读成点表的函数吗? 如果有就太完美了
3
xdrx_SetEntToDb造成停止相应关闭 其他数据库内ent函数也就无从测试了
4
(xdrx_entity_SetColor (car(entsel)) 1 nil) 返回nil 颜色没变化 可能参数表更新了
另外我想问问这个xdrx_object_iterator 我看了说明是创建xrecord的迭代器 指的是之后就可以用foreach xr xrecords这样来遍历了吗
我暂时没有太多文件写xrecord 只是想问问 按奈不住的兴奋..{:soso_e144:}


评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 热心帮忙奖!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-20 14:19 , Processed in 0.483916 second(s), 63 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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