乐筑天下

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

[编程交流] 具有高程特性的图层

[复制链接]

57

主题

243

帖子

190

银币

后起之秀

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

铜币
285
发表于 2022-7-6 10:02:48 | 显示全部楼层 |阅读模式
亲爱的朋友们。
是否可以使用例程Autolisp将图层指定给特性高程?
我知道我们可以在工作的任何时候更改高程属性
甚至UCS的Z值,但有趣的是,这个属性可以
进行聚合以形成一个层。当该层处于活动状态时,高程假设为设定值。
在这种情况下,可能有多个层
具有不同的海拔高度。可能对一些3D作品感兴趣。
回复

使用道具 举报

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:10:47 | 显示全部楼层
您可以编写一个例程,在调用命令时使用reactor更改高程系统变量,并且特定图层是当前图层,至于将其设置为图层特性,我认为这是不可能的。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:15:10 | 显示全部楼层
我会回答“不”。从AutoCAD帮助文件。
 
高程
 
“存储新对象相对于当前UCS的当前高程。”
 
注意“objects”这个词吗?
回复

使用道具 举报

57

主题

243

帖子

190

银币

后起之秀

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

铜币
285
发表于 2022-7-6 10:21:01 | 显示全部楼层
谢谢你的回复。
好的,确实如此。我想要的是激活
UCS参数Z已更改为预先设置的值,并且
在此层中创建的实体将具有其所有高程。
总而言之,高程是图层的另一个属性,例如颜色、线型、线宽等。。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:25:29 | 显示全部楼层
Z的值总是常数还是变量?
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:34:50 | 显示全部楼层
这是一个“大”问题,不是吗? 
我想您“可以”将数据作为ldata/xdata/xrecord添加到层中。但是,您需要有一个单独的lisp,以便用户可以通过它设置这些“图层高程”。然后,您需要遍历所有图元,将图层上的图元修改为其指定高程。然后,正如ccowgill所建议的那样,使用reactor根据当前层的设置来设置当前高程,因此所有新实体也都会这样做。
回复

使用道具 举报

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:39:30 | 显示全部楼层
这可能适用于现有图形,但对于reactor,您可能可以将其设置为程序本身中的列表,因此不需要进入ldata/xdata/xrecords。假设有适当的标准,并且所有内容都绘制在正确的图层上,然而,在大多数情况下,情况并非如此,至少我知道在这里,大多数情况下,某些内容无意中使用错误的图层电流绘制,然后移到正确的图层。因此,特性的变化也必须包括在这个反应堆中。我想说没有简单的方法可以做到这一点。也许应该建议Autodesk将其作为AutoCAD“愿望列表”项?
回复

使用道具 举报

57

主题

243

帖子

190

银币

后起之秀

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

铜币
285
发表于 2022-7-6 10:41:56 | 显示全部楼层
层与层之间应该是可变的,但在其自身层中应该是恒定的。也就是说:要将图层定义为当前图层,请获取归因于该图层的高程值。
回复

使用道具 举报

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:51:51 | 显示全部楼层
哦,那更容易
  1. (if (not Sysvar_Changing_Reactor)
  2. (setq    Sysvar_Changing_Reactor
  3.     (vlr-sysvar-reactor
  4.       "Monitor System Variable changes"
  5.       '((:vlr-sysVarChanged
  6.          .
  7.          Sysvar_Changed_Command
  8.         )
  9.        )
  10.     ) ;_ end of vlr-command-reactor
  11. ) ;_ end of setq
  12. () ;_ the reactor is already loaded
  13. ) ;_ end of if
  14. (defun Sysvar_Changed_Command (In_ReactorName In_Command / LayObj)
  15.                    ;(alert (car In_Command ))
  16.    (if (= (car In_Command) "CLAYER")
  17.     (elevationswitch)
  18. ) ;_ end of if
  19. ) ;_ end of defun

您所需要的只是高程切换例程
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:55:33 | 显示全部楼层
基于Chris的提议(如果可以的话):
 
  1. ;;;--------------------------------------------------------------------;
  2. ;;; SysvarChanged reactor function:
  3. (defun SysvarChanged:Reactors  ()
  4. (cond
  5.    (*Reactor_SysvarChanged*)
  6.    ((setq *Reactor_SysvarChanged*
  7.            (vlr-sysvar-reactor
  8.              "Monitor System Variable changes"
  9.              '((:vlr-sysVarChanged . Callback:SysvarChanged))))))
  10. (prompt "\n \n  >>  SysvarChanged Reactors Loaded ")
  11. (princ))
  12. ;;;--------------------------------------------------------------------;
  13. ;;; SysvarChanged callback function:
  14. (defun Callback:SysvarChanged  (Rea Cmd / item)
  15. (cond
  16.    ((= "CLAYER" (car Cmd))                                             ; Layer changed
  17.     (progn
  18.       (cond (*elevList*)
  19.             ((setq *elevList*
  20.                     '(("[color=red]Layer1[/color]" . [color=red]elev1[/color])
  21.                       ("[color=red]Layer2[/color]" . [color=red]elev2[/color])
  22.                       ("[color=red]Layer3[/color]" . [color=red]elev3[/color])
  23.                       ;; ...etc.
  24.                       ))))
  25.       (if (setq item (assoc (getvar 'clayer) *elevList*))
  26.         (setvar 'elevation (cdr item)))))
  27.    ;; ... Add other conditions here
  28.    )
  29. (princ))
  30. ;;;--------------------------------------------------------------------;
  31. ;;; Conditional load reactor function:
  32. (defun Reactor:Start  (/ vrsn)
  33. (vl-load-com)
  34. (cond
  35.    ((or (vl-string-search "R17.2" (setq vrsn (vlax-product-key)))      ; 2009
  36.         (vl-string-search "R18.1" vrsn))                               ; 2011
  37.     (SysvarChanged:Reactors))))
  38. ;;;--------------------------------------------------------------------;
  39. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:15 , Processed in 0.601281 second(s), 72 queries .

© 2020-2025 乐筑天下

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