乐筑天下

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

[编程交流] LISP缺少一行。

[复制链接]

9

主题

27

帖子

20

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-5 15:59:24 | 显示全部楼层 |阅读模式
我有下面的代码在一个点上放置一个块。然后根据用户提供的信息排列该块。然后移动所有块,使插入点位于所有块的顶部和中心。它有时工作正常,但大约有一半的时间会跳过第一个移动命令。有人能告诉我我错过了什么吗?
 
  1. (DEFUN C:COMEDARRAY ( / OLDL NOR NOC CEB CEP )
  2. (SETQ OLDL (GETVAR "CLAYER"))
  3. (COMMAND "_LAYER" "SET" "ELEC-CE" "")
  4. (SETQ NOR (GETINT "\nENTER NUMBER OF COMED ROWS: "))
  5. (SETQ NOC (GETINT "\nENTER NUMBER OF COMED COLUMNS: "))
  6. (setq CEP1 (getpoint "\nPICK INSERT POINT FOR BLOCK: "))
  7. (COMMAND "_INSERT" "S:\\LightSett\\LISP FILES\\LISP USED BLOCKS\\COMED PROFILE.DWG" CEP1 "" "" "")
  8. (SETQ CEB (ENTLAST))
  9. (COMMAND "_ARRAY" CEB "" "R" NOR NOC 0.6667 0.3333)
  10. (SETQ CEP (SSGET '((0 . "INSERT"))))
  11. (COMMAND "_MOVE" CEP "" CEP1 (cons (- (CAR CEP1) (/ (* NOC 0.3333) 2)) (CDR CEP1)))
  12. (COMMAND "_MOVE" CEP "" CEP1 (LIST (CAR CEP1) (- (CADR CEP1) (* NOR 0.6667)) (CADDR CEP1)))
  13. (command "layer" "set" OLDL "")
  14. (PRINC)
  15. )

165929pgt8n42dnd84addy.png
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-5 16:12:43 | 显示全部楼层
确保该层存在并已解锁
回复

使用道具 举报

51

主题

481

帖子

457

银币

后起之秀

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

铜币
262
发表于 2022-7-5 16:20:13 | 显示全部楼层
我的5美分未测试
  1. (defun c:comedarray ( / oldl nor noc ceb cep )
  2. (if (and
  3. (setq nor (cond ((getint (strcat "\nEnter number of comed rows: " (itoa (setq nor (cond ( nor ) ( 1 )))) ))) ( nor )))
  4. (setq noc (cond ((getint (strcat "\nEnter number of comed columns: " (itoa (setq noc (cond ( noc ) ( 1 )))) ))) ( noc )))
  5. (setq cep1 (getpoint "\npick insert point for block: "))
  6. )
  7.    (progn
  8.      (if (vl-file-directory-p "s:\\lightsett\\lisp files\\lisp used blocks")
  9. (progn
  10.   (setq oldl (getvar "clayer"))
  11.   (mapcar '(lambda ( a b c d ) (MakeLayer a b "Continuous" c T 0 d))
  12.           '("ELEC-CE")
  13.           '( 1 )
  14.           '( 0.09 )
  15.           '("Elect" "" )
  16.           )
  17.   (setvar "clayer" "ELEC-CE" )
  18.   (vl-cmdf "_.-insert" "s:\\lightsett\\lisp files\\lisp used blocks\\comed profile.dwg" cep1 "1" "1" "0")                ; insert block
  19.   (setq ceb (entlast))
  20.   (vl-cmdf "_array" ceb "" "r" nor noc 0.6667 0.3333)
  21.   (setq cep (ssget "x" (list (cons 0 "INSERT") (cons 2 "comed profile"))))
  22.   (vl-cmdf "_move" cep "" cep1 (cons (- (car cep1) (/ (* noc 0.3333) 2)) (cdr cep1)))
  23.   (vl-cmdf "_move" cep "" cep1 (list (car cep1) (- (cadr cep1) (* nor 0.6667)) (caddr cep1)))
  24.   (setvar "clayer" oldl )
  25.   ))
  26.      ))
  27. (princ)
  28. )
  29. (defun MakeLayer ( name colour linetype lineweight willplot bitflag description )
  30.    ;; (MakeLayer name colour linetype lineweight willplot bitflag description )
  31.    ;; Specifications:
  32.    ;; Description        Data Type        Remarks
  33.    ;; -----------------------------------------------------------------
  34.    ;; Layer Name          STRING          Only standard chars allowed                       
  35.    ;; Layer Colour        INTEGER         may be nil, -ve for Layer Off, Colour < 256       
  36.    ;; Layer Linetype      STRING          may be nil, If not loaded, CONTINUOUS.       
  37.    ;; Layer Lineweight    REAL            may be nil, 0 <= x <= 2.11                       
  38.    ;; Plot?               BOOLEAN         T = Plot Layer, nil otherwise               
  39.    ;; Bit Flag            INTEGER         0=None, 1=Frozen, 2=Frozen in VP, 4=Locked       
  40.    ;; Description         STRING          may be nil for no description               
  41.    ;; Function will return list detailing whether layer creation is successful.       
  42.    ;; © Lee Mac 2010
  43. (regapp "AcAecLayerStandard")
  44. (or (tblsearch "LAYER" name)
  45.    (entmake
  46.      (append
  47.        (list
  48.          (cons 0        "LAYER")
  49.          (cons 100        "AcDbSymbolTableRecord")
  50.          (cons 100        "AcDbLayerTableRecord")
  51.          (cons 2        name)
  52.          (cons 70        bitflag)
  53.          (cons 290        (if willplot 1 0))
  54.          (cons 6        (if (and linetype (tblsearch "LTYPE" linetype)) linetype "CONTINUOUS"))
  55.          (cons 62        (if (and colour (< 0 (abs colour) 256)) colour 7))
  56.          (cons 370        (fix (* 100 (if (and lineweight (<= 0.0 lineweight 2.11)) lineweight 0.0))))
  57.   )
  58. (if description (list (list -3 (list "AcAecLayerStandard" (cons 1000 "") (cons 1000 description)))))
  59. ))))
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:26:42 | 显示全部楼层
@罗伊,
 
也在想同样的事情,
我过去也有一些奇怪的行为导致了bij OSNAP。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:34:40 | 显示全部楼层
 
 
你可能是对的,这也是我的第一个想法,但OP(完全?)跳过了移动命令,所以这就是为什么我的第二个建议:-)
 
 
Gr.Rlx
回复

使用道具 举报

76

主题

312

帖子

254

银币

后起之秀

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

铜币
390
发表于 2022-7-5 16:43:02 | 显示全部楼层
保持osmode的简单性,并将defuns保存在库lisp中(如果有),然后在每个例程中使用simple(oszero)(osold)(osx 512)调用它或添加到Acaddoc。lsp。
 
  1. (command "_.move" ss "" "_non" pt1 "_non" pt2)
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:46:47 | 显示全部楼层
谢谢大家,这是我的午睡。我应该想到这一点,这就是我在累的时候尝试编码的结果。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:58:41 | 显示全部楼层
回复

使用道具 举报

9

主题

27

帖子

20

银币

初来乍到

Rank: 1

铜币
48
发表于 2022-7-5 17:00:35 | 显示全部楼层
Thank you all, it was my osnap. I should have thought of that, that is what I get for trying to code when I am tired.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:08 , Processed in 0.460852 second(s), 74 queries .

© 2020-2025 乐筑天下

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