明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2280|回复: 6

又有一个问题!!!

[复制链接]
发表于 2002-4-29 13:07:00 | 显示全部楼层 |阅读模式
我想在程序中添加一段代码,用来检测是否有名为"Center"的层,如没有,则创建线型为"CENTER",名为"Center"的层,可运行后系统提示错误:线型center未定义,位于图层表记录CENTER。但是使用"Continuous"线型就没问题。这是为什么?该怎么解决?谢谢!!!
发表于 2002-4-29 16:47:00 | 显示全部楼层

我在AUTOCAD2002不会有这种情况

我在AUTOCAD2002不会有这种情况
  (if (= (tblsearch "layer" "center") NIL)
    (command "_.layer" "m" "center" "c"        "red" "" "lt" "center"        "" ""
            )
  )
发表于 2002-4-29 23:10:00 | 显示全部楼层

你应该先调入center线型

发表于 2002-4-30 14:57:00 | 显示全部楼层

这里有我写的一个样例

(setq old_lay (getvar "clayer"))
  (if (= (tblobjname "LAYER" "1") nil)
    (if        (= (tblobjname "LTYPE" "点划线") nil)
      (progn
        (command "-linetype" "load" "点划线" "acad.lin" "")
        (if (= (tblobjname "LTYPE" "点划线") nil)
          (progn
            (command "-linetype" "load" "CENTERX2" "acad.lin" "")
            (entmake (list
                       '(0 . "LAYER")
                       '(100 . "AcDbSymbolTableRecord")
                       '(100 . "AcDbLayerTableRecord" )
                       '(6 . "centerx2")
                       '(62 . 1)
                       '(70 . 0)
                       '(2 . "1")
                     )
            )
          )
        )
        (entmake (list
                   '(0 . "LAYER")
                   '(100 . "AcDbSymbolTableRecord")
                   '(100 . "AcDbLayerTableRecord" )
                   '(6 . "点划线")
                   '(62 . 1)
                   '(70 . 0)
                   '(2 . "1")
                 )
        )
      )
      (progn
        (entmake (list
                   '(0 . "LAYER")
                   '(100 . "AcDbSymbolTableRecord")
                   '(100 . "AcDbLayerTableRecord" )
                   '(6 . "点划线")
                   '(62 . 1)
                   '(70 . 0)
                   '(2 . "1")
                 )
        )

      )
    )
  )
  (setvar "clayer" "1")
 楼主| 发表于 2002-4-30 15:34:00 | 显示全部楼层

谢谢!!!

我已经拉下来了,准备仔细研究
发表于 2002-4-30 19:58:00 | 显示全部楼层

其实不是版本的关系...

写程序要知道常量与变量,用AutoCAD也同样道理。
作为常量的各种线形,本来就应当放在常量容器——图形模板中,否则当然会出乱子。
其实您的日常生活中也同样道理,打火机放在口袋里,抽烟时才方便。
那么,用软件为什么不这样继续使用您的常识呢?不是一个道理么?
发表于 2002-5-4 18:15:00 | 显示全部楼层

我写的VBA的例程

Private Function FindLayer(ByVal LayerName As String) As Boolean
    Dim myLayer As AcadLayer
    For Each myLayer In ThisDrawing.Layers
        If myLayer.Name = LayerName Then
            FindLayer = True
            Exit Function
        End If
    Next
    FindLayer = False
End Function

Private Function FindLinetype(ByVal HaveLineType As String) As Boolean
    Dim myLt As AcadLineType
    For Each myLt In ThisDrawing.Linetypes
        If myLt.Name = HaveLineType Then
            FindLinetype = True
            Exit Function
        End If
    Next
    FindLinetype = False
End Function

Sub SetLayer()
    If Not FindLayer("Center") Then
        Dim ly As AcadLayer
        Set ly = ThisDrawing.Layers.Add("Center")
    End If

    ly.Color = acRed
    ly.Lineweight = acLnWt070
        
    If Not FindLinetype("CENTER") Then
        ThisDrawing.Linetypes.Load "CENTER", "acadiso.lin"
    End If
        
    ly05.LineType = "CENTER"
End Sub
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:36 , Processed in 0.189151 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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