乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 78|回复: 11

[编程交流] 与块插入点的距离

[复制链接]

27

主题

126

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 09:42:30 | 显示全部楼层 |阅读模式
我正在尝试使用LISP来确定选定对象到最近直线的距离,然后将该值放入相应的属性值,称为“偏移”。
 
我有将值放入偏移属性的代码,但在如何确定块到最近直线的距离方面遇到了问题。
 
为了确定基线,我的代码是:
  1. (defun EXAOS_CreateBaselineSet ()
  2.    (setq exaosBaselineSet
  3.         (ssget "_X"
  4.           (list
  5.            (cons 0 "ARC,CIRCLE,ELLIPSE,LINE,LWPOLYLINE,POLYLINE,SPLINE")
  6.            (cons 8 "GPS-ROAD,BASELINE,EOG,EOP,FOGLINE,FOC")
  7.            )))
  8.    )

 
现在,它只是在计算如何获得从块的插入到上面基线集最近点的距离。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:49:01 | 显示全部楼层
可能使用以下功能:
 
(defun ShortestDistanceFromPointtoSet(sset pt/i lst)(vl load com)(if sset(repeat(setq i(sslength sset))(setq lst(cons(distance pt(vlax curve getClosestPointto(ssname sset(setq i(1-i)))pt))lst))(car(vl sort lst'
回复

使用道具 举报

27

主题

126

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 09:56:08 | 显示全部楼层
谢谢李,这很有帮助。
 
但是,我在代码中遇到了一个错误,无法将值插入到我的块中,如果有人可以帮助我了解其中的位置和原因的话。
 
我选择要应用距离的块,然后选择点,得到一个错误“错误:ActiveX服务器返回错误:未知名称:名称”。
 
还有,如果我在不同的距离选择多个块,有没有办法得到它,它会根据插入点在属性中输入每个块的距离值?
纤维标记试验。图纸
EXAOS_Main-0039。LSP
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:02:23 | 显示全部楼层
选择曲线对象后,包含块的SelectionSet不再是“ActiveSelectionSet”。
 
试试这个:
 
(定义c:测试(/blocks di e i o pt s s1 s2)(vl负载com)(setq blocks’(“光纤标记管STA”)i-1)(if(和(setq s1(ssget(list’(0。“INSERT”)(cons 2(应用‘strcat(cons”`*U*“(mapcar’(lambda(s)(strcat,s))块)))))(setq s2(ssget“_X”(list(cons 0“圆弧、圆、椭圆、直线、*多段线、样条”)(cons 8“GPS-ROAD、基线、EOG、EOP、FOGLINE、FOC”)(setq pt(getpoint“\n选择点:)(setq di(ShortestDistanceFromPointtoSet s2(trans pt 1 0)))(而(setq e(ssname s1(setq i(1+i)))))(if(和(vl位置(strcase(vlax get property)(setq o(vlax ename->vla object e))(if(vlax-property-available-p o'EffectiveName'EffectiveName'Name))(blocks)(eq(vla get isDynamicBlock o):vlax true))(LM:SetDynamicPropValue o“Offset”di))(princ))(defun shortestdistance frompointtoset(sset pt/i lst)(vl load com)(if sset(repeat(setq i(sslength sset))(setq lst(cons(距离pt(vlax curve GetClosestPoint to(ssname sset(setq i(1-i)))pt))lst)))(car(vl sort lst'
回复

使用道具 举报

27

主题

126

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 10:05:04 | 显示全部楼层
我已将你的网站添加到书签。顺便说一句,网站很好!
 
使用上述代码后,我通过“错误:错误参数类型:VLA-OBJECT nil”得到了一个错误
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:13:50 | 显示全部楼层
 
谢谢
 
 
哎呀!我更改了vlax for循环,但没有更改变量“x”。更新于^
回复

使用道具 举报

27

主题

126

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 10:20:39 | 显示全部楼层
谢谢,这太棒了!我现在唯一的问题是:
 
如果我在不同的距离选择多个块,有没有办法得到它,它会根据插入点在属性中输入每个块的距离值?
 
理想情况下,我希望能够分组选择距离直线不同的几个块,并填充每个值,而无需选择块点。
 
我试着做(cdr(assoc 10 s1))而不是提示块的get点,但它不喜欢这样。这是我的书中用来获取中心点的一个例子。我试过谷歌搜索,有没有一个地方列出了做“cons”和“assoc”的组码?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:21:00 | 显示全部楼层
 
http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WSfacf1429558a55de185c428100849a0ab7-5df0.htm
 
我稍后会看一下代码
回复

使用道具 举报

27

主题

126

帖子

99

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 10:27:29 | 显示全部楼层
令人惊叹的谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:32:01 | 显示全部楼层
快速修改,未经测试:
 
(定义c:测试(/blocks di e i o pt s s1 s2)(vl负载com)(setq blocks’(“光纤标记管STA”)i-1)(if(和(setq s1(ssget(list’(0。“INSERT”)(cons 2(应用‘strcat(cons”`*U*“(mapcar’(lambda(s)(strcat,s))块)))))(setq s2(ssget“_X”(list(cons 0“圆弧、圆、椭圆、直线、*多段线、样条”)(cons 8“GPS-ROAD、基线、EOG、EOP、FOGLINE、FOC”))(而(setq e(ssname s1(setq i(1+i))))(if(和(vl位置(strcase)(vlax get property(setq o(vlax ename->vla object e))(if(vlax-property-available-p o‘EffectiveName)’EffectiveName)))块)(等式(vla get isDynamicBlock o):vlax true)(setq di(shortestdistancefromppointtoset s2(trans(cdr(assoc 10(entget e)))e 0))(LM:SetDynamicPropValue o“Offset”di))(princ))(defun shortestdistancefromppointtoset(sset pt/i lst)(vl load com)(if sset(repeat(setq i(sslength sset))(setq lst(cons(距离pt(vlax curve getClosestPointto(ssname sset(setq i(1-i)))pt))lst))(car(vl sort lst'
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 23:55 , Processed in 0.772174 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表