明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3689|回复: 39

[讨论] 这个程序还有几个问题,大家帮忙解决一下!!!

[复制链接]
发表于 2013-12-29 12:16 | 显示全部楼层 |阅读模式
本帖最后由 275437962 于 2013-12-29 12:33 编辑

我想让CAD中的所有满足固定长度和角度两个条件(如直线的长度为0.75,角度为0)的直线的中点插入事先命名的块,让新插入块的图层和它对应的直线所在图层一致,并让所有插入块的颜色改成bylayer(即随层),还有很重要的一点,并将距每一条满足条件直线中点的固定长度范围内(这个范围最好为以每一条直线中点为圆心的虚拟圆)的对象删除(删除的对像包括落在虚拟圆内的对像,也包括与虚拟圆相交的对象;包括每一条满足条件的直线)

说明:里面出现的长度 和角度以及虚拟圆的半径,最好可以更改。


上面是我最初提的问题,有一位朋友写了如下代码,但还存在如下三个问题:

一是“让新插入块的图层和它对应的直线所在图层一致,并让所有插入块的颜色改成bylayer(即随层)”,这个问题还是没有解决,现在程序是新插入块的图层是发生变化了,不是0层,但所有新插入的块的图层对应的应该是案例数据中黄色或紫色线(即满足上面两个条件的直线)所在的图层,现在新插入块的图层对应的是红色的线所在的图层(你可以用程序执行一下下面的“案例数据.dwg”)

二是,我测试时发现的,如果直线的长度不是整的,而是,比如0.75或是0.075,那么这时候直线是不能被选中插入块的

