乐筑天下

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

[编程交流] LISP用于指定图层颜色

[复制链接]

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 18:11:38 | 显示全部楼层
我认为Mechanical 2000是一个很遗憾的原因,但我不能用这个Autodesk产品测试它。我知道Autodesk Mechanical的对象模型与平面AutoCAD或ADT有很大区别。但我试着帮助你。请键入命令行(vl load com),然后复制到命令行:
 
  1. (vlax-dump-object(vla-get-ActiveDocument(vlax-get-acad-object))t)

 
按F2键,获得Mechanical 2000文档的属性和方法的长列表,如下图所示(来自plane 2008)。
 
  1. Command: (vl-load-com)
  2. Command: (vlax-dump-object(vla-get-ActiveDocument(vlax-get-acad-object))t)
  3. ; IAcadDocument: An AutoCAD drawing
  4. ; Property values:
  5. ;   Active (RO) = -1
  6. ;   ActiveDimStyle = #<VLA-OBJECT IAcadDimStyle 0785c98c>
  7. ;   ActiveLayer = #<VLA-OBJECT IAcadLayer 0785c9dc>
  8. ;   ActiveLayout = #<VLA-OBJECT IAcadLayout 0785c89c>
  9. ;   ActiveLinetype = #<VLA-OBJECT IAcadLineType 0785c93c>
  10. ;   ActiveMaterial = #<VLA-OBJECT IAcadMaterial 0785c84c>
  11. ;   ActivePViewport = AutoCAD: No active viewport in paperspace
  12. ;   ActiveSelectionSet (RO) = #<VLA-OBJECT IAcadSelectionSet 0784fb1c>
  13. ;   ActiveSpace = 1
  14. ;   ActiveTextStyle = #<VLA-OBJECT IAcadTextStyle 0785ca2c>
  15. ;   ActiveUCS = AutoCAD: Null object ID
  16. ;   ActiveViewport = #<VLA-OBJECT IAcadViewport 0785ca7c>
  17. ;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d73d3c>
  18. ;   Blocks (RO) = #<VLA-OBJECT IAcadBlocks 0785cacc>
  19. ;   Database (RO) = #<VLA-OBJECT IAcadDatabase 0784fbdc>
  20. ;   Dictionaries (RO) = #<VLA-OBJECT IAcadDictionaries 0785cb1c>
  21. ;   DimStyles (RO) = #<VLA-OBJECT IAcadDimStyles 0785cb6c>
  22. ;   ElevationModelSpace = 0.0
  23. ;   ElevationPaperSpace = 0.0
  24. ;   FileDependencies (RO) = #<VLA-OBJECT IAcadFileDependencies 02105024>
  25. ;   FullName (RO) = ""
  26. ;   Groups (RO) = #<VLA-OBJECT IAcadGroups 0785cbbc>
  27. ;   Height = 776
  28. ;   HWND (RO) = 66802
  29. ;   Layers (RO) = #<VLA-OBJECT IAcadLayers 0785cc0c>
  30. ;   Layouts (RO) = #<VLA-OBJECT IAcadLayouts 0785cc5c>
  31. ;   Limits = (0.0 0.0 420.0 297.0)
  32. ;   Linetypes (RO) = #<VLA-OBJECT IAcadLineTypes 0785ccac>
  33. ;   Materials (RO) = #<VLA-OBJECT IAcadMaterials 0785ccfc>
  34. ;   ModelSpace (RO) = #<VLA-OBJECT IAcadModelSpace2 0785cd4c>
  35. ;   MSpace = AutoCAD: Invalid mode
  36. ;   Name (RO) = "Drawing1.dwg"
  37. ;   ObjectSnapMode = 0
  38. ;   PaperSpace (RO) = #<VLA-OBJECT IAcadPaperSpace2 0785cd9c>
  39. ;   Path (RO) = "C:\\Documents and Settings\\Alexander\\My Documents"
  40. ;   PickfirstSelectionSet (RO) = #<VLA-OBJECT IAcadSelectionSet 0784fe1c>
  41. ;   Plot (RO) = #<VLA-OBJECT IAcadPlot 02104ec4>
  42. ;   PlotConfigurations (RO) = #<VLA-OBJECT IAcadPlotConfigurations 0785cdec>
  43. ;   Preferences (RO) = #<VLA-OBJECT IAcadDatabasePreferences 02105204>
  44. ;   ReadOnly (RO) = 0
  45. ;   RegisteredApplications (RO) = #<VLA-OBJECT IAcadRegisteredApplications
  46. 0785ce3c>
  47. ;   Saved (RO) = -1
  48. ;   SectionManager (RO) = Exception occurred
  49. ;   SelectionSets (RO) = #<VLA-OBJECT IAcadSelectionSets 0214c4e4>
  50. ;   SummaryInfo (RO) = #<VLA-OBJECT IAcadSummaryInfo 02105394>
  51. ;   TextStyles (RO) = #<VLA-OBJECT IAcadTextStyles 0785ce8c>
  52. ;   UserCoordinateSystems (RO) = #<VLA-OBJECT IAcadUCSs 0785cedc>
  53. ;   Utility (RO) = #<VLA-OBJECT IAcadUtility 0783fe6c>
  54. ;   Viewports (RO) = #<VLA-OBJECT IAcadViewports 0785cf2c>
  55. ;   Views (RO) = #<VLA-OBJECT IAcadViews 0785cf7c>
  56. ;   Width = 1558
  57. ;   WindowState = 3
  58. ;   WindowTitle (RO) = "Drawing1.dwg"
  59. ; Methods supported:
  60. ;   Activate ()
  61. ;   AuditInfo (1)
  62. ;   Close (2)
  63. ;   CopyObjects (3)
  64. ;   EndUndoMark ()
  65. ;   Export (3)
  66. ;   GetVariable (1)
  67. ;   HandleToObject (1)
  68. ;   Import (3)
  69. ;   LoadShapeFile (1)
  70. ;   New (1)
  71. ;   ObjectIdToObject (1)
  72. ;   Open (2)
  73. ;   PurgeAll ()
  74. ;   Regen (1)
  75. ;   Save ()
  76. ;   SaveAs (3)
  77. ;   SendCommand (1)
  78. ;   SetVariable (2)
  79. ;   StartUndoMark ()
  80. ;   Wblock (2)
  81. T

 
