找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 640|回复: 2

[求助] [求助]:困扰了好久的问题!!急!!!用lisp怎么样实现方向的变换等问题?

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2004-10-26 19:59:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我编的剖切符号插入lsp程序


但不能变换方向,请大虾们帮忙看看,错在那里?还有能不能将程序简化,因为我是才学lisp,好些都不知道怎样做。

里面的命令

a1和a3剖切符号插入

a2图名插入

s1和s2分别为立面符号和索引符号插入
源代码:
;横向剖切符号插入命令
(defun c:a1 (/ p1 p1 lst cdd pt1 pt2 n1)
(princ "\n")
(princ "横向剖切符号插入命令,输入a1调入命令。")
(setvar "CMDECHO" 0)
(setq lay (getvar "clayer"))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 4799)
(setvar "ORTHOMODE" 1)
(setq p1 (getpoint "\n指定横向剖线第一点:"))
(setq p2 (getpoint p1 "\n指定横向剖线下一点:"))
(setq p1 (trans p1 1 0))
(setq p2 (trans p2 1 0))
(entmake (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))
(entdel (entlast))
(setvar "ORTHOMODE" 1)
(command "_.pline" (trans p1 0 1) (trans p2 0 1))
(while (= (getvar "cmdnames") "PLINE")
  (command pause)
  )
  (command)
  (command "ORTHOMODE" 0)