三是,还有就是那个角度条件 ,不起作用,如给成90度,根本就不能达到要求。


  1. (defun c:tt ( / a ang bnm e en i la len pe pm ps pts ss sse ssl)
  2.         (vl-load-com)
  3.         (vl-cmdf "undo" "be")
  4.   (if (and (setq bnm (getstring "\输入块名:"))
  5.            (setq ss (ssget '((0 . "line")))))
  6.   (progn
  7.    (setq i -1 ssl (ssadd))
  8.    (while (setq en (ssname ss (setq i (1+ i))))
  9.            (setq len (Vlax-Get (Vlax-Ename->Vla-Object en) 'Length )
  10.                    ang (Vlax-Get (Vlax-Ename->Vla-Object en) 'Angle )
  11.                    la (Vlax-Get (Vlax-Ename->Vla-Object en) 'Layer )
  12.            )
  13.            (if (and (= len 1.0) (= ang 0.0));线长,角度可改
  14.                    (ssadd en ssl)
  15.                    )
  16.            )
  17.                    (setq i -1)
  18.                    (while (setq e (ssname ssl (setq i (1+ i))))
  19.                            (progn
  20.                            (setq ps (Vlax-Get (Vlax-Ename->Vla-Object e) 'StartPoint )
  21.                            pe (Vlax-Get (Vlax-Ename->Vla-Object e) 'EndPoint )
  22.                            pm (mapcar '* '(0.5 0.5 0.5) (mapcar '+ ps pe))
  23.                    )
  24.                    (command "circle" pm 1.0);半径可改
  25.                    (setq a (entlast))
  26.                    (setq pts (divpts a 500))
  27.                    (setq sse (ssget "cp" pts))
  28.                    (command "erase" a sse "")
  29.                    (command "-insert" bnm pm "0.5" "" "")
  30.                    (Vlax-Put-Property (Vlax-Ename->Vla-Object (entlast)) 'Layer la)
  31.                    )
  32.                    )
  33.            )
  34.    )
  35.    (vl-cmdf "undo" "e")
  36. )
  37. (defun divpts (ename n / ename endparam i nparam pt ptlst startparam)
  38.   (setq startparam (vlax-curve-getstartparam ename)
  39. endparam (vlax-curve-getendparam ename)
  40. nparam (/ (- endparam startparam) n)
  41. i -1
  42. ptlst '()
  43.   )
  44.   (while (<= (setq i (1+ i))
  45.       n
  46.   )
  47.     (setq pt (vlax-curve-getpointatparam ename (* i nparam))
  48.    ptlst (cons pt ptlst)
  49.     )
  50.   )
  51.   (reverse ptlst)
  52. )

本帖子中包含更多资源

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

x
发表于 2013-12-29 13:25 | 显示全部楼层
大家不要理会....问题已经解决,但此人人品巨差,没有支付100明经,最终代码完成代码我已经删除!
 楼主| 发表于 2013-12-29 13:43 | 显示全部楼层
q3_2006 发表于 2013-12-29 13:25
大家不要理会....问题已经解决,但此人人品巨差,没有支付100明经,最终代码完成代码我已经删除!

兄弟,作人要厚道,本来就好100个明经币,结果问题还没解决完,就再要求增加100,还说我没有了,有的时候,人不能太在乎利了,在说,我也没有说不给啊,可以我后来说明了,这个程序还存在一些问题,你根本不理视,做事要有始有终吗,这样别人才会敬重啊!!1
发表于 2013-12-29 13:49 | 显示全部楼层
275437962 发表于 2013-12-29 13:43
兄弟,作人要厚道,本来就好100个明经币,结果问题还没解决完,就再要求增加100,还说我没有了,有的时候 ...

最终版已经删除...我的演示已经说明问题..图层已经改成直线的层了...并且将图块颜色统一随层....你去准备好100明经币再来悬赏....不然不会有人再相信你的...我的人品,有目共睹!
 楼主| 发表于 2013-12-29 14:08 | 显示全部楼层
q3_2006 发表于 2013-12-29 13:49
最终版已经删除...我的演示已经说明问题..图层已经改成直线的层了...并且将图块颜色统一随层....你去准备 ...

兄弟,咱们先不说人品的问题,你看看我上面的需求以及我后来测试程序发现的问题,你光拿你的演示说事,你说图层已经改成直线的层了,并且将图块颜色统一随层,你最好仔细看看我上面提的问题,“让新插入块的图层和它对应的直线所在图层一致,并让所有插入块的颜色改成bylayer(即随层),”  
还有
“一是“让新插入块的图层和它对应的直线所在图层一致,并让所有插入块的颜色改成bylayer(即随层)”,这个问题还是没有解决,现在程序是新插入块的图层是发生变化了,不是0层,但所有新插入的块的图层对应的应该是案例数据中黄色或紫色线(即满足上面两个条件的直线)所在的图层,现在新插入块的图层对应的是红色的线所在的图层(你可以用程序执行一下下面的“案例数据.dwg”)”
不是和任意直线的图层一致,而是和满足条件直线的图层一致,也就是案例数据中黄色或紫色线的直线,不知道你有没有执行过上面的案例数据,你试了就知道了,执行完新插入的图层的颜色是红色


还有就是后面的两个测试的问题,你有没有试了,我确实发现存在这些问题,我才提出了,也不是我额外提出的,原来的需求里,写的都很清楚,(如直线的长度为0.75,角度为0),你的程序只认整数长度,还有既然允许改角度,那么我试个90度,结果程度不能找到这样的线,

我是就事论事,没有针对人,你上来就说人品不好,太不够意思了吗,当时没有即时给你这100明经币,想着程序还有些问题,而且确实影响使用,所以就暂时没给,唉,我希望这是个误会,不要往心里去!!!我确实是尊重别人劳动成果的,但我觉得拿出让大家都信服的代码更受人尊重!!!
发表于 2013-12-29 14:14 | 显示全部楼层
 楼主| 发表于 2013-12-29 14:49 | 显示全部楼层
本帖最后由 275437962 于 2013-12-29 18:34 编辑



抱歉抱歉抱歉抱歉

本帖子中包含更多资源

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

x
发表于 2013-12-29 14:58 | 显示全部楼层
本帖最后由 q3_2006 于 2013-12-30 07:17 编辑
275437962 发表于 2013-12-29 14:49
兄弟,你正面回答,我的问题在上个页面是不是也是这样提的,没有额外增加吧,你敢保证你的程序没有我说明的 ...
  1. ;;第一版,处理关键直线长度及角度相同的情况
  2. (defun c:tt ( / a ang bnm e en i la len n pe pm ps pts ss sse ssl)
  3.         (vl-load-com)
  4.         (vl-cmdf "undo" "be")
  5.   (if (setq bnm (getstring "\输入块名:"))
  6.   (progn
  7.           (setq len (getdist "\n输入被替换直线的长度:"))
  8.           (setq ang (getangle "\n输入被替换直线的角度:"))
  9.           (setq r (getreal "\n输入虚拟圆的半径:"))
  10.           (setq ss (ssget '((0 . "line"))))
  11.    (setq i -1 ssl (ssadd))
  12.    (while (setq en (ssname ss (setq i (1+ i))))
  13.            (setq len1 (Vlax-Get (Vlax-Ename->Vla-Object en) 'Length )
  14.                    ang1 (Vlax-Get (Vlax-Ename->Vla-Object en) 'Angle )
  15.                               )
  16.            (if (and (= len1 len) (= ang1 ang))
  17.                    (ssadd en ssl)
  18.                    )
  19.            )
  20.                    (setq n -1)
  21.                    (while (setq e (ssname ssl (setq n (1+ n))))
  22.                            (progn
  23.                            (setq ps (Vlax-Get (Vlax-Ename->Vla-Object e) 'StartPoint )
  24.                            pe (Vlax-Get (Vlax-Ename->Vla-Object e) 'EndPoint )
  25.                            pm (mapcar '* '(0.5 0.5 0.5) (mapcar '+ ps pe))
  26.                           la (Vlax-Get (Vlax-Ename->Vla-Object e) 'Layer )
  27.                    )
  28.                    (command "circle" pm r)
  29.                    (setq a (entlast))
  30.                    (setq pts (divpts a 500))
  31.                    (setq sse (ssget "cp" pts))
  32.                    (command "erase" a sse "")
  33.                    (command "-insert" bnm pm "" "" "")
  34.                    (Vlax-Put-Property (Vlax-Ename->Vla-Object (entlast)) 'Layer la)
  35.                    (vlax-for X
  36.      (vla-item (vla-get-blocks
  37.    (vla-get-activedocument (vlax-get-acad-object))
  38.         )
  39.         bnm
  40.      )
  41.     (setq el (cons (vlax-vla-object->ename X) el))
  42.   )
  43.   (mapcar '(lambda (x) (VLA-PUT-COLOR (Vlax-Ename->Vla-Object x) 256))el)
  44.                   
  45.                    )
  46.                    )
  47.            )
  48.    )
  49.    (command "_.regen")
  50.    (vl-cmdf "undo" "e")
  51. )
  52. (defun divpts (ename n / ename endparam i nparam pt ptlst startparam)
  53.   (setq startparam (vlax-curve-getstartparam ename)
  54. endparam (vlax-curve-getendparam ename)
  55. nparam (/ (- endparam startparam) n)
  56. i -1
  57. ptlst '()
  58.   )
  59.   (while (<= (setq i (1+ i))
  60.       n
  61.   )
  62.     (setq pt (vlax-curve-getpointatparam ename (* i nparam))
  63.    ptlst (cons pt ptlst)
  64.     )
  65.   )
  66.   (reverse ptlst)
  67. )

  68. (defun c:tt ( / a ang bnm e en i la len n pe pm ps pts ss sse ssl)
  69.         (vl-load-com)
  70.         (vl-cmdf "undo" "be")
  71.   (if (setq bnm (getstring "\输入块名:"))
  72.   (progn
  73.           (setq len (getdist "\n输入被替换直线的长度:"))
  74.           (setq ang (getangle "\n输入被替换直线的角度:"))
  75.           (setq r (getreal "\n输入虚拟圆的半径:"))
  76.           (setq ss (ssget '((0 . "line"))))
  77.    (setq i -1 ssl (ssadd))
  78.    (while (setq en (ssname ss (setq i (1+ i))))
  79.            (setq len1 (Vlax-Get (Vlax-Ename->Vla-Object en) 'Length )
  80.                    ang1 (Vlax-Get (Vlax-Ename->Vla-Object en) 'Angle )
  81.                               )
  82.            (if (and (= len1 len) (= ang1 ang))
  83.                    (ssadd en ssl)
  84.                    )
  85.            )
  86.                    (setq n -1)
  87.                    (while (setq e (ssname ssl (setq n (1+ n))))
  88.                            (progn
  89.                            (setq ps (Vlax-Get (Vlax-Ename->Vla-Object e) 'StartPoint )
  90.                            pe (Vlax-Get (Vlax-Ename->Vla-Object e) 'EndPoint )
  91.                            pm (mapcar '* '(0.5 0.5 0.5) (mapcar '+ ps pe))
  92.                           la (Vlax-Get (Vlax-Ename->Vla-Object e) 'Layer )
  93.                    )
  94.                    (command "circle" pm r)
  95.                    (setq a (entlast))
  96.                    (setq pts (divpts a 500))
  97.                    (setq sse (ssget "cp" pts))
  98.                    (command "erase" a sse "")
  99.                    (setvar "clayer" la)
  100.                    (command "-insert" bnm pm "" "" "")
  101.                    (vlax-for X
  102.      (vla-item (vla-get-blocks
  103.    (vla-get-activedocument (vlax-get-acad-object))
  104.         )
  105.         bnm
  106.      )
  107.     (setq el (cons (vlax-vla-object->ename X) el))
  108.   )
  109.   (mapcar '(lambda (x) (VLA-PUT-COLOR (Vlax-Ename->Vla-Object x) 0))el)
  110.                   
  111.                    )
  112.                    )
  113.            )
  114.    )
  115.    (command "_.regen")
  116.    (vl-cmdf "undo" "e")
  117. )
  118. (defun divpts (ename n / ename endparam i nparam pt ptlst startparam)
  119.   (setq startparam (vlax-curve-getstartparam ename)
  120. endparam (vlax-curve-getendparam ename)
  121. nparam (/ (- endparam startparam) n)
  122. i -1
  123. ptlst '()
  124.   )
  125.   (while (<= (setq i (1+ i))
  126.       n
  127.   )
  128.     (setq pt (vlax-curve-getpointatparam ename (* i nparam))
  129.    ptlst (cons pt ptlst)
  130.     )
  131.   )
  132.   (reverse ptlst)
  133. )

发表于 2013-12-29 15:00 | 显示全部楼层
处理完这个样子

本帖子中包含更多资源

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

x
发表于 2013-12-29 15:03 | 显示全部楼层
我什么时候要你加过钱...帮你解决问题还扣屎盆子..你让谁还会再帮你...有人缺这几个虚拟币吗??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 21:12 , Processed in 0.351381 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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