乐筑天下

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

[编程交流] 打破了很多界线

[复制链接]

15

主题

67

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 08:05:40 | 显示全部楼层 |阅读模式
嗨,我的新项目是由一个civ3d的家伙给我的。他想把一堆线或柱脚,有时是等高线,打断一段固定的距离。我花了几天时间思考该如何处理。以下是我的解决方案;然而,我有一个小问题。
 
我似乎无法使用我的选择集实体让break命令做出响应。有人知道我怎么解决这个问题吗?
 
  1. ;;;March 31, 2012
  2. ;;;This program will allow the user to select multiple lines and plines
  3. ;;;then it will temporarily move each line and pline to a temporary layer then layer isolate to THAT layer
  4. ;;;place points along each line and pline at a given distance by the user
  5. ;;;break each line at each point, return all lines and plines to their original layer
  6. ;;;and then unisolate and return to the current layer
  7. (defun layerchg        ()
  8. (command "-layer" "m" lyname "")
  9. (setq n (sslength SS1))
  10. (repeat n
  11.    (setq ENT (ssname SS1 (- N 1)))
  12.    (setq ENTLIST (entget ENT))
  13.    (setq ENTLIST (subst (cons 8 LYNAME) (assoc 8 ENTLIST) ENTLIST))
  14.    (entmod ENTLIST)
  15.    (setq n (- n 1))
  16. )
  17. )
  18. (defun breakpt ()
  19. (command "layiso" SS1 "")
  20. (setvar "Clayer" Lyname)
  21. (repeat (setq n (sslength ss1))
  22.    (setq ENT (ssname SS1 (- N 1)))
  23.    (command "measure" ENT MSMT "")
  24.    (setq SSpt (ssget "X" '((0 . "Point"))))
  25.    (repeat (setq nx (sslength SSpt))
  26.      (setq SSPTS (ssname SSpt (- N 1)))
  27.      (setq ptent (entget SSPTS))
  28.      (setq ptloc (cdr(assoc 10 ptent)))
  29.      [color="red"](command "break" ent "f" ptloc ptloc)[/color]
  30.      (setq n (- n 1))
  31.    )                                        ;End breaking repeat
  32.    (command "erase" SSPT)
  33. )                                        ;End repeat
  34. )
  35. (defun c:Linchg        ()
  36. (setq CurLay (getvar "clayer"))
  37. (setq Osnmde (getvar "osmode"))
  38. (setq Cmd-Echo (getvar "cmdecho"))
  39. (prompt
  40.    "\nSelect all lines and/or plines you wish to change: "
  41. )
  42. (setq SS1 (ssget '((0 . "LINE,LWPOLYLINE"))))
  43. (setq
  44.    Msmt (getreal "Please enter the distance between break points.")
  45. )
  46. (setq LYNAME "Temporary")
  47. (layerchg)
  48. (breakpt)
  49. )

 
请注意,这还没有结束或清理。这仍然是一项正在进行的工作,但在我想出如何让这个break命令听我的之前,我真的无法取得进展。
 
银色斗篷
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:13:10 | 显示全部楼层
  1. (defun breakpt ()
  2. (command "layiso" SS1 "")
  3. (setvar "Clayer" Lyname)
  4. (repeat (setq n (sslength ss1))
  5.    (setq ENT (ssname SS1 (- N 1)))
  6.    (command "measure" ENT MSMT[color=blue]);;;<-remove ""[/color]
  7.    (setq SSpt (ssget "X" '((0 . "Point"))))
  8.    (repeat (setq nx (sslength SSpt))
  9.      (setq SSPTS (ssname SSpt (- [color=blue]nx[/color] 1)))
  10.      (setq ptent (entget SSPTS))
  11.      (setq ptloc (cdr(assoc 10 ptent)))
  12.      (command "break" ent [color=blue]"_non"[/color] ptloc [color=blue]"_non"[/color] ptloc)[color=#0000ff];;;<-remove "f"[/color]
  13.      [color=blue](entdel SSPTS);;<-- delete point entity as you go    [/color]
  14. [color=blue]    (setq ent (entlast))   [/color]
  15.      [color=blue](setq nx (- nx 1))[/color]
  16.    )     ;End breaking repeat
  17. [color=blue]  ;;;(command "erase" SSPT "");; commented[/color]
  18.    [color=blue](setq n (- n 1))[/color]   
  19. )     ;End repeat
  20. )

 
您可以在循环中或生成列表后调用中断。
 
试试,告诉我你的想法
 
编辑:修改代码。。无论如何,使用这种方法,您不需要创建临时层
知道了?
回复

使用道具 举报

15

主题

67

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 08:18:15 | 显示全部楼层
 
我在那里完全迷路了。。。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:22:02 | 显示全部楼层
 
谢谢pBe!!我来看看能做些什么谢谢你教我钓鱼
回复

使用道具 举报

15

主题

67

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 08:26:37 | 显示全部楼层
 
也许我们会在您“钓鱼”后重新讨论子功能讨论。。。在那之前,我最重要的建议是让你正确地定位你的变量。
 
熟悉DEFUN函数,以便更好地理解LISP函数的结构,特别是符号、参数和变量之间的差异以及表达式本身。
 
 
简而言之,通过不本地化变量,当代码完成时,您定义的变量将保留其赋值
 
要验证这一点,只需在命令行中键入惊叹号“!”然后是您要检查的变量名称,如果变量有任何值,它将显示在命令行中:
 
例子:
 
  1. (defun _break (e1 e2 coord)
  2. ;; <-- Do something
  3. )
非局部变量可能导致对同一函数的后续调用中出现意外行为,甚至是使用相同变量的其他函数。将变量本地化被认为是一种最佳做法。
 
通过在主命令代码中“嵌套”子函数,可以正确地本地化变量,并将这些变量提供给子函数,而无需将它们(定义的变量)暴露给其他函数。
 
这与方法类似(不完全相同)。NET使用名称空间,其中(一般来说)只有在给定名称空间中定义的类和方法可以交互。
 
希望这些对你有意义。。。我相信,一旦你开始为自己“钓鱼”,这将对你有用。
 
HTH公司
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 08:31:18 | 显示全部楼层
这条线索可能很有趣:http://www.theswamp.org/index.php?topic=39550.msg448171#msg448171
 
*必须是会员*
回复

使用道具 举报

15

主题

67

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 08:34:50 | 显示全部楼层
艾伦,这很好,干得好!
回复

使用道具 举报

15

主题

67

帖子

55

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 08:39:46 | 显示全部楼层
谢谢-把啤酒换成咖啡。
我已经发布了几个曲线打破例程在整个线程。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 08:45:09 | 显示全部楼层
 
不。。。那只是泡沫卡布奇诺。英雄联盟
 
 
我得去看看。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 08:50:54 | 显示全部楼层
很好。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 22:08 , Processed in 0.364722 second(s), 72 queries .

© 2020-2025 乐筑天下

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