明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3227|回复: 10

悬之又玄的几个问题--弹一曲《笑傲江湖》,叹一声《知音难觅》

  [复制链接]
发表于 2012-8-22 15:13 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2012-11-23 10:29 编辑

;;1 是不是可以不动用注册表,设置一个自己的变量?
;; 如果是这样,比使用注册表操作函数简单多了
  1. (if (null (getenv "LMac\\ABBRotation"))
  2.     (setenv "LMac\\ABBRotation" "ON")
  3. )

;;2 (startapp (findfile "EduPlotStamp.exe"))如果写成(startapp "EduPlotStamp.exe")在有些机器上是不能运行的
;; 尽管肯定是在支持目录下.

;;3 Vlisp编辑器在输出局部变量时,不认识pause为系统自己的保留字,会把它当作局部变量

;;4 选择集相减
;;ss1 ss2选择相同的东西
  1. (setq ss1 (ssget))
  2. (setq ss2 (ssget))
  3. (equal ss1 ss2)    ;返回nil
  4. (command "._Select" ss1 "_Remove" ss2 "")
  5. (sslength (setq ss (ssget "_P"))) ;ss 不为空  看来用Select的方法相减还是件麻烦的事

;;看来还是用下面的方法可靠些
  1. ;;(setq ss1 (ssget)) (setq ss2 (ssget))
  2. ;;***********************功能 选择集相减
  3. ;;返回 选择集 or nil
  4. ;;(setq ss1 (ssget)) (setq ss2 (ssget))
  5. (defun C:SS_Sub (SS1 SS2 / ENAME SS SSTEMP)
  6.   (cond ((and (equal (type ss1) 'PICKSET)
  7.        (equal (type ss1) 'PICKSET)
  8.   )
  9.   (cond ((equal (sslength ss1) (sslength ss2))
  10.   (vl-cmdf "_.select" ss1 "")
  11.   (setq ss (ssget "p"))
  12.   (vl-cmdf "_.select" ss2 "")
  13.   (setq ssTemp (ssget "p"))
  14.   (repeat (sslength ssTemp)
  15.     (Setq ENAME (SsName ssTemp 0))
  16.     (SsDel ENAME ssTemp)
  17.     (if (ssmemb ENAME ss)
  18.       (SsDel ENAME SS)
  19.     )
  20.   )
  21.   (if (equal (sslength ss) 0)
  22.     nil
  23.     ss
  24.   )
  25.         )
  26.         (T
  27.   (command "._Select" ss1 "_Remove" ss2 "")
  28.   (ssget "_P")
  29.         )
  30.   )
  31. )
  32. ((and (equal (type ss1) 'PICKSET)
  33.        (not (equal (type ss2) 'PICKSET))
  34.   )
  35.   ss1
  36. )
  37. (T nil)
  38.   )
  39. )
  40. ;;自贡黄明儒2012.8.23
  41. ;;***********************功能 选择集相减

;;5  自定义了acad.lsp,有些cad并不加载它,这是为什么呢?难道是电脑智能,怕了acad.lsp病毒,挥刀自宫了?

评分

参与人数 1明经币 +1 收起 理由
xshrimp + 1

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · 学习|主题: 95, 订阅: 7
 楼主| 发表于 2012-8-27 10:46 | 显示全部楼层
;;没有人跟贴,我自娱自乐
;;自定义变量保存方法盘点,向各位高手学习
[hide=lisp]
;;1  保存变量到 图形文档中
(defun EF:getVar (sVar)
  (cdr
    (assoc (strcase sVar) (vlax-ldata-get "EF_Tools" "Var"))
  )
  ;;(vlax-ldata-put "EF_Tools" "EF_InfoList" lst_Info)
)                               
(defun EF:setVar (sVar value / varlist)
  (if (assoc (setq sVar (strcase sVar))
             (setq varlist (vlax-ldata-get "EF_Tools" "Var"))
      )
    (vlax-ldata-put
      "EF_Tools"
      "Var"
      (subst (cons sVar value) (assoc sVar varlist) varlist)
    )
    (vlax-ldata-put
      "EF_Tools"
      "Var"
      (cons (cons sVar value) varlist)
    )
  )
  value
)

;;2 保存变量到 注册表
(setq number
       (vl-registry-read
         "HKEY_CURRENT_USER\\software\\TH++"
         "MySetVar"
       )
)
(vl-registry-write
  "HKEY_CURRENT_USER\\software\\TH++"
  "MySetVar"
  varnumber
)
;;3 用系统变量
(if (null (getenv "LMac\\ABBRotation"))
  (setenv "LMac\\ABBRotation" "ON")
)

;;4 users5 highflybird喜欢用这个,可是users5并不随图保存?我郁闷.
;;AutoCAD到底给我们留了多少个这们的变量?

;;5 各文档间使用同一变量,CAD关闭后消失
(vl-propagate 'HH:MyNameis)

[/hide]
;;处理自定义变量,用logand

评分

参与人数 1明经币 +2 收起 理由
Gu_xl + 2 赞一个!请继续自娱自乐

查看全部评分

发表于 2012-8-27 11:23 | 显示全部楼层
自定义了acad.lsp,有些cad并不加载它,这是为什么呢?难道是电脑智能,怕了acad.lsp病毒,有了免疫能力?
我现在使用sendkeys,不在使用PGP了,
我觉得要换个角度想一下,我们的程序一是自己用,这时什么都可以调整;二是其它人用,人家根本就不在乎我们使用什么方式来实现命令的加载,所以我使用秋枫的的程序来打包,其它人只用装一遍就行了
 楼主| 发表于 2012-8-28 11:24 | 显示全部楼层
;;才找到知音二人,G版和革天明,听G版言,我再弹
;;Caoyin那把刷子,看起来爽,用起来爽,但问题1 回车中不断;2 选择集没有排序
;;第一个问题无法解决,可能也只有C版自己才能解决,我试了几次都没有成功
;;第二个问题就简单多了,看下面
;;选择集SS排序
  1. ;;;******************************************************选择集SS排序
  2. ;;选择集排序在其它地方也是用得着的呀,为什么不能写成通用性函数呢?
  3. ;;"D->U"从下到上;"U->D"从上到下;"L->R"从左到右;"R->L"从右到左
  4. ;;示例(setq ss (ssget)) (SS_Sort ss "D->U" "L->R")下到上,左到右
  5. ;;自贡黄明儒 2012.8.28
  6. (defun SS_Sort (SS Sort1 Sort2 / E LST N PT10)
  7.   ;;1 [功能] 图元列表->选择集 By caiqs
  8.   (defun lst->ss (lst / SS X)
  9.     (setq ss (ssadd))
  10.     (last (mapcar '(lambda (x) (ssadd x ss)) lst))
  11.   )
  12.   ;;2 表 排序
  13.   (defun Sort_pList (PLIST Sort1 Sort2 / SYMBOL1 SYMBOL2)
  14.     (cond
  15.       ((member Sort1 (list "L->R" "R->L"))
  16.        (cond ((equal Sort1 "L->R") (setq Symbol1 '>))
  17.              (T (setq Symbol1 '<))
  18.        )
  19.        (cond ((equal Sort2 "D->U") (setq Symbol2 '>))
  20.              (T (setq Symbol2 '<))
  21.        )
  22.        (vl-sort
  23.          PLIST
  24.          '(lambda (p1 p2)
  25.             (cond (((eval Symbol1) (car (car p1)) (car (car p2))) T)
  26.                   ((and        (= (car (car p1)) (car (car p2)))
  27.                         ((eval Symbol2) (cadr (car p1)) (cadr (car p2)))
  28.                    )
  29.                    T
  30.                   )
  31.             )
  32.           )
  33.        )
  34.       )
  35.       (T
  36.        (cond ((equal Sort1 "D->U") (setq Symbol1 '>))
  37.              (T (setq Symbol1 '<))
  38.        )
  39.        (cond ((equal Sort2 "L->R") (setq Symbol2 '>))
  40.              (T (setq Symbol2 '<))
  41.        )
  42.        (vl-sort
  43.          PLIST
  44.          '(lambda (p1 p2)
  45.             (cond (((eval Symbol1) (cadr (car p1)) (cadr (car p2))) T)
  46.                   ((and        (= (cadr (car p1)) (cadr (car p2)))
  47.                         ((eval Symbol2) (car (car p1)) (car (car p2)))
  48.                    )
  49.                    T
  50.                   )
  51.             )
  52.           )
  53.        )
  54.       )
  55.     )
  56.   )
  57.   ;;3 选择集SS排序 主程序
  58.   (repeat (setq n (sslength ss))
  59.     (setq e (ssname ss (setq n (1- n))))
  60.     (setq pt10 (cdr (assoc 10 (entget e))))
  61.     (setq lst (cons (cons pt10 e) lst))
  62.   )  
  63.   (setq lst (mapcar 'cdr (Sort_pList lst Sort1 Sort2)))
  64.   (lst->ss lst)
  65. )
  66. ;;;******************************************************选择集SS排序

点评

这是按选择集图元坐标排序。不是按绘图顺序排序。  发表于 2012-8-28 11:48
发表于 2012-11-23 01:32 | 显示全部楼层
SS 这个排序有严重问题对 镜像过的图元 及 拷贝的图元 排序是错的。

点评

这是一个重大发现,有空我试试  发表于 2012-11-23 10:28
发表于 2012-11-23 01:32 | 显示全部楼层
俺留下QQ,呵呵,望交流。651884547 。
发表于 2012-11-23 08:39 | 显示全部楼层
本帖最后由 阿然 于 2012-11-23 08:41 编辑

useri1-5是可以随文件保存的,不过不喜欢用这个,不存在唯一性,其他lisp也有可能使用这些变量。

点评

根据帮助来看,只要当前图档一关闭,随之灰飞烟灭,不过这样的特性对我来说更合适,用于存储临时值,非常用,只是太少了,才3*5=15个  发表于 2013-1-4 08:53
发表于 2012-11-23 09:15 | 显示全部楼层
自贡黄明儒 发表于 2012-8-28 11:24
;;才找到知音二人,G版和革天明,听G版言,我再弹
;;Caoyin那把刷子,看起来爽,用起来爽,但问题1 回车中不断 ...

呵呵,你这个排序俺很喜欢,就是有点瑕疵。希望能改正哇。
发表于 2013-1-3 15:10 | 显示全部楼层
这个先留个脚印有用!楼主再来一曲
发表于 2013-4-28 13:15 | 显示全部楼层
保存变量,用字典,现在用字典搞搞。不知道还有其他好方法没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 20:08 , Processed in 0.181856 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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