明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2841|回复: 4

想获取矩形的边长,选择集运行后出错,求帮忙调试

[复制链接]
发表于 2012-10-5 21:52:47 | 显示全部楼层 |阅读模式
想获取矩形的边长,选择集运行后出错,“错误: 参数类型错误: lentityp <Selection set: 5b4e>,求高手帮忙调试下


(defun c:tt()
     (setvar "cmdecho" 0)
     (vl-load-com)
     (setq  layn "WALL_边缘构件轮廓_S")
     (setq en (ssget ":s" (list(cons 8 layn))))
     (princ "\n选择要计算的矩形构件")
     (setq endata(entget en))
     (setq ent2(cdr (assoc 330 endata)))
     (vla-getboundingbox(vlax-ename->vla-object ent2) 'minp 'maxp)
     (setq tt1(vlax-safearray->list minp)
     tt2(vlax-safearray->list maxp))
     (setq pdx (abs(-(car tt1)(car tt2))))
     (setq pdy (abs(-(cadr tt1)(cadr tt2))))
     (setq pdx1 (/ pdx 5))
     (setq pdy1 (/ pdy 5))  
     (if (> pdx pdy) (setq b pdy1  h pdx1))
     (if (< pdx pdy) (setq b pdx1  h pdy1))
     (setq b0 (rtos b 2 0))
     (setq h0 (rtos h 2 0 ))
     (prin1)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-10-5 23:15:13 | 显示全部楼层
(setq en (ssget ":s" (list(cons 8 layn))))
改成
(setq ss (ssget ":s" (list(cons 8 layn))))
那么这句即成了
(setq endata(entget ss))    ; <==参数类型错误
发表于 2012-10-8 08:27:35 | 显示全部楼层
     (setq endata(entget en))
     (setq ent2(cdr (assoc 330 endata)))
改成:
    (setq ent2 (ssname en 0))

     (setq pdx1 (/ pdx 5))
     (setq pdy1 (/ pdy 5))
改成:
     (setq pdx1 (/ pdx 5.0)) ;强制实数运算
     (setq pdy1 (/ pdy 5.0))  ;强制实数运算
发表于 2012-10-8 08:30:01 | 显示全部楼层
另外, 上述代码仅对水平放置的矩形有效, 一旦矩形旋转就不可了

因此用获取边界点的方法不可取, 应该用 (assoc 10 entlist) 获取多段线的顶点
再来运算

Btw: 我也是初学者,
 楼主| 发表于 2012-10-9 20:06:45 | 显示全部楼层
是的,我这个是为了算剪力墙边缘构件的,一般都是水平放置, (assoc 10 entlist) ,矩形的群码10取不到矩形的各个坐标点哈,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-28 00:22 , Processed in 0.190983 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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