明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: hlzhong

求助:一个关于选取直线获得端点坐标的循环算法

  [复制链接]
发表于 2003-3-14 13:04:00 | 显示全部楼层

程序最後

(command "_.ERASE" SS "")
  PT_LIST
)
 楼主| 发表于 2003-3-16 18:42:00 | 显示全部楼层

非常感谢大侠的多次指导,关于该程序还有一个难题,不知如何

非常感谢大侠的多次指导,关于该程序还有一个难题,不知如何处理?
问题是这样的:我上次那个完整的透视图程序中从开始的设定点对及第2,3,4部分可以看出这个程序只能针对8个顶点的情况,呵呵,很傻瓜化,但龙大侠的那段得到顶点坐标的循环算法很好,可以针对任意多的情况。我现在想将程序功能改成: 针对任意多顶点的一个空间线框模型,通过得到其顶点再进行透视投影后得到其透视点坐标,再连接相应的透视点构成透视投影图。但这当中会产生一个问题:前面选择的方式,选取的次序不一样的话,后面生成的透视点连接顺序就不一样,这样就会混乱,即原来有的两点间根本没有直线连接却在透视图中有直线连接了。我的一个解决的想法是:在循环选择程序中,不仅要能得到各顶点坐标,还能得到每相应的两点(即已存在的直线的两端点)所隶属的直线的信息,这样在最后的连接点对时再让生成的相应的透视点相连,就不致产生混乱。这可能涉及到对象,选择集的操作,但由于水平有限,我没能写出该代码? 不知大侠能否帮忙或是其他更好的办法?谢谢!!!
发表于 2003-3-17 10:10:00 | 显示全部楼层

請上傳张要处理的图面,比较容易了解你要甚么??

 楼主| 发表于 2003-3-17 10:49:00 | 显示全部楼层

已传上一张图,可能是上次说的太复杂了点,简单的说。。

龙大侠,已传上一张图,可能是上次说的太复杂了点,简单的说就是:原来的程序只能用于8个顶点的空间模型得到其透视图,而现在希望程序能针对主要的三种情况:即六面体,三棱柱,三棱锥  能得到其透视图,而要求程序在事先不知是那种情况下也能实现,而不要想傻瓜型的固定了顶点数,呵呵,如果真又有一个立方体被打了个方形的通空,那么顶点数又变成了16个了,情况就是这样,就是希望程序功能再智能化点,能针对不定顶点的空间模型进行处理,不知大侠清楚没有? 因为是要生成透视投影点,可能会涉及到透视点相连是否混乱的问题,还请大侠赐教,谢谢!

本帖子中包含更多资源

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

x
发表于 2003-3-18 08:00:00 | 显示全部楼层

图中都只有LINE恐很难分出型体,用_ai_box/_ai_wedge/_ai_pyramid指令画的图才有可能

 楼主| 发表于 2003-3-18 13:19:00 | 显示全部楼层

嗯,如果能对ai_box,ai_wedge,ai_pyramid等作出的图进行。。

嗯,我给的图中最后一个是line作出的,如果这样的(由line作出的)模型不好处理,那么如果能对ai_box,ai_wedge,ai_pyramid等作出的图进行处理 也行,但不知如何进行? 还请赐教,谢谢!
发表于 2003-3-18 15:39:00 | 显示全部楼层

只對用_ai_box , _ai_wedge, _ai_pyramid指令畫的圖有效

