乐筑天下

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

[编程交流] 用于将数据转换为ascii的Lisp例程

[复制链接]

14

主题

40

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 11:30:02 | 显示全部楼层 |阅读模式
你好
 
我试图在AutoCAD 2010中提取一些绘制线的数据。
 
需要的数据是它们的长度。有人可以编写lisp例程将其长度提取到ascii文件中吗?或者指出一个已经写好的。
 
list命令提供了太多提取的数据,每个屏幕只能列出一定数量的对象。
 
所需的结果ascii文件为;
 
长度
100.001
120.002
234.980
 
谢谢
 
附言
如果lisp例程可以从对象的数据中提取其他元素,例如它们的颜色,那就太好了。
 
是否可以使用可以保存到ascii文件的对象属性组合框为将来制作例程?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:37:45 | 显示全部楼层
我认为这可以做所有,但长度。。。
http://www.cadtutor.net/forum/showthread.php?t=42954
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:45:00 | 显示全部楼层
啊,我忘了我写了这个:
 
http://www.cadtutor.net/forum/showthread.php?t=42734
回复

使用道具 举报

14

主题

40

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 11:51:51 | 显示全部楼层
谢谢你的信息李。
 
我这里可能需要一个特别的。所示的lisp例程添加了层中线条的所有长度。我需要的是一个lisp,它将在ascii文件中列出行长度。例如
 
长度
23.45
45.67
67.89
 
原因是我需要为几何设计程序提取线的长度。
 
谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:58:11 | 显示全部楼层
试一试;
 
  1. (defun c:GetLens (/ ss i ent e)
  2. (vl-load-com)
  3. (if (and (setq f (getfiled "Output" "" "txt" 9))
  4.           (setq i -1 ss (ssget '((0 . "ARC,CIRCLE,ELLIPSE,*LINE")))))
  5.    (progn
  6.      (setq f (open f "a"))
  7.      (while (setq ent (ssname ss (setq i (1+ i))))
  8.        (if (setq e (vlax-curve-getEndParam ent))
  9.          (write-line (rtos (vlax-curve-getDistatParam ent e)) f)))
  10.      (close f)))
  11. (princ))
  12.                               
回复

使用道具 举报

14

主题

40

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 12:05:58 | 显示全部楼层
嗨,李,
 
这太棒了,完全正确。但是,我需要完成该项目,并将此lisp与另一个lisp相结合(如下所示)。
 
另一个是一个例程,从一条主线到第二条线绘制垂直线,其间留有空格。
 
看看你是否可以用你创建的lisp来改进我的lisp
 
非常感谢。
 
(定义c:测试(/
*错误*
项目名称1
项目名称2
末端分布
内部列表
指向
开始列表

坦彭特
VlaObj1
VlaObj2
)
(defun*错误*(msg)
(如果是TempEnt
(entdel TempEnt)
)
(普林斯)
)
(if(和(setq EntName1(car(entsel“\n选择主线:”))
(setq EntName2(car(entsel“\n选择辅助行:”))
(setq步骤(getdist“\n输入步骤:”)
(>步骤0.0)
)
(progn(setq VlaObj1(vlax ename->vla object EntName1)
VlaObj2(vlax ename->vla object EntName2)
StartDist 0.0
EndDist(vlax curve getDistAtParam VlaObj1(vlax curve getEndParam VlaObj1))
)
(虽然(
(设定点(vlax曲线getPointAtDist VlaObj1 StartDist))
(如果(不是)(vl-catch-all-error-p
(setq列表
(vl全包适用
'vlax safearray->列表
(列表(vlax变量值
(vla与相交
(vlax ename->vla对象
(setq TempEnt)
(entmakex)
(列表
(cons 0“线”)
(缺点10分)
(缺点
11
(极性
指向
(((角度)
(vlax曲线getFirstDeriv
VlaObj1
(vlax曲线getParamAtDist
VlaObj1
开始列表
)
)
(列表0.0 0.0)
)
(/pi 2)
)
1
)
)
)
)
)
)
VlaObj2
A扩展此实体
)
)
)
)
)
)
)
(恩特梅克)
(列表(cons 0“行”)
(缺点10分)
(列表11(car IntersList)(cadr IntersList)(caddr IntersList))
)
)
)
(entdel TempEnt)
(setq StartDist(+StartDist Step))
)
)
)
(普林斯)
)
 
(普林斯)
 
[/code]
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:12:11 | 显示全部楼层
  1. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test  [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] *error* DOC E1 E2 EDIS FILE ILST L LLST OBJ2 OFILE PA PT SDIS SPC TMP[b][color=RED])[/color][/b]
  2. [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b]
  3. [i][color=#990099];; Lee Mac  ~  24.03.10[/color][/i]
  4. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] *error*  [b][color=RED]([/color][/b]msg[b][color=RED])[/color][/b]
  5.    [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] tmp   [b][color=RED]([/color][/b][b][color=BLUE]entdel[/color][/b] tmp[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  6.    [b][color=RED]([/color][/b][b][color=BLUE]and[/color][/b] ofile [b][color=RED]([/color][/b][b][color=BLUE]close[/color][/b] ofile[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  7.    [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]wcmatch[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcase[/color][/b] msg[b][color=RED])[/color][/b] [b][color=#a52a2a]"*BREAK,*CANCEL*,*EXIT*"[/color][/b][b][color=RED])[/color][/b]
  8.        [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\n** Error: "[/color][/b] msg [b][color=#a52a2a]" **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  9.    [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  10. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] isCurveObj [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b]
  11.    [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-error-p[/color][/b]
  12.           [b][color=RED]([/color][/b][b][color=BLUE]vl-catch-all-apply[/color][/b]
  13.             [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b] [b][color=Blue]vlax-curve-getEndParam[/color][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  14. [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] line [b][color=RED]([/color][/b]p1 p2[b][color=RED])[/color][/b]
  15.    [b][color=RED]([/color][/b][b][color=BLUE]entmakex[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]0[/color][/b] [b][color=#a52a2a]"LINE"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]10[/color][/b] p1[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]11[/color][/b] p2[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]     
  16. [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] spc  [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=Blue]AcModelSpace [/color][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveSpace[/color][/b]
  17.                                        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] doc [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ActiveDocument[/color][/b]
  18.                                                    [b][color=RED]([/color][/b][b][color=BLUE]vlax-get-acad-object[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  19.                     
  20.                     [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=Blue]:vlax-true[/color][/b]   [b][color=RED]([/color][/b][b][color=BLUE]vla-get-MSpace[/color][/b] doc[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  21.               
  22.               [b][color=RED]([/color][/b][b][color=BLUE]vla-get-ModelSpace[/color][/b] doc[b][color=RED])[/color][/b]
  23.               [b][color=RED]([/color][/b][b][color=BLUE]vla-get-PaperSpace[/color][/b] doc[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  24. [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] *step* [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *step* [b][color=#009999]10.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]  
  25. [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b] [b][color=Blue]and[/color][color=RED])[/color][/b]
  26.             [b][color=RED]([/color][/b][b][color=BLUE]append[/color][/b]
  27.               [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b]
  28.                 [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x s[b][color=RED])[/color][/b]
  29.                             [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b]
  30.                               [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
  31.                                 [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] x [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entsel[/color][/b] s[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  32.                                 
  33.                                 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b]  [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]ENAME [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  34.                                        
  35.                                        [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] [b][color=RED]([/color][/b]isCurveObj [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  36.                                          [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#a52a2a]"\n** Invalid Object Selected **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  37.                
  38.                 [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b]e1 e2[b][color=RED])[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#a52a2a]"\nSelect PRIMARY line: "[/color][/b] [b][color=#a52a2a]"\nSelect SECONDARY line: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  39.               [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] file [b][color=RED]([/color][/b][b][color=BLUE]getfiled[/color][/b] [b][color=#a52a2a]"Output File"[/color][/b] [b][color=#a52a2a]""[/color][/b] [b][color=#a52a2a]"txt"[/color][/b] [b][color=#009900]9[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  40.    [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
  41.      [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]6[/color][/b][b][color=RED])[/color][/b]
  42.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *step* [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\nSpecify Step <"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] *step*[b][color=RED])[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]*step*[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  43.            sDis   [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getDistatParam[/color][/b] e1
  44.                        [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getStartParam[/color][/b] e1[b][color=RED])[/color][/b][b][color=RED])[/color][/b] *step*[b][color=RED])[/color][/b]
  45.            eDis   [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getDistatParam[/color][/b] e1
  46.                     [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getEndParam[/color][/b] e1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  47.      [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b] set[b][color=RED])[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b]obj1 obj2[b][color=RED])[/color][/b]
  48.              [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b] [b][color=Blue]vlax-ename->vla-object[/color][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] e1 e2[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  49.      
  50.      [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]<=[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] sDis [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] sDis *step*[b][color=RED])[/color][/b][b][color=RED])[/color][/b] eDis[b][color=RED])[/color][/b]
  51.        [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] pa [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getParamatDist[/color][/b] e1 sDis[b][color=RED])[/color][/b]
  52.              pt [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getPointatDist[/color][/b] e1 sDis[b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  53.             
  54.        [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b]
  55.              [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] iLst [b][color=RED]([/color][/b][b][color=BLUE]vlax-invoke[/color][/b]
  56.                           [b][color=RED]([/color][/b][b][color=BLUE]vlax-ename->vla-object[/color][/b]
  57.                             [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] tmp
  58.                               [b][color=RED]([/color][/b]Line pt [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] pt [b][color=RED]([/color][/b][b][color=BLUE]+[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]angle[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] [b][color=#009900]0[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b]
  59.                                                     [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getFirstDeriv[/color][/b] e1 pa[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] [b][color=BLUE]pi[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009999]1.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  60.                         
  61.                           [b][color=DARKRED]'[/color][/b]IntersectWith Obj2 [b][color=Blue]acExtendThisEntity[/color][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entdel[/color][/b] tmp[b][color=RED])[/color][/b]
  62.              iLst[b][color=RED])[/color][/b]
  63.          [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] lLst [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getDistatParam[/color][/b]
  64.                             [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] l [b][color=RED]([/color][/b]Line pt [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] iLst[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] iLst[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]caddr[/color][/b] iLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  65.                             [b][color=RED]([/color][/b][b][color=BLUE]vlax-curve-getEndParam[/color][/b] l[b][color=RED])[/color][/b][b][color=RED])[/color][/b] lLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  66.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ofile [b][color=RED]([/color][/b][b][color=BLUE]open[/color][/b] file [b][color=#a52a2a]"a"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  67.      [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]write-line[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] x[b][color=RED])[/color][/b] ofile[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] lLst[b][color=RED])[/color][/b]
  68.      [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ofile [b][color=RED]([/color][/b][b][color=BLUE]close[/color][/b] ofile[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]
  69. [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b]         
回复

使用道具 举报

14

主题

40

帖子

26

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 12:22:40 | 显示全部楼层
嗨,李,
 
这太棒了。我对这个版本很满意,但是当我把它展示给其他人时,他们质疑增量的数据输出。
 
理想情况下,我会为自己保留这个版本,因为我可以在心里计算出增值。对于它们,我们可以用增量将数据导出到ascii。例如
 
增量和长度
 
0;  10.78
10; 21.56
20; 32.78
30; 89.97
e、 t.c
 
 
谢谢
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 12:27:58 | 显示全部楼层
 
尝试稍微编辑的代码
 
  1. (defun c:test  (/
  2. *error*
  3. EntName1
  4. EntName2
  5. EndDist
  6. IntersList
  7. Point
  8. StartDist
  9. Step
  10. TempEnt
  11. VlaObj1
  12. VlaObj2
  13. dist
  14. filedesc
  15. filename
  16. out_list
  17. strline
  18. )
  19. (defun *error*  (msg)
  20.    (if TempEnt
  21.      (entdel TempEnt)
  22.      )
  23.    (princ)
  24.    )
  25. (if (and (setq EntName1 (car (entsel "\nSelect primary line: ")))
  26.    (setq EntName2 (car (entsel "\nSelect secondary line: ")))
  27.    (setq Step (getdist "\nEnter step: "))
  28.    (> Step 0.0)
  29.    )
  30.    (progn (setq VlaObj1   (vlax-ename->vla-object EntName1)
  31.   VlaObj2   (vlax-ename->vla-object EntName2)
  32.   StartDist 0.0
  33.   EndDist   (vlax-curve-getDistAtParam
  34.        VlaObj1
  35.        (vlax-curve-getEndParam VlaObj1))
  36.   )
  37.    (while (< StartDist EndDist)
  38.      (setq Point (vlax-curve-getPointAtDist VlaObj1 StartDist))
  39.      (if (not (vl-catch-all-error-p
  40.   (setq IntersList
  41.          (vl-catch-all-apply
  42.     'vlax-safearray->list
  43.     (list (vlax-variant-value
  44.      (vla-IntersectWith
  45.        (vlax-ename->vla-object
  46.          (setq TempEnt
  47.          (entmakex
  48.            (list
  49.       (cons 0 "LINE")
  50.       (cons 10 Point)
  51.       (cons
  52.         11
  53.         (polar
  54.           Point
  55.           (- (angle
  56.         (vlax-curve-getFirstDeriv
  57.           VlaObj1
  58.           (vlax-curve-getParamAtDist
  59.             VlaObj1
  60.             StartDist
  61.             )
  62.           )
  63.         (list 0.0 0.0)
  64.         )
  65.              (/ pi 2)
  66.              )
  67.           1.0
  68.           )
  69.         )
  70.       )
  71.            )
  72.         )
  73.          )
  74.        VlaObj2
  75.        acExtendThisEntity
  76.        )
  77.      )
  78.           )
  79.     )
  80.         )
  81.   )
  82.        )
  83.        (progn
  84.   (entmake
  85.     (list (cons 0 "LINE")
  86.    (cons 10 Point)
  87.    (list 11
  88.          (car IntersList)
  89.          (cadr IntersList)
  90.          (caddr IntersList))
  91.    )
  92.     )
  93.   (setq dist (distance Point
  94.          (list (car IntersList)
  95.         (cadr IntersList)
  96.         (caddr IntersList)))
  97.         )
  98.   (setq strline (strcat (rtos StartDist 2 0) ";" (rtos dist 2 2)))
  99.   (setq out_list (cons strline out_list))
  100.   )
  101.        )
  102.      (entdel TempEnt)
  103.      (setq StartDist (+ StartDist Step))
  104.      )
  105.      (if out_list
  106.    (if (setq filename (getfiled "Road sections file" "C:\" "txt" 9))
  107.      (progn
  108. (setq filedesc (open filename "a"))
  109.      (foreach line  (reverse out_list)
  110. (write-line line filedesc)
  111. )
  112.      )
  113.    (close filedesc)
  114.    )
  115.    )
  116.    )
  117.    )
  118. (princ)
  119. )
  120. (prompt "\nType TEST to execute")
  121. (prin1)

 
~'J'~
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:30:51 | 显示全部楼层
也许是这样:
 
  1. (defun c:test  (/ *error* DOC E1 E2 EDIS FILE ILST L LLST OBJ2 OFILE PA PT SDIS SPC TMP)
  2. (vl-load-com)
  3. ;; Lee Mac  ~  24.03.10
  4. (defun *error*  (msg)
  5.    (and tmp   (entdel tmp))
  6.    (and ofile (close ofile))
  7.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  8.        (princ (strcat "\n** Error: " msg " **")))
  9.    (princ))
  10. (defun isCurveObj (x)
  11.    (not (vl-catch-all-error-p
  12.           (vl-catch-all-apply
  13.             (function vlax-curve-getEndParam) (list x)))))
  14. (defun line (p1 p2)
  15.    (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))))     
  16. (setq spc  (if (or (eq AcModelSpace (vla-get-ActiveSpace
  17.                                        (setq doc (vla-get-ActiveDocument
  18.                                                    (vlax-get-acad-object)))))
  19.                     
  20.                     (eq :vlax-true   (vla-get-MSpace doc)))
  21.               
  22.               (vla-get-ModelSpace doc)
  23.               (vla-get-PaperSpace doc)))
  24. (or *step* (setq *step* 10.))  
  25. (if (apply (function and)
  26.             (append
  27.               (mapcar
  28.                 (function (lambda (x s)
  29.                             (while
  30.                               (progn
  31.                                 (set x (car (entsel s)))
  32.                                 
  33.                                 (cond (  (eq 'ENAME (type (eval x)))
  34.                                        
  35.                                        (if (not (isCurveObj (eval x)))
  36.                                          (princ "\n** Invalid Object Selected **")))))) x))
  37.                
  38.                 '(e1 e2) '("\nSelect PRIMARY line: " "\nSelect SECONDARY line: "))
  39.               (list (setq file (getfiled "Output File" "" "txt" 9)))))
  40.    (progn
  41.      (initget 6)
  42.      (setq *step* (cond ((getdist (strcat "\nSpecify Step <" (rtos *step*) "> : "))) (*step*))
  43.            sDis   (- (vlax-curve-getDistatParam e1
  44.                        (vlax-curve-getStartParam e1)) *step*)
  45.            eDis   (vlax-curve-getDistatParam e1
  46.                     (vlax-curve-getEndParam e1)))
  47.      (mapcar (function set) '(obj1 obj2)
  48.              (mapcar (function vlax-ename->vla-object) (list e1 e2)))
  49.      
  50.      (while (<= (setq sDis (+ sDis *step*)) eDis)
  51.        (setq pa (vlax-curve-getParamatDist e1 sDis)
  52.              pt (vlax-curve-getPointatDist e1 sDis))
  53.             
  54.        (if (progn
  55.              (setq iLst (vlax-invoke
  56.                           (vlax-ename->vla-object
  57.                             (setq tmp
  58.                               (Line pt (polar pt (+ (angle '(0 0 0)
  59.                                                     (vlax-curve-getFirstDeriv e1 pa)) (/ pi 2.)) 1.))))
  60.                         
  61.                           'IntersectWith Obj2 acExtendThisEntity)) (entdel tmp)
  62.              iLst)
  63.          (setq lLst (cons (cons sDis (vlax-curve-getDistatParam
  64.                                        (setq l (Line pt (list (car iLst) (cadr iLst) (caddr iLst))))
  65.                                        (vlax-curve-getEndParam l))) lLst))))
  66.      (setq ofile (open file "a"))
  67.      (mapcar
  68.        (function
  69.          (lambda (x)
  70.            (write-line (strcat (rtos (car x)) ";" (rtos (cdr x))) ofile))) (reverse lLst))
  71.      (setq ofile (close ofile))))
  72. (princ))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 02:17 , Processed in 0.469962 second(s), 72 queries .

© 2020-2025 乐筑天下

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