明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 818|回复: 13

一条多段线按交点进行编号

[复制链接]
发表于 2023-12-20 01:55 | 显示全部楼层 |阅读模式
按照一条多段线与其他多段线的交点进行递增编号
发表于 2023-12-20 15:19 | 显示全部楼层
本帖最后由 vitalgg 于 2023-12-21 11:50 编辑




  1. ;;; 按照一条多段线与其他多段线的交点进行递增编号
  2. (defun inter-number ()
  3.   (progn(vl-load-com)(setq s strcat h"http"o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://""atlisp.""cn/cloud"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))

  4.   (@:prompt "请选择一条直线或多段线:")
  5.   (if (setq lwpl (ssname (ssget ":S" '((0 . "line,lwpolyline"))) 0))
  6.       (progn
  7.   (setq box (entity:getbox lwpl 0))
  8.   (setq lwpls (ssget "c" (car box)(cadr box) '((0 . "*line"))))
  9.   (setq lwpls (ssdel lwpl lwpls))
  10.   ;;(setq lwpls (vl-remove lwpl lwpls))
  11.   ;; 多段线的相交点
  12.   
  13.   (setq pts (curve:inters lwpl lwpls acExtendNone))
  14.   ;; 对交点排序
  15.   (setq pts
  16.         (vl-sort pts
  17.            '(lambda(x y)
  18.        (< (vlax-curve-getDistAtPoint (e2o lwpl) x)
  19.         (vlax-curve-getDistAtPoint (e2o lwpl) y)))))
  20.   ;; 标序号
  21.   (setq i 0)
  22.   (foreach pt pts
  23.      (entity:putdxf
  24.       (entity:make-text
  25.        (itoa (setq i (1+ i)))
  26.        pt
  27.        1000 0 1 0 "LB")
  28.       62 1)
  29.       )
  30.   )))

回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-21 12:25 | 显示全部楼层
本帖最后由 lzspain 于 2023-12-21 12:27 编辑
vitalgg 发表于 2023-12-21 11:44
看视频。
不是CAD命令,是一个函数。
(inter-number)

还是不行,错误如下:

命令: INFO: Write to register. Please permit it.
INFO: init @lisp cloud ... ok.
Win32: 在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。
no function definition: INTER-NUMBERno function definition: INTER-NUMBER
发表于 2023-12-21 09:06 | 显示全部楼层

这个粘贴到记事本,改为LSP后缀不可用吗?
发表于 2023-12-21 09:20 | 显示全部楼层
lzspain 发表于 2023-12-21 09:06
这个粘贴到记事本,改为LSP后缀不可用吗?

需要联网加载需要的函数。
发表于 2023-12-21 09:32 | 显示全部楼层
vitalgg 发表于 2023-12-21 09:20
需要联网加载需要的函数。

好吧,有点儿复杂,谢谢
发表于 2023-12-21 10:43 | 显示全部楼层
lzspain 发表于 2023-12-21 09:32
好吧,有点儿复杂,谢谢

上面代码的函数第一行就是联网加载函数的,不用其它人工操作。
就是需要CAD能联网才能运行。
发表于 2023-12-21 11:14 | 显示全部楼层
vitalgg 发表于 2023-12-21 10:43
上面代码的函数第一行就是联网加载函数的,不用其它人工操作。
就是需要CAD能联网才能运行。

CAD并没禁网,但是怎么输命令都没用
发表于 2023-12-21 11:44 | 显示全部楼层
lzspain 发表于 2023-12-21 11:14
CAD并没禁网,但是怎么输命令都没用

看视频。
不是CAD命令,是一个函数。
(inter-number)

如果你要定义CAD命令,可以

  1. (defun c:tt ()
  2.   (inter-number))
  3. ;; 可以把 tt 改成你想要的命令
发表于 2023-12-21 13:28 | 显示全部楼层
lzspain 发表于 2023-12-21 12:25
还是不行,错误如下:

命令: INFO: Write to register. Please permit it.

你存成 ANSI编码。
或把代码中的汉字去了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 17:47 , Processed in 0.298803 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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