世人皆醉 发表于 2022-7-25 08:49:51

如何在绘图中能够完美的避开全局变量的重叠

(defun c:c1(/ pt0 d3 p1 p2 p3 p4 p5 d4 p6 p7 d1s d2s)
   (vl-load-com)
(if (not ad1)
(setq ad1 548.5 ad2 3000)
    )
这个是我第一个命令,我将ad1和ad2设定为全局变量,如果没有ad1,那么设定ad1和ad2的值,有的话就采用默认值,这样做的目的是做一些重复性的目的时,可以省去输入的时间
(defun c:c2(/ pt0 d3 p1 p2 p3 p4 p5 d4 p6 p7 d1s d2s)
   (vl-load-com)
(if (not c2d1)
(setq c2d1 548.5 ad2 2500ad3 150)
    )
这个时候第二个命令的ad2就会和第一个命令冲突了,我连续输入第一个和第二个两个命令后,下一次再输入第一个命令的时候这个时候ad2就会变成我用第二个命令输入的默认值了,而不是我用第一个命令输入的默认值

请问大佬们,有没有什么办法能够解决两个命令默认值冲突的情况,不要更改全局变量,因为我这两个命令只是示范一下,实际要输入的值有很多,命令也有很多,不可能把所有的命令默认值的全局变量名字都改个遍吧,能不能有啥好的解决方法啥的


菜卷鱼 发表于 2022-7-25 08:49:52

import os;
import os.path
def reset():
    i = 0
    j = 0
    path = r"E:/Users/administrator/Desktop/MECpg/"
    filelist = os.listdir(path)# 该文件夹下所有的文件(包括文件夹)
    for files in filelist:# 遍历所有文件
      i = i + 1
      Olddir = os.path.join(path, files);# 原来的文件路径
      if os.path.isdir(Olddir):# 如果是文件夹则跳过
            continue;
      #print(os.path.splitext(files))
      #filename = os.path.splitext(files);# 文件名
      #filetype = os.path.splitext(files);# 文件扩展名
      filename,filetype=os.path.splitext(files)
      filePath=path+filename+filetype
      if filetype.lower() == ".lsp" :
            if alter(filePath,"(command " , "(cmds " ):
                j +=1
    if j==0:
      print("没有需要替换的内容")

def alter(file,old_str,new_str):
    """
    替换文件中的字符串
    :param file:文件名
    :param old_str:旧字符串
    :param new_str:新字符串
    :return:
    """
    file_data = ""
    with open(file, "r", encoding="ANSI") as f:
      goset = False
      for line in f:
            if old_str in line:
                print(file)
                print("替换前:",line)
                line = line.replace(old_str,new_str)
                print("替换后:",line)
                goset = True
            file_data += line
    if goset:
      print("文件重写中...")
      with open(file,"w",encoding="ANSI") as f:
            f.write(file_data)
      return True
    else: return False


if __name__=='__main__':
    reset()

=========================
可以尝试用Python改,上面是我拼凑的程序,把所有lsp文件里的"(command "改成 "(cmds "
alter(filePath,"(command " , "(cmds " ):

xinxirong 发表于 2022-7-25 08:52:13

namedspace

xj6019 发表于 2022-7-25 09:08:33

如果已经有很多重复的了,应该没什么好办法,只能挨个去改,如果还没多少个代码这样搞,建议赶紧用复杂的命名规则习惯来定义一个全局变量,防止被其他覆盖,或者大佬说的,你每个程序一个文件搞成独立的空间,不过感觉也麻烦吧,想省事,好像没啥好招

etoxp 发表于 2022-7-29 17:27:44

可以将ad1和ad2命名为*ad1_220729和*ad2_220729。加*是为了容易知道是全局变量,后面加日期是为了与其它*ad1、*ad2区别开来。
页: [1]
查看完整版本: 如何在绘图中能够完美的避开全局变量的重叠