请公布这份清单,我需要看看。
回复

使用道具 举报

18

主题

65

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
107
发表于 2022-7-6 18:17:58 | 显示全部楼层
对于测试,我使用autcad2000
 
命令:(vl load com)
命令:(vlax dump object(vla get ActiveDocument(vlax get acad object))t)
; IAcadDocument:AutoCAD图形
; 属性值:
;   有效(RO)=-1
;   ActiveDimStyle=#
;   活动层=#
;   活动布局=#
;   活动线型=#
;   ActivePViewport=AutoCAD:图纸空间中没有活动视口
;   ActiveSelectionSet(RO)=#
;   活动空间=1
;   ActiveTextStyle=#
;   活动UCS=#
;   活动视口=#
;   应用(RO)=#
;   块(RO)=#
;   数据库(RO)=#
;   词典(RO)=#
;   尺寸样式(RO)=#
;   高程模型空间=0.0
;   标高纸张空间=0.0
;   全名(RO)=“”
;   组(RO)=#
;   高度=564
;   HWND(RO)=198838
;   层(RO)=#
;   布局(RO)=#
;   极限=(0.0 0.0 12.0 9.0)
;   线型(RO)=#
;   模型空间(RO)=#
;   MSpace=AutoCAD:模式无效
;   名称(RO)=“Drawing1.dwg”
;   ObjectSnapMode=0
;   纸张空间(RO)=#
;   路径(RO)=“D:”
;   PickfirstSelectionSet(RO)=#
;   绘图(RO)=#
;   绘图配置(RO)=#
;   首选项(RO)=#
;   只读(RO)=0
;   注册应用程序(RO)=016d2084>
;   保存(RO)=0
;   选择集(RO)=#
;   文本样式(RO)=#
;   用户协调系统(RO)=#
;   公用设施(RO)=#
;   视口(RO)=#
;   视图(RO)=#
;   宽度=978
;   窗口状态=3
;   WindowTitle(RO)=“Drawing1”
; 支持的方法:
;   激活()
;   试听信息(1)
;   关闭(2)
;   CopyObjects(3)
;   EndUndoMark()
;   出口(3)
;   GetVariable(1)
;   把手对象(1)
;   导入(3)
;   LoadShapeFile(1)
;   新(1)
;   目标对象(1)
;   打开(1)
;   PurgeAll()
;   再生(1)
;   保存()
;   SaveAs(2)
;   SendCommand(1)
;   SetVariable(2)
;   StartUndoMark()
;   Wblock(2)
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 18:19:41 | 显示全部楼层
这太奇怪了。”缺少材质集合和“ActiveMaterial”属性我不知道如何帮助您可以打开“开发人员帮助”>“ActiveX和VBA引用”>“属性”,然后尝试查找“材质属性”。如果是,我想看看所有者对象。与普通Autocad一样:
回复

使用道具 举报

18

主题

