乐筑天下

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

[编程交流] 自动绘制多段线

[复制链接]

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 00:21:56 | 显示全部楼层
 
  1. (defun c:AutoPL ( / *ModSpc *ActDoc *acad ss sslen junk done pnt ep )
  2. (setq *ModSpc (vlax-get-property (setq *ActDoc (vlax-get-property (setq *acad (vlax-get-acad-object)) 'ActiveDocument)) 'ModelSpace))
  3. (princ "\nSelect Point Objects:")
  4. [color=red](if[/color]
  5. [color=red]   (and[/color]
  6. [color=red]     (setq ss (ssget '(( 0 . "POINT"))))[/color]
  7. [color=red]     (setq junk (getpoint "\nClick to Start")))[/color]
  8. [color=red]   (progn[/color]
  9.      (setq sslen (sslength ss))
  10.      (setq drawn nil)
  11.      (setq done nil)
  12.      (while
  13. (and (= 5 (car (setq pnt (grread T 1 0)))) (= done nil))
  14. (setq ep (is_nearest ss (nth 1 pnt)))
  15. (cond
  16.   ((= drawn nil)(progn
  17.     (setq drawn (list (car ep)))
  18.     (drx (vlax-safearray->list (vlax-variant-value (vlax-get-Property (vlax-ename->vla-object (car ep)) 'Coordinates))))))
  19.   ((= (length drawn) 1)(if (not (is_drawn (car ep)))
  20.     (progn
  21.       (setq drawn (cons (car ep) drawn))
  22.       (drx (vlax-safearray->list (vlax-variant-value (vlax-get-Property (vlax-ename->vla-object (car ep)) 'Coordinates)))))))
  23.   ((>= (length drawn) 2)(if (not (is_drawn (car ep)))
  24.      (progn
  25.        (setq drawn (cons (car ep) drawn))
  26.        (drx (vlax-safearray->list (vlax-variant-value (vlax-get-Property (vlax-ename->vla-object (car ep)) 'Coordinates)))))))
  27.   )
  28. (if (= sslen (length drawn))
  29.   (setq done T)))
  30.      (setq pl-obj (vlax-invoke-method *ModSpc 'Addpolyline (pl->var (drawn->pntlist)))))
  31.    (exit))
  32. (princ)
  33. )

 
丹的腿,好建议!
 
@比加尔-我想我不知道你的意思。是否考虑为多段线添加宽度选项-添加闭合选项?你能澄清一下吗?
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
310
发表于 2022-7-6 00:26:44 | 显示全部楼层
如果您使用
(vlax get(vlax ename->vla object ep)'坐标)
 
它将返回坐标。。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 00:28:01 | 显示全部楼层
 
我已经想过了。我不必使用(vlax safe array->list(vlax variant value…但是,如果我希望它也使用Civil 3D点,该怎么办?)(vlax get(vlax ename->vla object ent)“location”也可以吗?如果是这样的话,我可以用一个变量代替“坐标”,使其在坐标和位置之间发生变化。我在测试这个时遇到了一些问题,因为有时我会得到一个值,而其他时候我会得到错误:Civil 3D API:句柄无效。
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
310
发表于 2022-7-6 00:31:40 | 显示全部楼层
我不知道我知道你的意思,但是。。。
你可以这样做
  1. (vlax-get ep
  2. (if (vlax-property-available-p ep "location")
  3.    "location" "coordinates"
  4. )
  5. )
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 00:37:15 | 显示全部楼层
 
这样想:
 
  1. (setq property 'Location)
  2. (vlax-get-property property)

 

 
  1. (setq property 'Coordinates)
  2. (vlax-get-property property)

 
我想在这一点上,我不是我应该如何实现各种对象,如点,Civil 3D点或Land Desktop点。
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
310
发表于 2022-7-6 00:40:11 | 显示全部楼层
你试过我的建议了吗?
 
 
你可以使用dxf代码10。。。似乎是一个简单的解决方案
 
(cdr(assoc 10(entget ep)))
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 00:43:14 | 显示全部楼层
 
到目前为止,我还没有试过你的建议。虽然使用(assoc 10…将不适用于Civil 3D点。据我所知,访问Civil 3D点的唯一方法是通过VLA对象。
回复

使用道具 举报

14

主题

41

帖子

27

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 00:44:44 | 显示全部楼层
命令:AUTOPL
; 错误:没有函数定义:VLAX-GET-ACAD-OBJECT
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 00:46:57 | 显示全部楼层
 
只需在例程的顶部添加(vl load com),然后重试
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 22:13 , Processed in 0.610438 second(s), 68 queries .

© 2020-2025 乐筑天下

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