(setq cdd (getvar "CDATE"))
(setq cdd (rtos cdd 2 4))
(setq pt1 (getpoint "\n输入剖切符号插入点:"))
(if (= pt1 nil)
   (setq pt1 '(0 0 0))
)
(setq pt2 (getpoint "\n输入剖切索引号插入点:"))
(if (= pt2 nil)
   (setq pt2 '(0 0 0))
)
(setq n1 (getint "\n缩放比例<1>:"))
(if (= n1 nil)
   (setq n1 1)
)
(command "INSERT" "pmfh01.dwg" pt1 n1 n1 "")
(command "INSERT" "pmfh02.dwg" pt2 n1 n1 "")
(princ)
)

;图名符号插入命令
(defun c:a2 (/ p1 p1 lst pt1 n1)
(princ "\n")
(princ "图名符号插入命令,输入a2调入命令。")
(setvar "CMDECHO" 0)
(setq lay (getvar "clayer"))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 4799)
(setvar "ORTHOMODE" 1)
(setq p1 (getpoint "\n指定图名线第一点:"))
(setq p2 (getpoint p1 "\n指定图名线下一点:"))
(setq p1 (trans p1 1 0))
(setq p2 (trans p2 1 0))
(entmake (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))
(entdel (entlast))
(setvar "ORTHOMODE" 1)
(command "_.pline" (trans p1 0 1) (trans p2 0 1))
(while (= (getvar "cmdnames") "PLINE")
  (command pause)
  )
  (command)
  (command "ORTHOMODE" 0)
(setq pt1 (getpoint "\n输入图名插入点:"))
(if (= pt1 nil)
   (setq pt1 '(0 0 0))
)
(setq n1 (getint "\n缩放比例<1>:"))
(if (= n1 nil)
   (setq n1 1)
)
(command "INSERT" "tm.dwg" pt1 n1 n1 "")
(princ)
)
;;;;纵向剖切符号插入命令,
(defun c:a3 (/ p1 p1 lst pt1 pt2 n1)
(princ "\n")
(princ "纵向剖切符号插入命令,输入a3调入命令。")
(setvar "CMDECHO" 0)
(setq lay (getvar "clayer"))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 4799)
(setvar "ORTHOMODE" 1)
(setq p1 (getpoint "\n指定纵向剖线第一点:"))
(setq p2 (getpoint p1 "\n指纵向剖线定下一点:"))
(setq p1 (trans p1 1 0))
(setq p2 (trans p2 1 0))
(entmake (list (cons 0 "LINE") (cons 10 P1) (cons 11 P2)))
(entdel (entlast))
(setvar "ORTHOMODE" 1)
(command "_.pline" (trans p1 0 1) (trans p2 0 1))
(while (= (getvar "cmdnames") "PLINE")
  (command pause)
  )
  (command)
  (command "ORTHOMODE" 0)
(setq pt1 (getpoint "\n输入剖切符号插入点:"))
(if (= pt1 nil)
   (setq pt1 '(0 0 0))
)
(setq pt2 (getpoint "\n输入剖切索引号插入点:"))
(if (= pt2 nil)
   (setq pt2 '(0 0 0))
)
(setq n1 (getint "\n缩放比例<1>:"))
(if (= n1 nil)
   (setq n1 1)
)
(command "INSERT" "pmfh03.dwg" pt1 n1 n1 "")
(command "INSERT" "pmfh04.dwg" pt2 n1 n1 "")
(princ)
)

;;;;;立面符号插入命令
(defun c:s1 (/ lst pt1 pt2 rot n1)
(princ "\n")
(princ "立面符号插入命令,输入s1调入命令。")
(setvar "CMDECHO" 0)
(setq lay (getvar "clayer"))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 4799)
(setq pt1 (getpoint "\n输入立面符号插入点:"))
(if (= pt1 nil)
   (setq pt1 '(0 0 0))
)
(setq pt2 (getpoint "\n输入立面方向插入点:"))
(if (= pt2 nil)
   (setq pt2 '(0 0 0))
)
(setq n1 (getint "\n缩放比例<1>:"))
(if (= n1 nil)
   (setq n1 1)
)
(setq rot (getangle "输入旋转角度 <0>"))
(if (= rot nil)
   (setq rot 0)
)
(command "INSERT" "lms.dwg" pt2 n1 rot "")
(command "INSERT" "lm.dwg" pt1 n1 n1 "")
(princ)
)

;;;;;;索引符号插入命令
(defun c:s2 (/ lst pt1 pt2 pt3 n1)
(princ "\n")
(princ "索引符号插入命令,输入s2调入命令。")
(setvar "CMDECHO" 0)
(setq lay (getvar "clayer"))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 4799)
(setq pt1 (getpoint "\n输入索引符号插入点[右索引(Y)/左索引(Z)]:"))
(if (= pt1 nil)
   (setq pt1 '(0 0 0))
)
(setq n1 (getint "\n缩放比例<1>:"))
(if (= n1 nil)
   (setq n1 1)
)
(command "INSERT" "sz.dwg" pt1 n1 n1 "")
(princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-10-26 23:19:44 | 显示全部楼层
pmfh01.dwg、pmfh02.dwg等图块没有提供,无法测试!
程序太长。
有什么问题先说明!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

 楼主| 发表于 2004-10-27 07:36:23 | 显示全部楼层
后面的附件中有全部的程序和图块。
问题如下:
;;;;;;索引符号插入命令
(defun c:s2 (/ lst pt1 pt2 pt3 n1)
(princ "\n")
(princ "索引符号插入命令,输入s2调入命令。")
(setvar "CMDECHO" 0)
(setq lay (getvar "clayer"))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 4799)
(setq pt1 (getpoint "\n输入索引符号插入点[右索引(Y)/左索引(Z)]:"))
(if (= pt1 nil)
(setq pt1 '(0 0 0))
)
(setq n1 (getint "\n缩放比例<1>:"))
(if (= n1 nil)
(setq n1 1)
)
(command "INSERT" "sz.dwg" pt1 n1 n1 "")
(princ)
)

怎么样实现选项(setq pt1 (getpoint "\n输入索引符号插入点[右索引(Y)/左索引(Z)]:"))
选左索引插入一个块,选右索引插入另一个块?

在这个程序中:
;;;;;立面符号插入命令
(defun c:s1 (/ lst pt1 pt2 rot n1)
(princ "\n")
(princ "立面符号插入命令,输入s1调入命令。")
(setvar "CMDECHO" 0)
(setq lay (getvar "clayer"))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 4799)
(setq pt1 (getpoint "\n输入立面符号插入点:"))
(if (= pt1 nil)
(setq pt1 '(0 0 0))
)
(setq pt2 (getpoint "\n输入立面方向插入点:"))
(if (= pt2 nil)
(setq pt2 '(0 0 0))
)
(setq n1 (getint "\n缩放比例<1>:"))
(if (= n1 nil)
(setq n1 1)
)
(setq rot (getangle "输入旋转角度 <0>"))
(if (= rot nil)
(setq rot 0)
)
(command "INSERT" "lms.dwg" pt2 n1 rot "")
(command "INSERT" "lm.dwg" pt1 n1 n1 "")
(princ)
)

怎样使用方向翻转,
(setq rot (getangle "输入旋转角度 <0>"))
(if (= rot nil)
(setq rot 0)
)
这段代码可以进行角度的输入,但是输入角度会出现问题,
如我输入90,让他旋转90度,但他将x方向缩小了90个单位,怎么回事?

期求解答!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 13:49 , Processed in 0.372476 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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