65

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
107
发表于 2022-7-6 18:23:38 | 显示全部楼层
请帮我把2个lisp程序合并成一个。
 
添加材料和添加颜色lisp程序我想结合。
 
请指导我
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 18:30:44 | 显示全部楼层
 
有。列表“Lst”的每个成员的最后一个成员是一种颜色(0-255)。
 
  1. (defun c:pumc(/ actDoc Lst sSet mLst cMat sCnt l
  2.       Cnt mCnt eCnt cCol *error*)
  3. (vl-load-com)
  4. (setq Lst (list
  5.        '("0" "Global" 4)
  6.        '("Layer1" "Material 1" 1)
  7.        '("Layer2" "Material 2" 6)
  8.      ); end list
  9.            ); end setq
  10. (defun *error*(msg)
  11.     (if actDoc(vla-EndUndoMark actDoc))
  12.     (princ)
  13.    ); end of error*
  14. (vl-load-com)
  15. (if(setq sSet(ssget "_X" '((0 . "*SOLID"))))
  16. (progn
  17.    (setq sCnt 0 lCnt 0)
  18.    (vlax-for mat (vla-get-Materials
  19.            (setq actDoc
  20.               (vla-get-ActiveDocument
  21.                 (vlax-get-acad-object))))
  22.      (setq mLst(cons(vla-get-Name mat)mLst))
  23.      ); end vlax-for
  24.   (vla-StartUndoMark actDoc)
  25.    (foreach itm
  26.        (mapcar 'vlax-ename->vla-object
  27.          (vl-remove-if 'listp
  28.            (mapcar 'cadr(ssnamex sSet))))
  29.       (if(setq cMat
  30.                 (cadr
  31.                   (assoc
  32.                     (setq cLay(vla-get-Layer itm))Lst)))
  33.         (if(member cMat mLst)
  34.           (if(vl-catch-all-error-p
  35.                (vl-catch-all-apply 'vla-put-Material
  36.                  (list itm cMat)))
  37.             (setq lCnt(1+ lCnt))
  38.             (setq sCnt(1+ sCnt))
  39.             ); end if
  40.           (if(not(member cMat mCnt))
  41.            (setq mCnt(cons cMat mCnt))
  42.             ); end if
  43.           ); end if
  44.         (if(not(member cLay eCnt))
  45.           (setq eCnt(cons cLay eCnt))
  46.           ); end if
  47.        );end if
  48.       (if(setq cCol
  49.         (last
  50.            (assoc
  51.              (setq cLay(vla-get-Layer itm))Lst)))
  52. (if(vl-catch-all-error-p
  53.       (vl-catch-all-apply 'vla-put-Color
  54.         (list itm cCol))) nil
  55.    ); end if
  56. ); end if
  57.     ); end foreach
  58.    (vla-EndUndoMark actDoc)
  59.    (if(or(/= 0 lCnt)(/= 0(length mCnt))(/= 0(length eCnt)))
  60.      (progn
  61. (princ "\n========================= ERROR LIST =========================\n")
  62. (if(/= 0(length mCnt))
  63.   (progn
  64.     (princ "\nFollowing materials missed in drawing: \n")
  65.     (foreach mat mCnt
  66.       (princ(strcat "\n " mat))
  67.       ); end foreach
  68.     (princ "\n")
  69.     ); end progn
  70.   ); end if
  71.       (if(/= 0(length eCnt))
  72.   (progn
  73.     (princ "\nSome solid layers missed in list: \n")
  74.     (foreach lay eCnt
  75.       (princ(strcat "\n " lay))
  76.       ); end foreach
  77.     (princ "\n")
  78.     ); end progn
  79.   ); end if
  80. (if(/= 0 lCnt)
  81.    (princ(strcat "\n" (itoa lCnt) " were on locked layer!\n"))
  82.   ); end if
  83. (princ "\n========================== END LIST ==========================\n")
  84. (textscr)
  85. ); end progn
  86.      ); end if
  87.              (princ(strcat "\n<<< Materials and colors are attached for "
  88.               (itoa sCnt) " of "
  89.               (itoa(sslength sSet)) " solids >>>"))
  90.    ); end progn
  91. (princ "\n<!> No Solids Found <!> ")
  92. ); end if
  93. (princ)
  94. ); end of c:pumc

 
它在2005年不起作用。我不知道Visual LISP是如何访问版本材料集合的。可能在2007年(R 17.0)?
回复

使用道具 举报

18

主题

65

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
107
发表于 2022-7-6 18:34:05 | 显示全部楼层
谢谢阿斯米。。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 13:52 , Processed in 0.498796 second(s), 62 queries .

© 2020-2025 乐筑天下

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