曙光一号 发表于 2002-10-12 16:23:00

[求助]大家好!我是一个新手,很多问题都不懂,请大家多多指教。谢谢!

我想编一个小程序以实现打断工能,源程序如下:
(defun c:br(/ a bb )
(setq a (getvar "osmode"))
(setvar "osmode" 544)
(setq bb (getpoint "\n 请输入打断点:"))
(command "break" bb bb)
(setvar "osmode" a)
)
加载后运行,一般的情况还可以,但遇到特殊情况就不行了。如两条线相交,我想在焦点把其中一条线打断,而结果往往是将另外的一条线打断;还有我想把一个圆分成两段圆弧,也没法实现
还请您多多指点,本人不胜感激。
谢谢!

ll_j 发表于 2002-10-12 17:08:00

打断应使用F选项。

(defun C:BRF(/ e1 pt)
(setq e1 (entsel "\nSelect object: ")
      pt (getpoint "\nPick a point: ")
)
(command "break" e1 "f" pt pt)
)

林岸生 发表于 2002-10-13 10:13:00

把一个圆分成两段圆弧

把一个圆分成两段圆弧,下面的代码也许能做到,也是新手。
(defun C:BRC(/ en1 en2 edstart end pt1 pt2 a)
(setq a (getvar "osmode"))
(setvar "osmode" 544)
(while (/= (cdr (assoc 0 (entget (car
        (setq en1 (entsel "\nSelect a Circle: ")))))) "CIRCLE")
    (alert "Not a circle, try again...")
)
(setq pt1 (getpoint "\nPick first point: ")
        pt2 (getpoint "\nPick second point: ")
)
(command "break" en1 "f" pt1 pt2)
(command "copy" en1 "" pt1 pt1)
(setq en2 (entlast)
        ed (entget en2))
(setq start (cdr (assoc 50 ed))
        end (cdr (assoc 51 ed)))
(setq ed (subst (cons 50 end) (assoc 50 ed) ed)
        ed (subst (cons 51 start) (assoc 51 ed) ed))
(entmod ed)
(setvar "osmode" a)
);

曙光一号 发表于 2002-10-14 07:00:00

谢谢指教!通过使用F选项,已经解决了怎样区分实体的问题。

从您的解决方法中我总结出一个心得,那就是不仅仅要注意CAD命令的本身,还要注意它的参数,在关键时刻他们是很有用的,对么?
但有些命令的参数不能完全从CAD的命令行中获得,如TEXT命令,通过什么参数能把文字限定在一定范围内,随着字符的长短来自动改变字符的间隙。
如果一个命令有“隐藏”的参数,怎样来获得他们

曙光一号 发表于 2002-10-14 07:03:00

我从来没有想到通过再创建一个实体的方法来解决这个问题的,谢谢您的指点,让我回去

我从来没有想到通过再创建一个实体的方法来解决这个问题的,谢谢您的指点,让我回去试一试在好好谢谢您吧。

ll_j 发表于 2002-10-14 18:30:00

字符的间隙是在Shx文件中定义的。

字符的间隙是在Shx文件中定义的,不可能随意改变,不过在Text的对齐方式选项中的Align、Fit可能对你有些帮助。如果一定要这样做,只好写程序,将汉字一个一个的调入。
至于隐藏参数,确实应该有,至少隐含的系统变量是有点,前面有过讨论。我的看法是最好不用,一定还有不足,否则干吗藏着。有些隐含参数则当例外,就是兼容低版本的参数,应该不会有问题,不过在高版本中一般有替代。

曙光一号 发表于 2002-10-18 07:15:00

打断函数整理后内容如下:


还请各位批评指正,谢谢!
页: [1]
查看完整版本: [求助]大家好!我是一个新手,很多问题都不懂,请大家多多指教。谢谢!