找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

[求助] 如何纠正非等比块的210组码

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2018-8-7 18:44:08 | 显示全部楼层
感谢N版和marting的热情回复,看来这个问题得放一放。
明经上http://bbs.mjtd.com/forum.php?mo ... ght=210%D7%E9%C2%EB vectra也是高手了,也放置起来
1.png

点评

一、同样一个块,在什么都不变,只改变NORMAL的情况下,如下图 [attachimg]79416[/attachimg] 斜的矩形,是平行那个矩形在WCS的投影的样子。 你的问题是现在有那个斜的矩形块, 想normal改成0,0,1,那  详情 回复 发表于 2018-8-7 19:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-8-7 19:43:07 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2018-8-7 18:44
感谢N版和marting的热情回复,看来这个问题得放一放。
明经上http://bbs.mjtd.com/forum.php?mod=viewthre ...

一、同样一个块,在什么都不变,只改变NORMAL的情况下,如下图

搜狗截图20180807184507.png


斜的矩形,是平行那个矩形在WCS的投影的样子。


你的问题是现在有那个斜的矩形块, 想normal改成0,0,1,那改后,显示的样子就是水平那个矩形。


改这个很容易,得到原来的坐标系和WCS下对象坐标系的变换矩阵,作用下实体就可以了。

块改NORAML-掰正.gif

  1. (defun c:tt ()
  2.   (if (setq e (car (xdrx_entsel "\n拾取块:" '((0 . "insert")))))
  3.     (progn (setq ecs (xdrx_entity_getecs e)
  4.                  ori (list (caar ecs) (cadar ecs) 0.0)
  5.                  ocs (list ori '(1 0 0) '(0 1 0) '(0 0 1))
  6.                  mat (xdrx_matrix_transcoordsys ecs ocs)
  7.            )
  8.            (xdrx_entity_transformedcopy e mat)
  9.            (xdrx_setpropertyvalue (entlast) "color" 1)
  10.     )
  11.   )
  12.   (princ)
  13. )



二、掰正后,normal变成 (0 0 1.0), 要想形状还不变,那只能是不等比例,算出原来的块和转NORMAL的块的夹角,在根据前后包围框,算出X,Y的比例,就可以实现了。

块改NORAML-对齐原来.gif

代码:

  1. (defun c:tt ()
  2.   (if (setq e (car (xdrx_entsel "\n拾取块:" '((0 . "insert")))))
  3.     (progn (setq ecs (xdrx_entity_getecs e)
  4.                  ori (list (caar ecs) (cadar ecs) 0.0)
  5.                  ocs (list ori '(1 0 0) '(0 1 0) '(0 0 1))
  6.                  mat (xdrx_matrix_transcoordsys ecs ocs)
  7.            )
  8.            (xdrx_entity_transformedcopy e mat);;normal变(0 0 1.0)
  9.            (setq blk  (entlast)
  10.                  box  (xdrx_entity_box blk)
  11.                  x2   (distance (car box) (cadr box));;转后的X方向的长度
  12.                  y2   (distance (car box) (last box));;转后的Y方向的长度
  13.                  an2  (angle (car box) (cadr box))
  14.                  xdir (cadr ecs);;原来normal平面的,块ECS的X轴
  15.                  box  (xdrx_entity_box e xdir);;得到原来ECS下X轴方向的包围盒
  16.                  box  (xd::pnts:setz box 0.0)
  17.                  x1   (distance (car box) (cadr box));;原来normal的X方向长度
  18.                  y1   (distance (car box) (last box));;原来normal的Y方向长度
  19.                  an1  (angle (car box) (cadr box));;原来normal的X角度
  20.                  sclx (/ x1 x2); 新x比例
  21.                  scly (/ y1 y2); 新y比例
  22.                  an (- an1 an2); 旋转角度
  23.            )
  24.            (setq mrot
  25.                   (xdrx_matrix_setrotation an '(0 0 1.0) (car box));;旋转矩阵
  26.            )
  27.            (xdrx_entity_transform blk mrot)
  28.            (xdrx_setpropertyvalue
  29.              blk
  30.              "ScaleFactors"
  31.              (list sclx scly 1.0)
  32.              "color"
  33.              1
  34.            )
  35.     )
  36.   )
  37.   (princ)
  38. )



上面是API的实现,思路在这,你想用纯LISP,按思路,去实现相应的API函数即可。

评分

参与人数 1D豆 +5 收起 理由
/db_自贡黄明儒_ + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2018-8-7 19:44:19 | 显示全部楼层
本帖最后由 st788796 于 2018-8-7 19:48 编辑

看了下图形,你这图是两个问题

1 块定义内部对象有 Z
2 块引用有Normal
对 1 只需要消除 内部对象 Z,保持外观不变是对 2 ,这是不可能的(对你这个图)

把 块 看作是一张纸,你在 UCS 下插入了,假如在 WCS 下投影为 一条线,这就不是修改 Normal 问题了


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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-8-7 22:06:02 | 显示全部楼层
个人觉得,同一个NORMAL,才有Z坐标为0的需求, 都不一样的平面的,Z都设置0反而乱套了。
而且,必须是NORMAL和VIEWDIR是一个方向的时候,才有Z坐标为0的需求。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2018-8-8 08:00:11 | 显示全部楼层
newer 发表于 2018-8-7 19:43
一、同样一个块,在什么都不变,只改变NORMAL的情况下,如下图

另外请教N版一个问题:我的附件中的块,爆破后是一条直线,为什么使用9楼G版写的correct210会失败?

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-8-8 11:57:32 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2018-8-8 08:00
另外请教N版一个问题:我的附件中的块,爆破后是一条直线,为什么使用9楼G版写的correct210会失败?

(vlax-tmatrix
                  (list        (list 1 0 (car ZA) 0)
                        (list 0 1 (cadr ZA) 0)
                        (list 0 0 (caddr ZA) 0)
                        (list 0 0 0 1)
                  )
                )

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 09:19 , Processed in 0.250148 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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