;;只對用_ai_box , _ai_wedge, _ai_pyramid指令畫的圖有效
(defun C:TT (/ SS SS1 N N1 NN ENT CHECK TMP PT_LIST)
  (setq SS (ssget '((0 . "polyline"))))
  (setq PT_LIST '())
  (setq N 0)
  (repeat (sslength SS)
    (setq ENT (ssname SS N))
    (setq CHECK (cdr (assoc 100 (reverse (entget ENT)))))
    (cond
      ((= CHECK "AcDbPolygonMesh")
       (setq PT_LIST1 '())
       (command "_.COPY" ENT "" "0,0" "@")
       (command "_.EXPLODE" (entlast))
       (setq SS1 (ssget ""))
       (setq N1 0)
       (repeat (sslength SS1)
         (setq ENT (entget (ssname SS1 N1)))
         (setq NN 0)
         (repeat 4
           (if
             (not
               (member (setq TMP (cdr (assoc (+ 10 NN) ENT))) PT_LIST1)
             )
              (setq PT_LIST1 (append PT_LIST1 (list TMP)))
           )
           (setq NN (1+ NN))
         )
         (setq N1 (1+ N1))
       )
       (setq
         PT_LIST (append
                   PT_LIST
                   (list
                     (append (list (length PT_LIST1)) (list PT_LIST1))
                   )
                 )
       )
       (command "_.ERASE" SS1 "")
      )
    )
    (setq N (1+ N))
  )
  (command "_.ERASE" SS "")
  PT_LIST
)
 楼主| 发表于 2003-3-19 21:53:00 | 显示全部楼层

龙大侠,我现在的问题真正是;

龙大侠,我现在的问题真正是:循环选择程序选取ai_box后得到的点表中各顶点坐标的排序没有什么规律  如一实例:((8 ((186.192 116.81 145.46) (186.192 116.81 0.0) (151.833 215.401 0.0) (151.833 215.401 145.46) (269.603 256.443 0.0) (269.603 256.443 145.46) (303.962 157.853 0.0) (303.962 157.853 145.46))))   ,而这一点(没有规律)对于透视投影程序来说是致命的,因为透视程序要求最终得到的透视点之间的连线不是随意的,而是要原来ai_box中本身就有的各条边的投影(这样说有点不科学);如果我把透视程序做成傻瓜化的(如只针对立方体的透视,只有8个顶点),就可以从你的循环选择程序中按固定的顺序(格式)读取顶点坐标值;但如果我想把透视投影程序做得智能化些,即不管针对立方体,还是三棱柱,还是三
棱锥,都能将循环选择程序得到的各点坐标赋给相应的透视投影程序中的变量(各变量不仅仅是坐标值,它还直接代表着最终的透视点谁和谁相连),给变量赋坐标值,又要涉及到是否会影响到最终的连接关系,因此颇为头痛。所以我上次说想用一种方法试试:不仅对点坐标值进行管理,还给各点加上所隶属的直线的信息,如:一个立方体有8个顶点,有12条边,这样就可以在循环选择的同时记录下:(L1 (a1 a2)) (L2 (a2 a3))..., 在得到透视点后再将坐标值赋回来,一条线一条线的处理。说白了,不管多少顶点的实体,它生成的透视图都是它的各边投影生成的,现在的实质就是要 求出各边的投影,这样的话就不会为原来那种担心各点连线是否混乱的问题头痛了。至于将各种实体转换为线框模型,则可以在程序最前面加2次explode 。这样就是把 透视投影程序做成子程序嵌套在你的循环选择程序中,选一条直线就处理生成一条相应的透视点连成的直线,这样或许能行。但由于水平有限,我还不太会处理 如何将透视子程序嵌套到你的循环选择程序中,因为对你的循环选择程序还没有理解透,所以未能实现这点,希望大侠能不惜赐教,帮我写出代码,甚谢!!!

另说明:上次的透视投影算法应该没问题,有点特殊,我是重新建立了一个透视场,把物体经旋转后放在人眼与电脑屏幕之间,取一支眼为视点(大概给出它在场中的坐标),将物体向屏幕投影,所以算法有点怪。如果大侠能把程序调通,至于效果的话,不一定会很好看,因为这个透视场中的参数可以改变,多试几个才行,这点大侠不用理会。还请大侠多费心实现上面的代码, 我会感谢你的,呵呵!!!  下次请赋上你的E-mail 地址
发表于 2003-3-20 09:19:00 | 显示全部楼层

对于线(L1 ((10 20 30)(30 20 10)))与(L2 ((30 20 10)(10 20 30)))投影上有差别吗??

 楼主| 发表于 2003-3-20 19:38:00 | 显示全部楼层

嗯,没有差别的,其实这2条线。。

没有差别的,其实这2条线由于端点完全一样(只不过次序相反),所以最终的投影也一样,应该说是重合了才对。当然程序中尽量能排除掉一条,如果比较麻烦就不用管它,反正最终它们重合了,效果看上去一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 07:26 , Processed in 0.191175 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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